Azure Monitor의 Log Analytics 작업 영역, 애플리케이션 및 리소스에서 데이터 쿼리
여러 작업 영역, 애플리케이션 및 리소스에서 데이터를 쿼리하는 방법에는 두 가지가 있습니다.
- 이 문서에 설명된 대로 workspace(), app() 또는 resource() 식을 사용하여 작업 영역, 앱 또는 리소스 정보를 명시적으로 지정합니다.
- 리소스-컨텍스트 쿼리를 암시적으로 사용. 특정 리소스, 리소스 그룹 또는 구독의 컨텍스트에서 쿼리하는 경우 쿼리는 이러한 리소스에 대한 데이터를 포함하는 모든 작업 영역에서 관련 데이터를 검색합니다. 리소스 컨텍스트 쿼리는 클래식 Application Insights 리소스에서 데이터를 검색하지 않습니다.
이 문서에서는 workspace()
, app()
및 resource()
식을 사용하여 여러 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()
,arg()
,resource()
,workspace()
및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, where 및 summarize 연산자에 대한 자세한 내용은 union 연산자, where 연산자 및 summarize 연산자를 참조하세요.
함수를 사용하여 쿼리
리소스 간 쿼리를 사용하여 여러 Log Analytics 작업 영역 및 Application Insights 구성 요소에서 데이터의 상관 관계를 지정하는 경우 쿼리는 복잡하고 유지 관리하기 어려워질 수 있습니다. functions in 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 템플릿을 사용하여 경고 규칙을 편집하여 범위가 지정된 리소스를 업데이트해야 합니다. 또는 로그 검색 경고 쿼리에 리소스 목록을 포함할 수 있습니다.
workspace()를 사용하여 Log Analytics 작업 영역 간 쿼리
workspace()
식을 사용하여 동일한 리소스 그룹, 다른 리소스 그룹 또는 다른 구독의 특정 작업 영역에서 데이터를 검색합니다. 이 식을 사용하여 Application Insights 쿼리에 로그 데이터를 포함하고 로그 쿼리의 여러 작업 영역에서 데이터를 쿼리할 수 있습니다.
구문
workspace(
ID)
인수
*Identifier*
: 다음 표의 형식 중 하나를 사용하여 작업 영역을 식별합니다.
식별자 | 설명 | 예시 |
---|---|---|
ID | 작업 영역의 GUID | workspace("00000000-0000-0000-0000-000000000000") |
Azure 리소스 ID | Azure 리소스의 식별자 | workspace("/subscriptions/00000000-0000-0000-0000-000000000000/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-000000000000") |
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에서 로그 데이터 분석을 참조하세요.