다음을 통해 공유


Azure Monitor에 Azure Automation 진단 로그 전달

Azure Automation에서 Log Analytics 작업 영역으로 Runbook 작업 상태 및 작업 스트림을 보낼 수 있습니다. 이 프로세스에는 작업 영역 연결이 포함되지 않고 완전히 독립적이며 간단한 조사를 수행할 수 있습니다. 개별 작업에 대해 Azure Portal에서 또는 PowerShell을 사용하여 작업 로그 및 작업 스트림을 볼 수 있습니다. Automation 계정에 대한 Azure Monitor 로그를 사용하면 다음을 수행할 수 있습니다.

  • Automation 작업의 상태에 대한 인사이트를 확보합니다.
  • Runbook 작업 상태(예: 실패 또는 일시 중단)를 기반으로 이메일 또는 경고 트리거
  • 작업 스트림에서 고급 쿼리를 작성합니다.
  • Automation 계정 간에 작업 상관 관계를 지정합니다.
  • 사용자 지정 보기와 검색 쿼리를 사용하여 Azure 대시보드를 통해 runbook 결과, runbook 작업 상태 및 기타 관련된 핵심 지표 또는 메트릭을 시각화합니다.
  • Automation 계정, Runbook 및 기타 자산 만들기, 수정 및 삭제 작업과 관련된 감사 로그를 가져옵니다.

Azure Monitor 로그를 사용하면 동일한 작업 영역에 있는 여러 리소스의 로그를 통합할 수 있습니다. 이를 통해 쿼리로 분석하여 수집된 데이터를 신속하게 검색, 통합 및 분석할 수 있습니다. Azure Portal에서 Log Analytics를 사용하여 쿼리를 만들고 테스트한 다음, 이러한 도구를 사용하여 데이터를 직접 분석하거나 시각화 또는 경고 규칙에 사용하기 위해 쿼리를 저장할 수 있습니다.

Azure Monitor는 간단한 로그 쿼리에 적합한 Azure Data Explorer에서 사용하는 KQL(Kusto 쿼리 언어) 버전을 사용합니다. 또한 집계, 조인, 스마트 분석 같은 고급 기능도 포함하고 있습니다. 여러 강좌를 통해 쿼리 언어를 빠르게 배울 수 있습니다.

Azure Automation 진단 설정

Automation 진단 설정 지원을 사용하여 다음의 플랫폼 로그 및 메트릭 데이터를 전달할 수 있습니다.

데이터 형식 설명
작업 로그 Automation 계정의 Runbook 작업 상태입니다.
작업 스트림 Automation 계정에 정의된 Runbook의 작업 스트림 상태입니다.
DSCNodeStatus DSC 노드의 상태입니다.
AuditEvent 데이터 또는 Azure Automation 서비스 설정과의 고객 상호 작용을 기록하는 모든 리소스 로그입니다.
메트릭 총 작업, 총 업데이트, 배포 컴퓨터 실행, 총 업데이트 배포 실행입니다.

Azure Portal에서 진단 설정 구성

