자습서: Azure Data Explorer에서 모니터링 데이터 수집 및 쿼리

이 자습서에서는 코드를 작성하지 않고 진단 및 활동 로그 데이터를 Azure Data Explorer 클러스터에 수집하는 방법을 설명합니다. 이 간단한 수집 메서드를 사용하면 데이터 분석을 위해 Azure Data Explorer에 대한 쿼리를 신속하게 시작할 수 있습니다.

이 자습서에서 학습할 방법은 다음과 같습니다.

  • Azure Data Explorer 데이터베이스에서 테이블 및 수집 매핑을 만듭니다.
  • 업데이트 정책을 사용하여 수집된 데이터의 형식을 지정합니다.
  • 이벤트 허브를 만들어서 Azure Data Explorer에 연결합니다.
  • 데이터를 Azure Monitor 진단 메트릭 및 로그활동 로그에서 이벤트 허브로 스트림합니다.
  • Azure Data Explorer를 사용하여 수집된 데이터를 쿼리합니다.

참고

모든 리소스를 동일한 Azure 위치나 지역에 만듭니다.

사전 요구 사항

Azure Monitor 데이터 공급자: 진단 메트릭 및 로그와 활동 로그

아래의 Azure Monitor 메트릭 및 로그와 활동 로그에서 제공하는 데이터를 확인하고 이해합니다. 이러한 데이터 스키마를 기반으로 하여 수집 파이프라인을 만듭니다. 로그의 각 이벤트에는 레코드 배열이 있습니다. 이 레코드 배열은 나중에 자습서에서 분할됩니다.

진단 메트릭 및 로그와 활동 로그의 예제

Azure 진단 메트릭 및 로그와 활동 로그는 Azure 서비스에서 내보내, 해당 서비스의 작업에 대한 데이터를 제공합니다.

진단 메트릭 예

진단 메트릭은 1분의 시간 조직으로 집계됩니다. 쿼리 기간에 대한 Azure Data Explorer 메트릭 이벤트 스키마의 예제는 다음과 같습니다.

{
    "records": [
    {
        "count": 14,
        "total": 0,
        "minimum": 0,
        "maximum": 0,
        "average": 0,
        "resourceId": "/SUBSCRIPTIONS/<subscriptionID>/RESOURCEGROUPS/<resource-group>/PROVIDERS/MICROSOFT.KUSTO/CLUSTERS/<cluster-name>",
        "time": "2018-12-20T17:00:00.0000000Z",
        "metricName": "QueryDuration",
        "timeGrain": "PT1M"
    },
    {
        "count": 12,
        "total": 0,
        "minimum": 0,
        "maximum": 0,
        "average": 0,
        "resourceId": "/SUBSCRIPTIONS/<subscriptionID>/RESOURCEGROUPS/<resource-group>/PROVIDERS/MICROSOFT.KUSTO/CLUSTERS/<cluster-name>",
        "time": "2018-12-21T17:00:00.0000000Z",
        "metricName": "QueryDuration",
        "timeGrain": "PT1M"
    }
    ]
}

Azure Data Explorer에서 수집 파이프라인 설정

Azure Data Explorer 파이프라인을 설정하려면 테이블 생성 및 데이터 수집과 같은 여러 단계가 필요합니다. 데이터를 조작, 매핑 및 업데이트할 수도 있습니다.

Azure Data Explorer 웹 UI에 연결

Azure Data Explorer TestDatabase 데이터베이스에서 쿼리를 선택하여 Azure Data Explorer 웹 UI를 엽니다.

쿼리 페이지.

대상 테이블 만들기

Azure Monitor 로그의 구조는 테이블 형식이 아닙니다. 데이터를 조작하고 각 이벤트를 하나 이상의 레코드로 확장합니다. 원시 데이터는 활동 로그의 경우 ActivityLogsRawRecords, 진단 메트릭 및 로그의 경우 DiagnosticRawRecords라는 중간 테이블로 수집됩니다. 이 때 데이터가 조작되고 확장됩니다. 그런 다음, 업데이트 정책을 사용하면 확장된 데이터가 활동 로그의 경우 ActivityLogs 테이블, 진단 메트릭의 경우 DiagnosticMetrics 및 진단 로그의 경우 DiagnosticLogs로 수집됩니다. 즉, 활동 로그를 수집하기 위해 별도의 세 개 테이블을 만들고, 진단 메트릭 및 로그 수집을 수집하기 위해 별도의 두 개 테이블을 만들어야 합니다.

Azure Data Explorer 웹 UI를 사용하여 Azure Data Explorer 데이터베이스에 대상 테이블을 만듭니다.

