프로비전이 Azure Monitor 로그와 통합되는 방식 이해

프로비전은 Azure Monitor 로그 및 Log Analytics와 통합됩니다. Azure 모니터링을 사용하면 통합 문서(다른 이름: 대시보드) 만들기, 30일이 넘는 프로비전 로그 저장, 사용자 지정 쿼리 및 경고 만들기 등의 작업을 수행할 수 있습니다. 이 문서에서는 프로비전 로그가 Azure Monitor 로그와 통합되는 방법을 설명합니다. 프로비전 로그가 일반적으로 작동하는 방식에 대한 자세한 내용은 프로비전 로그를 참조하세요.

프로비전 로그를 사용하도록 설정

Azure 모니터링 및 Log Analytics에 대해 이미 익숙해야 합니다. 그렇지 않은 경우 해당 항목에 대해 알아본 다음, 다시 돌아와서 애플리케이션 프로비저닝 로그에 대해 자세히 알아보세요. Azure 모니터링에 대해 자세히 알아보려면 Azure Monitor 개요를 참조하세요. Azure Monitor 로그 및 Log Analytics에 대해 자세히 알아보려면 Azure Monitor의 로그 쿼리 개요를 참조하세요.

Azure 모니터링을 구성한 후에는 애플리케이션 프로비전에 대해 로그를 사용하도록 설정할 수 있습니다. 옵션은 진단 설정 페이지에 있습니다.

Access diagnostic settings

Enable application provisioning logs

참고 항목

작업 영역을 최근에 프로비전한 경우에는 로그를 보내기까지 시간이 걸릴 수 있습니다. 구독이 microsoft.insights를 사용하도록 등록되지 않았다는 오류가 표시되면 몇 분 후에 다시 확인하세요.

데이터 이해

프로비전에서 로그 뷰어에게 보내는 기본 데이터 스트림은 거의 동일합니다. Azure Monitor 로그는 Azure Portal UI 및 Azure API와 거의 동일한 스트림을 가져옵니다. 로그 필드에는 몇 가지 차이점만 있으며, 다음 표에 설명되어 있습니다. 이러한 필드에 대해 자세히 알아보려면 provisioningObjectSummary 나열을 참조하세요.

Azure Monitor 로그 Azure Portal UI Azure API
errorDescription reason resultDescription
상태 resultType resultType
activityDateTime TimeGenerated TimeGenerated

Azure Monitor 통합 문서

Azure Monitor 통합 문서는 데이터 분석을 위한 유연한 캔버스를 제공합니다. Azure Portal 내에서 풍부한 시각적 보고서를 만들 수도 있습니다. 자세한 내용은 Azure Monitor 통합 문서 개요를 참조하세요.

애플리케이션 프로비저닝은 미리 작성된 통합 문서 집합과 함께 제공됩니다. 이러한 문서는 통합 문서 페이지에서 찾을 수 있습니다. 데이터를 보려면 모든 필터(timeRange, jobID, appName)가 채워져 있어야 합니다. 또한 앱이 프로비저닝되었는지 확인합니다. 그렇지 않으면 로그에 데이터가 없습니다.

Application provisioning workbooks

Application provisioning dashboard

사용자 지정 쿼리

사용자 지정 쿼리를 만들고 Azure 대시보드에 데이터를 표시할 수 있습니다. 자세한 내용은 Log Analytics 데이터의 대시보드 만들기 및 공유를 참조하세요. 또한 Azure Monitor의 로그 쿼리 개요를 확인하세요.

다음은 애플리케이션 프로비전을 시작하는 몇 가지 샘플입니다.

원본 시스템에서 사용자의 ID를 기반으로 사용자에 대한 로그를 쿼리합니다.

AADProvisioningLogs
| extend SourceIdentity = parse_json(SourceIdentity)
| where tostring(SourceIdentity.Id) == "49a4974bb-5011-415d-b9b8-78caa7024f9a"

ErrorCode당 개수 요약:

AADProvisioningLogs
| summarize count() by ErrorCode = ResultSignature

작업별 일일 이벤트 수를 요약합니다.

AADProvisioningLogs
| where TimeGenerated > ago(7d)
| summarize count() by Action, bin(TimeGenerated, 1d)

이벤트 및 프로젝트 키 속성 100개를 가져옵니다.