Automation 계정 리소스의 메뉴에서 Azure Portal의 진단 설정을 구성할 수 있습니다.

  1. Automation 계정 메뉴에서 모니터링 아래의 진단 설정을 선택합니다.

    진단 설정 옵션의 선택 영역을 보여 주는 스크린샷

  2. 진단 설정 추가를 클릭합니다.

    진단 설정 추가의 선택 영역을 보여 주는 스크린샷

  3. 아직 설정 이름이 없는 경우 진단 설정 이름에 설정 이름을 입력합니다.

    로그 및 메트릭의 모든 범주를 볼 수도 있습니다.

    로그 및 메트릭의 모든 범주를 보여 주는 스크린샷

    • 라우팅할 로그 및 메트릭: 로그의 경우 범주 그룹을 선택하거나 지정된 대상으로 보낼 각 데이터 범주에 대한 개별 확인란을 선택합니다. 메트릭을 Azure Monitor 로그에 저장하려면 AllMetrics를 선택합니다.

    • 대상 세부 정보: 각 대상에 대한 확인란을 선택합니다. 각 상자의 선택 영역에 따라 추가 정보를 추가할 수 있는 옵션이 나타납니다.

      대상 세부 정보 섹션의 선택 영역을 보여 주는 스크린샷

      • Log Analytics: 구독 ID 및 작업 영역 이름을 입력합니다. 작업 영역이 없는 경우 계속하기 전에 작업 영역을 만들어야 합니다.

      • Event Hubs: 다음 조건을 지정합니다.

        • 구독: 이벤트 허브와 동일한 구독입니다.
        • 이벤트 허브 네임스페이스: 아직 이벤트 허브가 없는 경우 이벤트 허브를 만듭니다.
        • 이벤트 허브 이름(선택 사항): 이름을 지정하지 않으면 각 로그 범주에 대해 이벤트 허브가 만들어집니다. 여러 범주를 보내는 경우 이름을 지정하여 만들어진 이벤트 허브 수를 제한할 수 있습니다. 자세한 내용은 Azure Event Hubs 할당량 및 제한을 참조하세요.
        • 이벤트 허브 정책(선택 사항): 정책은 스트리밍 메커니즘이 보유한 권한을 정의합니다. Event Hubs 기능을 참조하세요.
      • 스토리지: 구독, 스토리지 계정 및 보존 정책을 선택합니다. 스토리지 계정을 보여주는 스크린샷

      • 파트너 통합: 먼저 구독에 파트너 통합을 설치해야 합니다. 구성 옵션은 파트너에 따라 다릅니다. 자세한 내용은 Azure Monitor 통합을 참조하세요.

  4. 저장을 클릭합니다.

몇 분 후 새 설정이 이 리소스에 대한 설정 목록에 표시되고, 새 이벤트 데이터가 생성되는 즉시 로그가 지정된 대상에 스트리밍됩니다. 내보낸 이벤트와 Log Analytics 작업 영역의 모양 간에 15분의 시간 차이가 있을 수 있습니다.

로그 쿼리

생성된 로그를 쿼리하려면 다음을 수행합니다.

  1. Automation 계정의 모니터링에서 로그를 선택합니다.

  2. 모든 쿼리에서 Automation 작업을 선택합니다.

    Automation 작업을 선택하기 위해 이동하는 방법을 보여 주는 스크린샷

  3. 실행할 쿼리 중 하나를 선택하고 실행을 클릭합니다.

  4. 사용자 지정 쿼리를 실행하려면 쿼리 창을 닫고 새 쿼리 창에 사용자 지정 쿼리를 붙여넣고 실행을 클릭합니다.

    쿼리의 출력이 결과 창에 표시됩니다.

  5. 새 경고 규칙을 클릭하여 이 쿼리에 대한 Azure Monitor 경고를 구성합니다.

    로그를 쿼리하는 방법을 보여 주는 스크린샷

Azure Monitor 로그 레코드

Azure Automation 진단은 Azure Monitor 로그에 AzureDiagnostics로 태그가 지정된 다음과 같은 형식의 레코드를 만듭니다. 아래 섹션의 표는 Azure Automation에서 생성하는 레코드와 로그 검색 결과에 표시되는 데이터 형식에 대한 예입니다.

작업 로그

속성 설명
TimeGenerated runbook 작업이 실행된 날짜 및 시간입니다.
RunbookName_s Runbook의 이름입니다.
Caller_s 작업을 시작한 호출자입니다. 가능한 값은 전자 메일 주소 또는 예약된 작업의 시스템입니다.
Tenant_g 호출자에 대한 테넌트를 식별하는 GUID(Globally Unique Identifier)입니다.
JobId_g Runbook 작업을 식별하는 GUID입니다.
ResultType Runbook 작업의 상태입니다. 가능한 값은 다음과 같습니다.
- New(신규)
- 생성됨
- 시작됨
- 중지됨
- 일시 중단됨
- 실패
- 완료됨
범주 데이터 유형의 분류입니다. Automation의 경우 값은 JobLogs입니다.
OperationName Azure에서 수행한 작업의 유형입니다. Automation의 경우 이 값은 Job입니다.
리소스 Automation 계정의 이름입니다.
SourceSystem Azure Monitor 로그가 데이터를 수집하는 데 사용하는 시스템입니다. 값은 Azure Diagnostics의 경우 항상 Azure입니다.
ResultDescription Runbook 작업 결과 상태입니다. 가능한 값은 다음과 같습니다.
- 작업 시작
- 작업 실패
- Job Completed입니다.
CorrelationId Runbook 작업의 상관 관계 GUID입니다.
ResourceId Runbook의 Azure Automation 계정 리소스 ID입니다.
SubscriptionId Automation 계정에 대한 Azure 구독 GUID입니다.
ResourceGroup Automation 계정에 대한 리소스 그룹의 이름입니다.
ResourceProvider 리소스 공급자의 이름. 값은 MICROSOFT.AUTOMATION입니다.
ResourceType 리소스 종류. 값은 AUTOMATIONACCOUNTS입니다.

