Azure Monitor의 Log Analytics 작업 영역, 애플리케이션 및 리소스에서 데이터 쿼리

여러 작업 영역, 애플리케이션 및 리소스에서 데이터를 쿼리하는 방법에는 두 가지가 있습니다.

  • 이 문서에 설명된 대로 작업 영역(), app()또는 resource() 식을 사용하여 작업 영역, 앱 또는 리소스 정보를 명시적으로 지정합니다.
  • 리소스 컨텍스트 쿼리를 사용하여 암시적으로. 특정 리소스, 리소스 그룹 또는 구독의 컨텍스트에서 쿼리하는 경우 쿼리는 이러한 리소스에 대한 데이터를 포함하는 모든 작업 영역에서 관련 데이터를 검색합니다. 리소스 컨텍스트 쿼리는 클래식 Application Insights 리소스에서 데이터를 검색하지 않습니다.

이 문서에서는 , app()resource() 식을 사용하여 workspace()여러 Log Analytics 작업 영역, 애플리케이션 및 리소스의 데이터를 쿼리하는 방법을 설명합니다.

Azure Lighthouse를 통해 다른 Microsoft Entra 테넌트에서 구독을 관리하는 경우 해당 고객 테넌트에서 만든 Log Analytics 작업 영역을 쿼리에 포함할 수 있습니다.

Important

작업 영역 기반 Application Insights 리소스사용하는 경우 원격 분석은 다른 모든 로그 데이터와 함께 Log Analytics 작업 영역에 저장됩니다. 식을 workspace() 사용하여 여러 작업 영역의 애플리케이션에서 데이터를 쿼리합니다. 동일한 작업 영역에 있는 여러 애플리케이션의 데이터를 쿼리하기 위해 작업 영역 간 쿼리가 필요하지 않습니다.