진단 메트릭용 테이블 만들기

  1. TestDatabase 데이터베이스에서 진단 메트릭 레코드를 저장하기 위한 DiagnosticMetrics라는 테이블을 만듭니다. 다음 .create table 관리 명령을 사용합니다.

    .create table DiagnosticMetrics (Timestamp:datetime, ResourceId:string, MetricName:string, Count:int, Total:double, Minimum:double, Maximum:double, Average:double, TimeGrain:string)
    
  2. 실행을 선택하여 테이블을 만듭니다.

    쿼리를 실행합니다.

  3. TestDatabase 데이터베이스에서 다음 쿼리를 사용하여 데이터를 조작하기 위한 DiagnosticRawRecords라는 중간 데이터 테이블을 만듭니다. 실행을 선택하여 테이블을 만듭니다.

    .create table DiagnosticRawRecords (Records:dynamic)
    
  4. 중간 테이블에 대한 보존 정책을 0으로 설정합니다.

    .alter-merge table DiagnosticRawRecords policy retention softdelete = 0d
    

테이블 매핑 만들기

데이터 형식이 json이기 때문에 데이터 매핑이 필요합니다. json 매핑은 각 json 경로를 테이블 열 이름에 매핑합니다. 특수 문자를 포함하는 JSON 경로는 ['속성 이름']으로 이스케이프되어야 합니다. 자세한 내용은 JSONPath 구문을 참조하세요.

진단 메트릭 및 로그를 테이블에 매핑

진단 메트릭 및 로그 데이터를 테이블에 매핑하려면 다음 쿼리를 사용합니다.

.create table DiagnosticRawRecords ingestion json mapping 'DiagnosticRawRecordsMapping' '[{"column":"Records","Properties":{"path":"$.records"}}]'

메트릭 및 로그 데이터에 대한 업데이트 정책 만들기

진단 메트릭에 대한 데이터 업데이트 정책 만들기

  1. 컬렉션의 각 값에서 별도의 행을 받도록 진단 메트릭 레코드의 해당 컬렉션을 확장하는 함수를 만듭니다. mv-expand 연산자를 사용합니다.

    .create function DiagnosticMetricsExpand() {
       DiagnosticRawRecords
       | mv-expand events = Records
       | where isnotempty(events.metricName)
       | project
           Timestamp = todatetime(events['time']),
           ResourceId = tostring(events.resourceId),
           MetricName = tostring(events.metricName),
           Count = toint(events['count']),
           Total = todouble(events.total),
           Minimum = todouble(events.minimum),
           Maximum = todouble(events.maximum),
           Average = todouble(events.average),
           TimeGrain = tostring(events.timeGrain)
    }
    
  2. 대상 테이블에 업데이트 정책을 추가합니다. 이 정책은 DiagnosticRawRecords 중간 데이터 테이블에서 새로 수집된 데이터에 대한 쿼리를 자동으로 실행하고, 해당 결과를 DiagnosticMetrics 테이블에 수집합니다.

    .alter table DiagnosticMetrics policy update @'[{"Source": "DiagnosticRawRecords", "Query": "DiagnosticMetricsExpand()", "IsEnabled": "True", "IsTransactional": true}]'
    

Azure Event Hubs 네임스페이스 만들기

Azure 진단 설정을 사용하면 메트릭 및 로그를 스토리지 계정 또는 이벤트 허브에 내보낼 수 있습니다. 이 자습서에서는 이벤트 허브를 통해 메트릭 및 로그를 라우팅합니다. 다음 단계에서는 진단 메트릭 및 로그에 대한 이벤트 허브 네임스페이스 및 이벤트 허브를 만듭니다. Azure Monitor는 활동 로그에 대해 이벤트 허브 insights-operational-logs를 만듭니다.

  1. Azure Portal에서 Azure Resource Manager 템플릿을 사용하여 이벤트 허브를 만듭니다. 이 문서의 나머지 단계를 수행하려면, Azure에 배포 단추를 마우스 오른쪽 단추로 클릭하고 새 창에서 열기를 선택합니다. Azure에 배포 단추를 선택하면 Azure Portal로 이동합니다.

    Azure에 배포 단추

  2. 이벤트 허브 네임스페이스 및 진단 로그에 대한 이벤트 허브를 만듭니다. 이벤트 허브 네임스페이스를 만드는 방법을 알아보세요.

  3. 다음 정보로 양식을 작성합니다. 다음 표에 나와 있지 않은 설정에는 기본값을 사용하세요.

    설정 제안 값 설명
    구독 구독 이벤트 허브에 사용할 Azure 구독을 선택합니다.
    리소스 그룹 test-resource-group 새 리소스 그룹을 만듭니다.
    위치 요구에 가장 적합한 지역을 선택합니다. 다른 리소스와 동일한 위치에 이벤트 허브 네임스페이스를 만듭니다.
    네임스페이스 이름 AzureMonitoringData 네임스페이스를 식별하는 고유한 이름을 선택합니다.
    이벤트 허브 이름 DiagnosticData 이벤트 허브는 고유한 범위 지정 컨테이너 역할을 하는 네임스페이스 아래에 배치됩니다.
    소비자 그룹 이름 adxpipeline 소비자 그룹 이름을 만듭니다. 소비자 그룹을 사용하면 각기 별도의 이벤트 스트림 보기가 표시되는 여러 애플리케이션을 사용할 수 있습니다.

Azure Monitor 메트릭 및 로그를 이벤트 허브에 연결

이제 진단 메트릭 및 로그와 활동 로그를 이벤트 허브에 연결해야 합니다.