작업 스트림

속성 설명
TimeGenerated Runbook 작업이 실행된 날짜 및 시간입니다.
RunbookName_s Runbook의 이름입니다.
Caller_s 작업을 시작한 호출자입니다. 가능한 값은 전자 메일 주소 또는 예약된 작업의 시스템입니다.
StreamType_s 작업 스트림의 형식입니다. 가능한 값은 다음과 같습니다.
- 진행
- 출력
- 경고
- 오류
- 디버그
- Verbose입니다.
Tenant_g 호출자에 대한 테넌트를 식별하는 GUID입니다.
JobId_g Runbook 작업을 식별하는 GUID입니다.
ResultType runbook 작업의 상태입니다. 가능한 값은 다음과 같습니다.
- 진행 중
범주 데이터 유형의 분류입니다. Automation의 경우 값은 JobStreams입니다.
OperationName Azure에서 수행한 작업의 유형입니다. Automation의 경우 이 값은 Job입니다.
리소스 Automation 계정의 이름입니다.
SourceSystem Azure Monitor 로그가 데이터를 수집하는 데 사용하는 시스템입니다. 값은 Azure Diagnostics의 경우 항상 Azure입니다.
ResultDescription Runbook의 출력 스트림을 포함하는 설명입니다.
CorrelationId Runbook 작업의 상관 관계 GUID입니다.
ResourceId Runbook의 Azure Automation 계정 리소스 ID입니다.
SubscriptionId Automation 계정에 대한 Azure 구독 GUID입니다.
ResourceGroup Automation 계정에 대한 리소스 그룹의 이름입니다.
ResourceProvider 리소스 공급자. 값은 MICROSOFT.AUTOMATION입니다.
ResourceType 리소스 종류. 값은 AUTOMATIONACCOUNTS입니다.

참고 항목

자격 증명이 작업 스트림으로 전송되지 않는지 확인합니다. 서비스는 진단 로그에 작업 스트림을 표시하기 전에 자격 증명을 제거합니다.

감사 이벤트

속성 설명
TenantID 호출자에 대한 테넌트를 식별하는 GUID입니다.
TimeGenerated(UTC) Runbook 작업이 실행된 날짜 및 시간입니다.
범주 AuditEvent
ResourceGroup Automation 계정의 리소스 그룹 이름입니다.
구독 ID Automation 계정에 대한 Azure 구독 GUID입니다.
ResourceProvider MICROSOFT.AUTOMATION
리소스 Automation 계정 이름
ResourceType AUTOMATIONACCOUNTS
OperationName 가능한 값은 업데이트, 만들기, 삭제입니다.
ResultType Runbook 작업의 상태입니다. 가능한 값은 Completed입니다.
CorrelationId Runbook 작업의 상관 관계 GUID입니다.
ResultDescription Runbook 작업 결과 상태입니다. 가능한 값은 업데이트, 만들기, 삭제입니다.
Tenant_g 호출자에 대한 테넌트를 식별하는 GUID입니다.
SourceSystem AzuresMonitor 로그가 데이터를 수집하는 데 사용하는 시스템입니다. 값은 Azure Diagnostics의 경우 항상 Azure입니다.
clientInfo_IpAddress_s {scrubbed}
clientInfo_PrincipalName_s {scrubbed}
clientInfo_TenantId_g 클라이언트의 테넌트 ID입니다.
clientInfo_Issuer_s
clientInfo_ObjectId_g 클라이언트의 개체 ID입니다.
clientInfo_AppId_g 클라이언트의 AppID입니다.
clientInfo_ClientRequestId_g 클라이언트의 RequestID
targetResources_Resource_s 계정, 작업, 자격 증명, 연결, 변수, Runbook입니다.
Type AzureDiagnostics
_ResourceId Runbook의 Azure Automation 계정 리소스 ID입니다.