AADProvisioningLogs
| extend SourceIdentity = parse_json(SourceIdentity)
| extend TargetIdentity = parse_json(TargetIdentity)
| extend ServicePrincipal = parse_json(ServicePrincipal)
| where tostring(SourceIdentity.identityType) == "Group"
| project tostring(ServicePrincipal.Id), tostring(ServicePrincipal.Name), ModifiedProperties, JobId, Id, CycleId, ChangeId, Action, SourceIdentity.identityType, SourceIdentity.details, TargetIdentity.identityType, TargetIdentity.details, ProvisioningSteps
| take 100

참조 해결 문제로 인해 건너뛴 멤버가 있는 그룹을 검색합니다.

AADProvisioningLogs
| where TimeGenerated >= ago(10d)
| where JobId == "Azure2Azure.73f0883f-d67d-4af1-ac8a-45367f8982e0.5ef3be57-f45f-451g-88c4-68a7fda680bb" // Customize by adding a specific app JobId
| extend SourceIdentity = parse_json(SourceIdentity)
| extend ProvisioningSteps = parse_json(ProvisioningSteps)
| where tostring(SourceIdentity.identityType) == "Group"
| where ProvisioningSteps matches regex "UnableToResolveReferenceAttributeValue"
| parse tostring(ProvisioningSteps.[2].description) with "We were unable to assign " userObjectId " as the members of " groupDisplayName "." *
| project groupDisplayName, userObjectId,  JobId
| take 100

애플리케이션별 작업을 요약합니다.

AADProvisioningLogs
| where TimeGenerated > ago(30d)
| where JobId == "Azure2Azure.73f0883f-d67d-4af1-ac8a-45367f8982e0.5ef3be57-f45f-451g-88c4-68a7fda680bb" // Customize by adding a specific app JobId
| extend ProvisioningSteps = parse_json(ProvisioningSteps)
| extend eventName = tostring(ProvisioningSteps.[-1].name)
| summarize count() by eventName, JobId
| order by JobId asc
| take 5

특정 작업의 급증을 식별합니다.

AADProvisioningLogs
| where TimeGenerated > ago(30d)
| where JobId == "scim.73f0883f-d67d-4af1-ac8a-45367f8982e0.5ef3be57-f45f-451g-88c4-68a7fda680bb" // Customize by adding a specific app JobId
| extend ProvisioningSteps = parse_json(ProvisioningSteps)
| extend eventName = tostring(ProvisioningSteps.[-1].name)
| summarize count() by eventName, bin(TimeGenerated, 1d)
| render timechart

사용자 지정 경고

Azure Monitor를 사용하면 프로비전과 관련된 주요 이벤트에 대한 알림을 받을 수 있도록 사용자 지정 경고를 구성할 수 있습니다. 예를 들어 오류 급증에 대한 경고를 받을 수 있습니다. 또는 비활성화 또는 삭제 급증에 대해서도 가능합니다. 경고를 받을 수 있는 또 다른 예는 프로비전 부족입니다. 이런 경우 뭔가 잘못되었음을 나타냅니다.

경고에 대한 자세한 내용은 Azure Monitor 로그 경고를 참조하세요.

오류가 급증하면 경고합니다. jobID를 애플리케이션의 jobID로 바꿉니다.

Alert when there's a spike in failures.

프로비전 서비스 실행을 중지시키는 문제가 있을 수 있습니다. 지정된 시간 간격 동안 프로비전 이벤트가 없는 경우를 감지하려면 다음 경고를 사용합니다.

There may be an issue that caused the provisioning service to stop running.

비활성화 또는 삭제가 급증하면 경고합니다.

Alert when there's a spike in disables or deletes.

커뮤니티 기여

애플리케이션 프로비전 쿼리 및 대시보드에 대한 오픈 소스 및 커뮤니티 기반 접근 방식을 사용하고 있습니다. 다른 사용자에게 유용하다고 생각되는 쿼리, 경고 또는 통합 문서를 작성한 후 AzureMonitorCommunity GitHub 리포지토리에 게시합니다. 링크가 포함된 이메일을 보내주세요. 쿼리와 대시보드를 검토하고 서비스에 게시하여 다른 사용자도 혜택을 받습니다. provisioningfeedback@microsoft.com로 마이그레이션하는 방법을 보여 줍니다.

다음 단계