Azure Monitor의 Azure Data Explorer 및 Azure Resource Graph에서 데이터 쿼리
Azure Monitor를 사용하면 Log Analytics 작업 영역 및 Application Insights 리소스에서 Azure Data Explorer 및 Azure Resource Graph의 데이터를 쿼리할 수 있습니다. 이 문서에서는 Azure Monitor에서 Azure Resource Graph 및 Azure Data Explorer의 데이터를 쿼리하는 방법을 설명합니다.
Log Analytics 웹 UI, 통합 문서, PowerShell 및 REST API를 포함하여 KQL(Kusto 쿼리 언어) 쿼리를 지원하는 클라이언트 도구를 사용하여 서비스 간 쿼리를 실행할 수 있습니다.
필요한 사용 권한
서비스 간 쿼리를 실행하려면 다음이 필요합니다.
- 예를 들어, Log Analytics 읽기 권한자 기본 제공 역할에서 제공하는 대로 쿼리하는 Log Analytics 작업 영역에 대한
Microsoft.OperationalInsights/workspaces/query/*/read
권한입니다. - Azure Resource Graph에서 쿼리하는 리소스에 대한 읽기 권한자 권한입니다.
- Azure Data Explorer에서 쿼리하는 테이블에 대한 뷰어 권한입니다.
함수 지원 가능성
Azure Monitor 교차 서비스 쿼리는 Application Insights, Log Analytics, Azure Data Explorer 및 Azure Resource Graph에 대해 ".show" 함수만 지원합니다. 이 기능을 사용하면 클러스터 간 쿼리가 Azure Monitor, Azure Data Explorer 또는 Azure Resource Graph 표 형식 함수를 직접 참조할 수 있습니다. 다음 명령은 서비스 간 쿼리에서 지원합니다.
.show functions
.show function {FunctionName}
.show database {DatabaseName} schema as json
Azure Data Explorer에서 데이터 쿼리
adx
패턴 내의 쿼리에 Azure Data Explorer 클러스터의 식별자와 데이터베이스 이름 및 테이블을 차례로 입력합니다.
adx('https://help.kusto.windows.net/Samples').StormEvents
Azure Data Explorer 클러스터 테이블과 Log Analytics 작업 영역을 결합합니다.
union
명령을 사용하여 클러스터 테이블을 Log Analytics 작업 영역과 결합합니다.
예를 들면 다음과 같습니다.
union customEvents, adx('https://help.kusto.windows.net/Samples').StormEvents
| take 10
let CL1 = adx('https://help.kusto.windows.net/Samples').StormEvents;
union customEvents, CL1 | take 10
팁
줄임 형식은 허용됩니다. ClusterName/InitialCatalog. 예를 들어 adx('help/Samples')
은 adx('help.kusto.windows.net/Samples')
로 변환됩니다.
공용 구조체가 아니라 join
연산자를 사용하면 Azure Data Explorer 클러스터의 데이터를 Log Analytics Workspace와 결합하기 위해 hint
를 사용해야 합니다. Hint.remote={Direction of the Log Analytics Workspace}
을 사용합니다.
예를 들어:
AzureDiagnostics
| join hint.remote=left adx("cluster=ClusterURI").AzureDiagnostics on (ColumnName)
다른 테넌트에서 Azure Monitor 리소스를 사용하여 한 테넌트의 Azure Data Explorer 클러스터에서 데이터 조인
서비스 사이에서 테넌트 간 쿼리는 지원되지 않습니다. 양쪽 리소스 모두로 확장되는 쿼리를 실행하기 위해 단일 테넌트에 로그인되어 있습니다.
Azure Data Explorer 리소스가 테넌트 A에 위치하고 Log Analytics 작업 영역이 테넌트 B에 위치한 경우, 다음 두 가지 방법 중 하나를 사용합니다.
- Azure Data Explorer를 사용하면 다른 테넌트의 보안 주체에 대한 역할을 추가할 수 있습니다. 테넌트 B의 사용자 ID를 Azure Data Explorer 클러스터에 대한 권한이 있는 사용자로 추가합니다. Azure Data Explorer 클러스터의 TrustedExternalTenant 속성에 Tenant B가 포함되어 있는지 확인합니다. Tenant B에서 완전히 쿼리를 실행합니다.
- Lighthouse를 사용하여 Azure Monitor 리소스를 테넌트 A에 프로젝션합니다.
다른 테넌트에서 Azure Data Explorer 클러스터에 연결
Kusto Explorer는 사용자 계정이 원래 속한 테넌트에 자동으로 로그인합니다. 동일한 사용자 계정을 사용하여 다른 테넌트의 리소스에 액세스하려면 다음과 같이 연결 문자열에서 TenantId
을 명시적으로 지정해야 합니다.
Data Source=https://ade.applicationinsights.io/subscriptions/SubscriptionId/resourcegroups/ResourceGroupName;Initial Catalog=NetDefaultDB;AAD Federated Security=True;Authority ID=TenantId
Azure Resource Graph에서 데이터 쿼리(미리 보기)
arg("")
패턴을 입력하고 그 뒤에 Azure Resource Graph 테이블 이름을 입력합니다.
예를 들면 다음과 같습니다.
arg("").<Azure-Resource-Graph-table-name>
다음은 새로운 Azure Resource Graph 서비스 간 쿼리 기능을 사용하는 몇 가지 샘플 Azure Log Analytics 쿼리입니다.
Azure Resource Graph 쿼리 결과를 기반으로 Log Analytics 쿼리를 필터링합니다.
arg("").Resources | where type == "microsoft.compute/virtualmachines" and properties.hardwareProfile.vmSize startswith "Standard_D" | join ( Heartbeat | where TimeGenerated > ago(1d) | distinct Computer ) on $left.name == $right.Computer
ARG 쿼리에서 가져온 특정 리소스에만 적용되는 경고 규칙을 만듭니다.
태그를 기준으로 리소스를 제외합니다. 예를 들어, "Test" 태그가 있는 VM에 대한 경고를 트리거하지 않습니다.
arg("").Resources | where tags.environment=~'Test' | project name
CPU 사용률과 관련된 성능 데이터를 검색하고 "prod" 태그를 사용하여 리소스를 필터링합니다.
InsightsMetrics | where Name == "UtilizationPercentage" | lookup ( arg("").Resources | where type == 'microsoft.compute/virtualmachines' | project _ResourceId=tolower(id), tags ) on _ResourceId | where tostring(tags.Env) == "Prod"
더 많은 사용 사례:
- 태그를 사용하여 VM을 연중무휴(24x7) 실행해야 하는지 아니면 밤에 종료해야 하는지 결정합니다.
- 특정 개수의 코어가 포함된 모든 서버에 경고를 표시합니다.
Azure Resource Graph 테이블을 Log Analytics 작업 영역과 결합
union
명령을 사용하여 클러스터 테이블을 Log Analytics 작업 영역과 결합합니다.
예를 들면 다음과 같습니다.
union AzureActivity, arg("").Resources
| take 10
let CL1 = arg("").Resources ;
union AzureActivity, CL1 | take 10
공용 구조체 대신 join
연산자를 사용하는 경우 hint
를 사용하여 Azure Resource Graph의 데이터를 Log Analytics 작업 영역의 데이터와 결합해야 합니다. Hint.remote={Direction of the Log Analytics Workspace}
을 사용합니다. 예를 들어:
Perf | where ObjectName == "Memory" and (CounterName == "Available MBytes Memory")
| extend _ResourceId = replace_string(replace_string(replace_string(_ResourceId, 'microsoft.compute', 'Microsoft.Compute'), 'virtualmachines','virtualMachines'),"resourcegroups","resourceGroups")
| join hint.remote=left (arg("").Resources | where type =~ 'Microsoft.Compute/virtualMachines' | project _ResourceId=id, tags) on _ResourceId | project-away _ResourceId1 | where tostring(tags.env) == "prod"
서비스 간 쿼리를 기반으로 경고 만들기
교차 서비스 쿼리를 기반으로 새 경고 규칙을 만들려면 범위 탭에서 Log Analytics 작업 영역을 선택하여 새 경고 규칙 만들기의 단계를 따릅니다.
제한 사항
- 데이터베이스 이름은 대/소문자를 구분합니다.
- 클러스터에서 타임스탬프 열 식별은 지원되지 않습니다. Log Analytics 쿼리 API는 시간 필터를 전달하지 않습니다.
- 서비스 간 쿼리는 데이터 검색만 지원합니다.
- Private Link(프라이빗 엔드포인트) 및 IP 제한은 서비스 간 쿼리를 지원하지 않습니다.
mv-expand
는 2000개의 레코드로 제한됩니다.- Azure Resource Graph 교차 쿼리는
smv-apply()
,rand()
,arg_max()
,arg_min()
,avg()
,avg_if()
,countif()
,sumif()
,percentile()
,percentiles()
,percentilew()
,percentilesw()
,stdev()
,stdevif()
,stdevp()
,variance()
,variancep()
,varianceif()
연산자를 지원하지 않습니다.