진단 메트릭 및 로그를 이벤트 허브에 연결

메트릭을 내보낼 리소스를 선택합니다. 이벤트 허브 네임스페이스, Azure Key Vault, Azure IoT Hub 및 Azure Data Explorer 클러스터를 포함한 여러 가지 리소스 종류에서 진단 데이터 내보내기를 지원합니다. 이 자습서에서는 Azure Data Explorer 클러스터를 리소스로 사용하고, 쿼리 성능 메트릭과 수집 결과 로그를 검토합니다.

  1. Azure Portal에서 Kusto 클러스터를 선택합니다.

  2. 진단 설정을 선택한 다음, 진단 켜기 링크를 선택합니다.

    진단 설정.

  3. 진단 설정 창이 열립니다. 다음과 같은 단계를 수행합니다.

    1. 진단 로그 데이터 이름을 ADXExportedData라고 지정합니다.

    2. 로그 아래에서 SucceededIngestionFailedIngestion 확인란을 모두 선택합니다.

    3. 메트릭 아래에서 쿼리 성능 확인란을 선택합니다.

    4. 이벤트 허브로의 스트림 확인란을 선택합니다.

    5. 구성을 선택합니다.

      진단 설정 창.

  4. 이벤트 허브 선택 창에서 직접 만든 이벤트 허브로 진단 로그의 데이터를 내보내는 방법을 구성합니다.

    1. 이벤트 허브 네임스페이스 선택 목록에서 AzureMonitoringData를 선택합니다.
    2. 이벤트 허브 이름 선택 목록에서 DiagnosticData를 선택합니다.
    3. 이벤트 허브 정책 이름 목록에서 RootManagerSharedAccessKey를 선택합니다.
    4. 확인을 선택합니다.
  5. 저장을 선택합니다.

이벤트 허브로 흐르는 데이터 보기

  1. 연결이 정의되고 이벤트 허브로 활동 로그 내보내기가 완료 될 때까지 잠시 기다립니다. 이벤트 허브 네임스페이스로 이동하여 직접 만든 이벤트 허브를 봅니다.

    만들어진 Event Hubs.

  2. 이벤트 허브로 흐르는 데이터 보기:

    이벤트 허브의 데이터.

Azure Data Explorer에 이벤트 허브연결

이제 진단 메트릭 및 로그와 활동 로그에 대한 데이터 연결을 만들어야 합니다.

진단 메트릭 및 로그와 활동 로그에 대한 데이터 연결 만들기

  1. kustodocs라는 Azure Data Explorer 클러스터의 왼쪽 메뉴에서 Databases를 선택합니다.

  2. 데이터베이스 창에서 TestDatabase를 선택합니다.

  3. 왼쪽 메뉴에서 데이터 수집을 선택합니다.

  4. 데이터 수집 창에서 + 데이터 연결 추가를 선택합니다.

  5. 데이터 연결 창에서 다음 정보를 입력합니다.

    이벤트 허브 데이터 연결.

  1. 데이터 연결 창에 다음 설정을 사용합니다.

    데이터 원본:

    설정 제안 값 필드 설명
    데이터 연결 이름 DiagnosticsLogsConnection Azure 데이터 탐색기에서 만들 연결의 이름입니다.
    이벤트 허브 네임스페이스 AzureMonitoringData 앞에서 선택한 네임스페이스를 식별하는 이름입니다.
    이벤트 허브 DiagnosticData 앞에서 만든 이벤트 허브입니다.
    소비자 그룹 adxpipeline 앞에서 만든 이벤트 허브에 정의된 소비자 그룹입니다.

    대상 테이블:

    라우팅 옵션으로는 고정 라우팅과 동적 라우팅이라는 두 가지 옵션이 있습니다. 이 자습서에서는 고정 라우팅(기본값)을 사용합니다. 이 경우 테이블 이름, 데이터 형식 및 매핑을 직접 지정합니다. 내 데이터에 라우팅 정보 포함을 선택 취소합니다.

    설정 제안 값 필드 설명
    테이블 DiagnosticRawRecords TestDatabase 데이터베이스에 만든 테이블입니다.
    날짜 형식 JSON 테이블에 사용되는 형식입니다.
    열 매핑 DiagnosticRawRecordsMapping TestDatabase 데이터베이스에 만든 매핑이며, 들어오는 JSON 데이터를 DiagnosticRawRecords 테이블의 열 이름과 데이터 형식에 매핑합니다.
  2. 만들기를 선택합니다.

새 테이블 쿼리

이제 데이터가 흐르는 파이프라인이 있습니다. 클러스터를 통한 수집은 기본적으로 5분이 소요되므로 쿼리를 시작하기 전에 몇 분 동안 데이터 흐름을 허용합니다.

진단 메트릭 테이블 쿼리

다음 쿼리는 Azure Data Explorer의 진단 메트릭 레코드에서 쿼리 기간 데이터를 분석합니다.

DiagnosticMetrics
| where Timestamp > ago(15m) and MetricName == 'QueryDuration'
| summarize avg(Average)

쿼리 결과:

avg_Average
00:06.156