Azure AI Search 솔루션 모니터링
Azure Monitor는 검색 서비스가 얼마나 잘 사용되고 수행되는지에 대한 인사이트를 제공할 수 있습니다. 경고를 수신하여 문제를 사전에 알릴 수도 있습니다.
여기서는 Azure AI Search에 사용할 수 있는 모든 모니터링 옵션을 살펴보겠습니다. 그런 다음, 검색 솔루션을 관리하기 위해 만들 수 있는 유용한 경고에 대해 알아봅니다.
Azure Monitor에서 Azure AI Search 모니터링
Azure AI Search 서비스를 만들 때 다른 설정을 수행하지 않고도 현재 검색 대기 시간, 초당 쿼리 및 제한된 쿼리의 비율을 볼 수 있습니다. 이 데이터는 개요 페이지의 모니터링 탭에서 볼 수 있습니다.
사용 탭에서 검색 솔루션이 사용하는 리소스를 확인할 수도 있습니다.
이 기본 정보는 모니터링을 시작하는 데 좋지만 좀 더 구성하여 더 자세히 진행할 수 있습니다. Azure 플랫폼에서 다른 리소스를 지원하는 데 익숙한 경우 Azure Monitor를 모든 Azure 리소스에 사용할 수 있음을 알 수 있습니다.
실제로 성능 최적화 단원에서 Azure Monitor를 사용하도록 설정하는 방법을 이미 살펴보았습니다. 이러한 단계에 따라 Azure Monitor가 Log Analytics에서 캡처한 데이터를 사용하여 전체 진단 데이터 세트를 볼 수 있도록 합니다.
Log Analytics 사용을 시작하면 다음 로그 테이블의 성능 및 진단 데이터에 액세스할 수 있습니다.
- AzureActivity - 검색 서비스 스케일링과 같이 실행된 작업을 보여 줍니다.
- AzureDiagnostics - 모든 쿼리 및 인덱싱 작업
- AzureMetrics - 검색 서비스의 상태 및 성능을 측정하는 메트릭에 사용되는 데이터
메트릭을 사용하여 시각적으로 진단 데이터 보기
차트를 만드는 것은 검색 서비스의 성능을 볼 수 있는 강력한 방법입니다. 검색 서비스의 모니터링 섹션에서 메트릭을 선택합니다.
이제 다음 캡처된 메트릭을 추가하도록 선택합니다.
- DocumentsProcessedCount
- SearchLatency
- SearchQueriesPerSecond
- SkillExecutionCount
- ThrottledSearchQueriesPercentage
예를 들어 제한된 쿼리의 백분율에 대해 검색 대기 시간을 그려 쿼리에 대한 응답이 제한의 영향을 받는지 확인할 수 있습니다.
검색 솔루션 로그에 대한 Kusto 쿼리 작성
Log Analytics를 사용하면 캡처된 로그 데이터에 대해 Kusto 쿼리를 작성할 수 있습니다. 이러한 쿼리를 실행하는 가장 쉬운 방법은 모니터링 섹션에서 로그를 선택하는 것입니다. 로그는 Azure AI Search 솔루션으로 자동으로 범위가 지정된 퀘스트 창이 있는 Log Analytics를 엽니다.
위의 쿼리를 사용하면 최근 작업 목록과 발생한 횟수를 확인할 수 있습니다.
AzureDiagnostics
| summarize count() by OperationName
다음은 검색 솔루션 문제를 모니터링하고 진단하는 데 도움이 되는 유용한 쿼리입니다.
쿼리
Kusto
장기 실행 쿼리
AzureDiagnostics
| project OperationName, resultSignature_d, DurationMs, Query_s, Documents_d, IndexName_s
| where OperationName == "Query.Search"
| sort by DurationMs
인덱서 상태
AzureDiagnostics
| project OperationName, Description_s, Documents_d, ResultType, resultSignature_d
| where OperationName == "Indexers.Status"
HTTP 상태 코드
AzureDiagnostics
| where TimeGenerated > ago(7d)
| summarize count() by resultSignature_d
| render barchart
쿼리 속도
AzureDiagnostics
| where OperationName == "Query.Search" and TimeGenerated > ago(1d)
| extend MinuteOfDay = substring(TimeGenerated, 0, 16)
| project MinuteOfDay, DurationMs, Documents_d, IndexName_s
| summarize QPM=count(), AvgDuractionMs=avg(DurationMs), AvgDocCountReturned=avg(Documents_d) by MinuteOfDay
| order by MinuteOfDay desc
| render timechart
평균 쿼리 대기 시간
let intervalsize = 1m;
let _startTime = datetime('2021-02-23 17:40');
let _endTime = datetime('2021-02-23 18:00');
AzureDiagnostics
| where TimeGenerated between(['_startTime']..['_endTime']) // Time range filtering
| summarize AverageQueryLatency = avgif(DurationMs, OperationName in ("Query.Search", "Query.Suggest", "Query.Lookup", "Query.Autocomplete"))
by bin(TimeGenerated, intervalsize)
| render timechart
QPM(분당 평균 쿼리 수)
let intervalsize = 1m;
let _startTime = datetime('2021-02-23 17:40');
let _endTime = datetime('2021-02-23 18:00');
AzureDiagnostics
| where TimeGenerated between(['_startTime'] .. ['_endTime']) // Time range filtering
| summarize QueriesPerMinute=bin(countif(OperationName in ("Query.Search", "Query.Suggest", "Query.Lookup", "Query.Autocomplete"))/(intervalsize/1m), 0.01)
by bin(TimeGenerated, intervalsize)
| render timechart
OPM(분당 인덱싱 작업)
let intervalsize = 1m;
let _startTime = datetime('2021-02-23 17:40');
let _endTime = datetime('2021-02-23 18:00');
AzureDiagnostics
| where TimeGenerated between(['_startTime'] .. ['_endTime']) // Time range filtering
| summarize IndexingOperationsPerSecond=bin(countif(OperationName == "Indexing.Index")/ (intervalsize/1m), 0.01)
by bin(TimeGenerated, intervalsize)
| render timechart
일반적인 검색 솔루션 문제에 대한 알림을 받을 경고 만들기
경고를 통해 검색 서비스를 사전에 관리할 수 있습니다. 다음은 만드는 것을 고려해야 하는 몇 가지 일반적으로 사용되는 경고입니다.
- 대기 시간 검색은 메트릭 신호를 사용하여 경고를 트리거하는 대기 시간(초)을 지정할 수 있습니다.
- 제한된 검색 백분율은 메트릭 신호를 사용하여 백분율을 지정할 수 있습니다.
- Search Service 삭제는 활동 로그 신호를 사용하여 검색 서비스가 삭제되면 알림을 받습니다.
- Search Service 중지는 활동 로그 신호를 사용하여 검색 서비스가 스케일 업 또는 다운되었거나 다시 시작해야 하는 경우 검색 서비스가 중지되면 알림을 받습니다.