Azure Monitor 로그에서 Automation 로그 보기

Automation 작업 스트림 및 로그를 Azure Monitor 로그로 보내기 시작했으므로 Azure Monitor 로그 내에서 해당 로그로 수행할 수 있는 작업을 살펴보겠습니다.

로그를 보려면 다음 쿼리를 실행합니다. kusto AzureDiagnostics | where ResourceProvider == "MICROSOFT.AUTOMATION"

작업 로그 및 작업 스트림에 대한 샘플 쿼리

오류와 함께 완료된 모든 작업 찾기

오류에 대한 경고와 같은 시나리오 외에도, runbook 작업에 대해 비종료 오류가 발생하는 경우를 확인할 수 있습니다. 이러한 경우에 PowerShell은 오류 스트림을 생성하지만 비종료 오류가 발생해도 작업이 일시 중단되거나 실패하지 않습니다.

  1. Log Analytics 작업 영역에서 로그를 클릭합니다.
  2. 쿼리 필드에 다음을 입력합니다.
    AzureDiagnostics | where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobStreams" and StreamType_s == "Error" | summarize AggregatedValue = count () by JobId_g. 
    
  3. 검색을 클릭합니다.

작업에 대한 작업 스트림 보기

작업을 디버깅할 때 작업 스트림을 살펴볼 수도 있습니다. 다음 쿼리는 GUID가 2ebd22ea-e05e-4eb9-9d76-d73cbd4356e0인 단일 작업의 모든 스트림을 보여 줍니다.

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobStreams" and JobId_g == "2ebd22ea-e05e-4eb9-9d76-d73cbd4356e0"
| sort by TimeGenerated asc
| project ResultDescription

기록 작업 상태 보기

마지막으로 시간별 작업 기록을 시각화할 수 있습니다. 이 쿼리를 사용하여 시간이 지남에 따른 작업 상태를 검색할 수 있습니다.

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobLogs" and ResultType != "started"
| summarize AggregatedValue = count() by ResultType, bin(TimeGenerated, 1h)

Log Analytics 기록 작업 상태 차트

자동화 작업에서 오류를 보고하는 로그를 찾습니다.

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" 
| where StreamType_s == "Error" 
| project TimeGenerated, Category, JobId_g, OperationName, RunbookName_s, ResultDescription, _ResourceId 

완료된 Azure Automation 작업 찾기

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobLogs" and ResultType == "Completed" 
| project TimeGenerated, RunbookName_s, ResultType, _ResourceId, JobId_g

실패, 일시 중단 또는 중지된 Azure Automation 작업 찾기

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobLogs" and (ResultType == "Failed" or ResultType == "Stopped" or ResultType == "Suspended") 
| project TimeGenerated, RunbookName_s, ResultType, _ResourceId, JobId_g 

오류와 함께 성공적으로 완료된 모든 Runbook 및 작업 나열

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobStreams" and StreamType_s == "Error" 
| project TimeGenerated, RunbookName_s, StreamType_s, _ResourceId, ResultDescription, JobId_g 

Runbook 작업이 실패하거나 일시 중단된 경우 전자 메일 보내기

다음 단계는 Runbook 작업에 문제가 발생한 경우 알리는 이메일 경고를 Azure Monitor에서 설정하는 방법을 설명합니다.

경고 규칙을 만들려면 로그 쿼리에 설명된 대로 경고를 호출해야 하는 Runbook 작업 레코드에 대한 로그 검색을 만듭니다. +새 경고 규칙을 클릭하여 경고 규칙을 구성합니다.

  1. Automation 계정의 모니터링에서 로그를 선택합니다.

  2. 쿼리 필드에 검색 조건을 입력하여 경고에 대한 로그 검색 쿼리를 만듭니다.

    AzureDiagnostics | where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobLogs" and (ResultType == "Failed" or ResultType == "Suspended")   
    

    다음을 사용하여 Runbook 이름별로 그룹화할 수도 있습니다.

    AzureDiagnostics | where ResourceProvider == "MICROSOFT.AUTOMATION" and     Category == "JobLogs" and (ResultType == "Failed" or ResultType == "Suspended") | summarize AggregatedValue = count() by RunbookName_s 
    
  3. 경고 규칙 만들기 화면을 열려면 페이지 위쪽에서 +새 경고 규칙을 클릭합니다. 경고 구성 옵션에 자세한 내용은 Azure의 로그 경고를 참조하세요.