필수 사용 권한

  • 예를 들어 Log Analytics 판독기 기본 제공 역할에서 제공하는 대로 쿼리하는 Log Analytics 작업 영역에 대한 권한이 있어야 합니다Microsoft.OperationalInsights/workspaces/query/*/read.
  • 쿼리를 저장하려면 예를 들어 Log Analytics 기여자 기본 제공 역할에서 제공하는 대로 쿼리를 저장할 쿼리 팩에 대한 권한이 있어야 합니다microsoft.operationalinsights/querypacks/queries/action.

제한 사항

  • 리소스 간 및 서비스 간 쿼리는 정의에 다른 작업 영역 간 또는 서비스 간 식(예adx(): , workspace()arg()resource()및 )이 포함된 매개 변수가 있는 함수 및 app()함수를 지원하지 않습니다.
  • 단일 쿼리에 최대 100개의 Log Analytics 작업 영역 또는 클래식 Application Insights 리소스를 포함할 수 있습니다.
  • 많은 수의 리소스에서 쿼리하면 쿼리 속도가 상당히 느려질 수 있습니다.
  • 로그 검색 경고의 리소스 간 쿼리는 현재 scheduledQueryRules API에서만 지원됩니다. 레거시 Log Analytics 경고 API를 사용하는 경우 현재 API로 전환해야 합니다.
  • 다른 작업 영역과 같은 교차 리소스에 대한 참조는 명시적이어야 하며 매개 변수화할 수 없습니다.

함수를 사용하여 작업 영역, 애플리케이션 및 리소스에서 쿼리

이 섹션에서는 함수 사용 및 사용 없이 함수를 사용하여 작업 영역, 애플리케이션 및 리소스를 쿼리하는 방법을 설명합니다.

함수를 사용하지 않고 쿼리

리소스 인스턴스에서 여러 리소스를 쿼리할 수 있습니다. 이러한 리소스는 작업 영역 및 앱이 결합될 수 있습니다.

세 작업 영역의 쿼리 예:

union 
  Update, 
  workspace("00000000-0000-0000-0000-000000000001").Update, 
  workspace("00000000-0000-0000-0000-000000000002").Update
| where TimeGenerated >= ago(1h)
| where UpdateState == "Needed"
| summarize dcount(Computer) by Classification

공용 구조체, 여기서 연산자 및 요약에 대한 자세한 내용은 union 연산자, 여기서 연산자 및 요약 연산자를 참조하세요.

함수를 사용하여 쿼리

리소스 간 쿼리를 사용하여 여러 Log Analytics 작업 영역 및 Application Insights 구성 요소의 데이터를 상호 연결하는 경우 쿼리는 복잡하고 기본 확인하기 어려울 수 있습니다. Azure Monitor 로그 쿼리의 함수를 사용하여 쿼리 논리를 쿼리 리소스 범위와 구분해야 합니다. 이 메서드는 쿼리 구조를 간소화합니다. 다음 예제에서는 여러 Application Insights 구성 요소를 모니터링하고 애플리케이션 이름으로 실패한 요청 수를 시각화하는 방법을 보여 줍니다.

Application Insights 구성 요소의 범위를 참조하는 다음 예제와 같은 쿼리를 만듭니다. 이 withsource= SourceApp 명령은 로그를 보낸 애플리케이션 이름을 지정하는 열을 추가합니다. 별칭을 사용하여 쿼리를 함수 로 저장합니다 applicationsScoping.

// crossResource function that scopes my Application Insights components
union withsource= SourceApp
app('00000000-0000-0000-0000-000000000000').requests, 
app('00000000-0000-0000-0000-000000000001').requests,
app('00000000-0000-0000-0000-000000000002').requests,
app('00000000-0000-0000-0000-000000000003').requests,
app('00000000-0000-0000-0000-000000000004').requests

이제 다음 예제와 같이 리소스 간 쿼리에서 이 함수 를 사용할 수 있습니다. 함수 별칭은 applicationsScoping 정의된 모든 애플리케이션에서 요청 테이블의 합합을 반환합니다. 그런 다음, 쿼리는 실패한 요청에 대해 필터링하고 애플리케이션별로 추세를 시각화합니다. 이 parse 예제에서는 연산자가 선택 사항입니다. 속성에서 애플리케이션 이름을 추출합니다 SourceApp .

applicationsScoping 
| where timestamp > ago(12h)
| where success == 'False'
| parse SourceApp with * '(' applicationId ')' * 
| summarize count() by applicationId, bin(timestamp, 1h) 
| render timechart

참고 항목

작업 영역 및 애플리케이션을 포함한 경고 규칙 리소스의 액세스 유효성 검사가 경고 생성 시 수행되므로 이 메서드를 로그 검색 경고와 함께 사용할 수 없습니다. 경고 생성 후 함수에 새 리소스를 추가하는 것은 지원되지 않습니다. 로그 검색 경고에서 리소스 범위 지정에 함수를 사용하려는 경우 포털 또는 Azure Resource Manager 템플릿을 사용하여 경고 규칙을 편집하여 범위가 지정된 리소스를 업데이트해야 합니다. 또는 로그 검색 경고 쿼리에 리소스 목록을 포함할 수 있습니다.

작업 영역을 사용하여 Log Analytics 작업 영역 간 쿼리()

workspace() 식을 사용하여 동일한 리소스 그룹, 다른 리소스 그룹 또는 다른 구독의 특정 작업 영역에서 데이터를 검색합니다. 이 식을 사용하여 Application Insights 쿼리에 로그 데이터를 포함하고 로그 쿼리의 여러 작업 영역에서 데이터를 쿼리할 수 있습니다.

구문

workspace(ID)

인수

*Identifier*: 다음 표의 형식 중 하나를 사용하여 작업 영역을 식별합니다.

식별자 설명 예시
ID 작업 영역의 GUID workspace("00000000-0000-0000-0000-0000000000000")
Azure 리소스 ID Azure 리소스의 식별자 workspace("/subscriptions/00000000-0000-0000-00000000000000/resourcegroups/Contoso/providers/Microsoft.OperationalInsights/workspaces/contosoretail")

예제

workspace("00000000-0000-0000-0000-000000000000").Update | count
workspace("/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Contoso/providers/Microsoft.OperationalInsights/workspaces/contosoretail").Event | count
union 
( workspace("00000000-0000-0000-0000-000000000000").Heartbeat | where Computer == "myComputer"),
(app("00000000-0000-0000-0000-000000000000").requests | where cloud_RoleInstance == "myRoleInstance")
| count  
union 
(workspace("00000000-0000-0000-0000-000000000000").Heartbeat), (app("00000000-0000-0000-0000-000000000000").requests) | where TimeGenerated between(todatetime("2023-03-08 15:00:00") .. todatetime("2023-04-08 15:05:00"))

app()을 사용하여 클래식 Application Insights 애플리케이션에서 쿼리

app 식을 사용하여 동일한 리소스 그룹, 다른 리소스 그룹 또는 다른 구독의 특정 클래식 Application Insights 리소스에서 데이터를 검색합니다. 작업 영역 기반 Application Insights 리소스사용하는 경우 원격 분석은 다른 모든 로그 데이터와 함께 Log Analytics 작업 영역에 저장됩니다. 식을 workspace() 사용하여 여러 작업 영역의 애플리케이션에서 데이터를 쿼리합니다. 동일한 작업 영역에 있는 여러 애플리케이션의 데이터를 쿼리하기 위해 작업 영역 간 쿼리가 필요하지 않습니다.

구문

app(ID)

인수

*Identifier*: 아래 표의 형식 중 하나를 사용하여 앱을 식별합니다.

식별자 설명 예시
ID 앱의 GUID app("00000000-0000-0000-0000-0000000000000")
Azure 리소스 ID Azure 리소스의 식별자 app("/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Fabrikam/providers/microsoft.insights/components/fabrikamapp")

예제

app("00000000-0000-0000-0000-000000000000").requests | count
app("/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Fabrikam/providers/microsoft.insights/components/fabrikamapp").requests | count
union 
(workspace("00000000-0000-0000-0000-000000000000").Heartbeat | where Computer == "myComputer"),
(app("00000000-0000-0000-0000-000000000000").requests | where cloud_RoleInstance == "myColumnInstance")
| count  
union 
(workspace("00000000-0000-0000-0000-000000000000").Heartbeat), (app("00000000-0000-0000-0000-000000000000").requests)
| where TimeGenerated between(todatetime("2023-03-08 15:00:00") .. todatetime("2023-04-08 15:05:00"))

resource()를 사용하여 리소스 간 데이터 상관 관계 지정

resource 식은 다른 리소스에서 데이터를 검색하기 위해 리소스로 범위가 지정된 Azure Monitor 쿼리에 사용됩니다.

구문

resource(ID)

인수

*Identifier*: 데이터 상관 관계를 지정할 리소스, 리소스 그룹 또는 구독을 식별합니다.

식별자 설명 예시
리소스 리소스에 대한 데이터를 포함합니다. resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm")
리소스 그룹 또는 구독 모든 리소스에 포함된 데이터를 포함합니다. resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup)

예제

union (Heartbeat),(resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm").Heartbeat) | summarize count() by _ResourceId, TenantId
union (Heartbeat),(resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup).Heartbeat) | summarize count() by _ResourceId, TenantId

다음 단계

로그 쿼리 개요 및 Azure Monitor 로그 데이터의 구조는 Azure Monitor의 로그 데이터 분석을 참조하세요.