Azure Automation 진단 감사 로그

이제 감사 로그를 Azure Monitor 작업 영역으로 보낼 수도 있습니다. 이를 통해 기업은 보안 및 준수를 위해 주요 자동화 계정 활동을 모니터링할 수 있습니다. Azure Diagnostics 설정을 통해 사용하도록 설정하면 Automation Runbook, 작업 및 자동화 자산(예: 연결, 자격 증명, 변수 및 인증서)에 대한 만들기, 업데이트 및 삭제 작업과 관련된 원격 분석을 수집할 수 있습니다. 보안 모니터링 요구 사항의 일부로 감사 로그 조건에 대한 경고를 구성할 수도 있습니다.

활동 로그와 감사 로그 간의 차이점

활동 로그는 구독 수준의 이벤트에 대한 인사이트를 제공하는 Azure의 플랫폼 로그입니다. Automation 계정에 대한 활동 로그에는 자동화 리소스가 수정되거나 생성되거나 삭제되는 시기에 대한 정보가 포함됩니다. 그러나 리소스의 이름 또는 ID는 캡처하지 않습니다.

Automation 계정에 대한 감사 로그는 리소스에 대해 수행되는 작업 형식과 함께 자동화 변수, 자격 증명, 연결 등과 같은 리소스의 이름과 ID를 캡처하며, Azure Automation은 GDPR 준수와 일치하는 클라이언트 IP 데이터와 같은 일부 세부 정보를 스크러빙합니다.

활동 로그는 Azure 리소스에 대한 자세한 진단 및 감사 정보를 제공하는 플랫폼 로그이므로 클라이언트 IP와 같은 세부 정보를 표시합니다. ARM에서 발생하고 활동 로그 리소스 공급자에 푸시되는 활동에 대해 자동으로 생성됩니다. 활동 로그는 Azure 모니터링의 일부이므로 클라이언트 활동에 대한 인사이트를 제공하기 위해 일부 클라이언트 데이터를 표시합니다.  

감사 로그에 대한 샘플 쿼리

Automation 리소스 감사 로그를 보는 쿼리

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "AuditEvent" 

모든 변수 업데이트, 만들기 또는 삭제 작업을 모니터링하는 쿼리

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "AuditEvent" and targetResources_Resource_s == "Variable" 

만들기, 초안 또는 업데이트와 같은 Runbook 작업을 모니터링하는 쿼리

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "AuditEvent" and targetResources_Resource_s contains "Runbook" 

인증서 만들기, 업데이트 또는 삭제를 모니터링하는 쿼리

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "AuditEvent" and targetResources_Resource_s contains "Certificate" 

자격 증명 만들기, 업데이트 또는 삭제를 모니터링하는 쿼리

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "AuditEvent" and targetResources_Resource_s contains "Credential" 

JSON 개체로 변환된 작업 상태 출력 필터링

최근 Automation 로그 데이터를 Log Analytics 서비스의 AzureDiagnostics 테이블에 쓰는 방법의 동작을 변경했습니다. 이 동작은 JSON 속성을 더 이상 별도의 필드로 분할하지 않습니다. JSON 형식의 출력 스트림에 있는 개체를 별도의 열로 서식 지정하도록 Runbook을 구성한 경우, 해당 속성에 액세스하기 위해 해당 필드를 JSON 개체로 구문 분석하도록 쿼리를 다시 구성해야 합니다. 이를 위해 parsejson을 사용하여 알려진 경로의 특정 JSON 요소에 액세스합니다.

예를 들어 Runbook은 여러 필드를 사용하여 JSON 형식의 출력 스트림에 Resultdescription 속성의 형식을 지정합니다. 상태라는 필드에 지정된 대로 실패한 상태의 작업 상태를 검색하려면 다음 예제 쿼리를 사용하여 상태가 실패ResultDescription을 검색합니다.

AzureDiagnostics
| where Category == 'JobStreams'
| extend jsonResourceDescription = parse_json(ResultDescription)
| where jsonResourceDescription.Status == 'Failed'

Log Analytics 기록 작업 스트림 JSON 형식

다음 단계