Azure Monitor 활동 로그

Azure Monitor 활동 로그는 구독 수준 이벤트에 대한 정보를 제공하는 Azure의 플랫폼 로그입니다. 활동 로그에는 리소스가 수정되거나 가상 머신이 시작될 때와 같은 정보가 포함됩니다. Azure Portal에서 활동 로그를 보거나 PowerShell 및 Azure CLI를 사용하여 항목을 검색할 수 있습니다. 이 문서에서는 활동 로그를 보고 다른 대상으로 보내는 방법에 대한 정보를 제공합니다.

더 많은 기능을 사용하려면 다음과 같은 이유로 활동 로그를 이러한 위치 중 하나 이상으로 보내는 진단 설정을 만듭니다.

  • 더 복잡한 쿼리 및 경고를 위해 Azure Monitor 로그로 전송하고 최대 2년 동안 더 오래 보관할 수 있습니다.
  • Azure 외부로 전달하기 위해 Azure Event Hubs로 보냅니다.
  • 더 저렴하고 장기적인 보관을 위해 Azure Storage로 보냅니다.

진단 설정을 만드는 방법에 대한 자세한 내용은 플랫폼 로그 및 메트릭을 다른 대상으로 전송하는 진단 설정 만들기를 참조하세요.

참고

  • 활동 로그의 항목은 시스템이 생성되며 변경하거나 삭제할 수 없습니다.
  • 활동 로그의 항목은 가상 머신 다시 시작과 같은 컨트롤 플레인 변경 내용을 나타내며, 관련 없는 항목은 Azure 리소스 로그에 기록해야 합니다.

보존 기간

활동 로그 이벤트는 90일 동안 Azure에 보관된 후 삭제됩니다. 볼륨에 관계없이 이 시간 동안 항목에 대한 요금이 부과되지 않습니다. 더 긴 보존과 같은 더 많은 기능을 사용하려면 진단 설정을 만들고 필요에 따라 항목을 다른 위치로 라우팅합니다. 이전 섹션의 기준을 참조하세요.

활동 로그 보기

Azure Portal의 대부분의 메뉴에서 활동 로그에 액세스할 수 있습니다. 활동 로그를 여는 메뉴에서 해당 초기 필터가 결정됩니다. 모니터 메뉴에서 열면 구독에 대한 유일한 필터입니다. 리소스 메뉴에서 열면 필터가 해당 리소스로 설정됩니다. 언제든지 필터를 변경하여 다른 모든 항목을 볼 수 있습니다. 필터 추가를 선택하여 필터에 속성을 추가합니다.

작업 로그를 보여 주는 스크린샷.

활동 로그 범주에 대한 설명은 Azure 활동 로그 이벤트 스키마를 참조하세요.

활동 로그 다운로드

CSV로 다운로드를 선택하여 현재 보기에 이벤트를 다운로드합니다.

작업 로그 다운로드를 보여주는 스크린샷.

변경 기록 보기

일부 이벤트의 경우 해당 이벤트 시간에 발생한 변경 기록이 표시된 변경 기록을 볼 수 있습니다. 활동 로그에서 더 자세히 보려는 이벤트를 선택합니다. 변경 기록(미리 보기) 탭을 선택하여 해당 이벤트와 연관된 변경 사항을 봅니다.

이벤트에 대한 변경 기록 목록을 보여주는 스크린샷.

이벤트와 관련된 변경 내용이 있는 경우 선택할 수 있는 변경 내용 목록이 표시됩니다. 변경 내용을 선택하면 변경 내용(미리 보기) 페이지가 열립니다. 이 페이지는 리소스에 대한 변경 내용을 표시합니다. 다음 예에서는 VM의 크기가 변경된 것을 볼 수 있습니다. 페이지에는 변경 전과 변경 후의 VM 크기가 표시됩니다. 변경 기록에 대한 자세한 내용은 리소스 변경 가져오기를 참조하세요.

차이점을 표시하는 변경 기록 페이지를 보여주는 스크린샷.

활동 로그 이벤트를 검색하는 다른 방법

다음 방법을 사용하여 활동 로그 이벤트에 액세스할 수도 있습니다.

Log Analytics 작업 영역으로 보내기

활동 로그를 Log Analytics 작업 영역으로 보내 Azure Monitor 로그 기능을 사용하도록 설정하려면 다음을 수행합니다.

  • Azure Monitor에서 수집한 다른 모니터링 데이터와 활동 로그 데이터의 상관 관계를 지정합니다.
  • 여러 Azure 구독 및 테넌트의 로그 항목을 분석을 위해 한곳에 취합합니다.
  • 로그 쿼리를 사용하여 복잡한 분석을 수행하고 활동 로그 항목에 대한 심층적인 인사이트를 확보합니다.
  • 더 복잡한 경고 논리를 위해 작업 항목과 함께 로그 경고를 사용합니다.
  • 활동 로그 보존 기간보다 더 오래 활동 로그 항목을 저장합니다.
  • Log Analytics 작업 영역에 저장된 활동 로그 데이터에 대한 데이터 수집 또는 보존 요금이 부과되지 않습니다.
  • Log Analytics의 기본 보존 기간은 90일입니다.

활동 로그 내보내기를 선택하여 활동 로그를 Log Analytics 작업 영역으로 보냅니다.

활동 로그 내보내기를 보여 주는 스크린샷.

단일 구독에서 최대 5개의 작업 영역으로 활동 로그를 보낼 수 있습니다.

Log Analytics 작업 영역의 활동 로그 데이터는 Log Analytics에서 로그 쿼리를 사용하여 검색할 수 있는 AzureActivity라는 테이블에 저장됩니다. 이 테이블의 구조는 로그 항목의 범주에 따라 달라집니다. 테이블 속성에 대한 설명은 Azure Monitor 데이터 참조를 참조하세요.

예를 들어 각 범주에 대한 활동 로그 레코드 수를 보려면 다음 쿼리를 사용합니다.

AzureActivity
| summarize count() by CategoryValue

관리 범주에 있는 모든 레코드를 검색하려면 다음 쿼리를 사용합니다.

AzureActivity
| where CategoryValue == "Administrative"

Azure Event Hubs로 전송

타사 SIEM 또는 다른 로그 분석 솔루션과 같은 Azure 외부의 항목을 보내려면 활동 로그를 Azure Event Hubs로 보냅니다. 이벤트 허브의 활동 로그 이벤트는 각 페이로드의 레코드가 포함된 records 요소와 함께 JSON 형식으로 사용됩니다. 스키마는 범주에 따라 다르며 Azure 활동 로그 이벤트 스키마에 설명되어 있습니다.

다음 샘플 출력 데이터는 활동 로그에 대한 이벤트 허브에서 가져온 것입니다.

{
    "records": [
        {
            "time": "2019-01-21T22:14:26.9792776Z",
            "resourceId": "/subscriptions/s1/resourceGroups/MSSupportGroup/providers/microsoft.support/supporttickets/115012112305841",
            "operationName": "microsoft.support/supporttickets/write",
            "category": "Write",
            "resultType": "Success",
            "resultSignature": "Succeeded.Created",
            "durationMs": 2826,
            "callerIpAddress": "111.111.111.11",
            "correlationId": "c776f9f4-36e5-4e0e-809b-c9b3c3fb62a8",
            "identity": {
                "authorization": {
                    "scope": "/subscriptions/s1/resourceGroups/MSSupportGroup/providers/microsoft.support/supporttickets/115012112305841",
                    "action": "microsoft.support/supporttickets/write",
                    "evidence": {
                        "role": "Subscription Admin"
                    }
                },
                "claims": {
                    "aud": "https://management.core.windows.net/",
                    "iss": "https://sts.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47/",
                    "iat": "1421876371",
                    "nbf": "1421876371",
                    "exp": "1421880271",
                    "ver": "1.0",
                    "http://schemas.microsoft.com/identity/claims/tenantid": "00000000-0000-0000-0000-000000000000",
                    "http://schemas.microsoft.com/claims/authnmethodsreferences": "pwd",
                    "http://schemas.microsoft.com/identity/claims/objectidentifier": "2468adf0-8211-44e3-95xq-85137af64708",
                    "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn": "admin@contoso.com",
                    "puid": "20030000801A118C",
                    "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier": "9vckmEGF7zDKk1YzIY8k0t1_EAPaXoeHyPRn6f413zM",
                    "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname": "John",
                    "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname": "Smith",
                    "name": "John Smith",
                    "groups": "cacfe77c-e058-4712-83qw-f9b08849fd60,7f71d11d-4c41-4b23-99d2-d32ce7aa621c,31522864-0578-4ea0-9gdc-e66cc564d18c",
                    "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name": " admin@contoso.com",
                    "appid": "c44b4083-3bq0-49c1-b47d-974e53cbdf3c",
                    "appidacr": "2",
                    "http://schemas.microsoft.com/identity/claims/scope": "user_impersonation",
                    "http://schemas.microsoft.com/claims/authnclassreference": "1"
                }
            },
            "level": "Information",
            "location": "global",
            "properties": {
                "statusCode": "Created",
                "serviceRequestId": "50d5cddb-8ca0-47ad-9b80-6cde2207f97c"
            }
        }
    ]
}

Azure Storage에 보내기

감사, 정적 분석 또는 백업을 위해 90일을 초과하여 로그 데이터를 보존하려면 Azure Storage 계정으로 활동 로그를 보냅니다. 이벤트를 90일 이하로 보존해야 하는 경우 스토리지 계정에 대한 보존을 설정할 필요가 없습니다. 활동 로그 이벤트는 90일 동안 Azure 플랫폼에 보존됩니다.

활동 로그를 Azure로 보내면 이벤트가 발생하는 즉시 스토리지 계정에 스토리지 컨테이너가 만들어집니다. 컨테이너의 Blob은 다음과 같은 명명 규칙을 사용합니다.

insights-activity-logs/resourceId=/SUBSCRIPTIONS/{subscription ID}/y={four-digit numeric year}/m={two-digit numeric month}/d={two-digit numeric day}/h={two-digit 24-hour clock hour}/m=00/PT1H.json

예를 들어, 특정 Blob은 다음과 유사한 이름을 가질 수 있습니다.

insights-logs-networksecuritygrouprulecounter/resourceId=/SUBSCRIPTIONS/00000000-0000-0000-0000-000000000000/y=2020/m=06/d=08/h=18/m=00/PT1H.json

각 PT1H.json Blob에는 Blob URL에 지정된 시간 동안 수신된 로그 파일의 이벤트가 포함된 JSON 개체가 포함됩니다. 현재 시간 동안 이벤트는 생성된 시기에 관계없이 수신될 때 PT1H.json 파일에 추가됩니다. URL m=00 의 분 값은 항상 00 Blob이 시간 단위로 생성되므로 입니다.

각 이벤트는 다음 형식으로 PT1H.json 파일에 저장됩니다. 이 형식은 공통 최상위 스키마를 사용하지만 활동 로그 스키마에 설명된 대로 범주별로 고유합니다.

{ "time": "2020-06-12T13:07:46.766Z", "resourceId": "/SUBSCRIPTIONS/00000000-0000-0000-0000-000000000000/RESOURCEGROUPS/MY-RESOURCE-GROUP/PROVIDERS/MICROSOFT.COMPUTE/VIRTUALMACHINES/MV-VM-01", "correlationId": "0f0cb6b4-804b-4129-b893-70aeeb63997e", "operationName": "Microsoft.Resourcehealth/healthevent/Updated/action", "level": "Information", "resultType": "Updated", "category": "ResourceHealth", "properties": {"eventCategory":"ResourceHealth","eventProperties":{"title":"This virtual machine is starting as requested by an authorized user or process. It will be online shortly.","details":"VirtualMachineStartInitiatedByControlPlane","currentHealthStatus":"Unknown","previousHealthStatus":"Unknown","type":"Downtime","cause":"UserInitiated"}}}

레거시 수집 방법

레거시 수집 방법을 사용하여 활동 로그를 수집하는 경우 다음과 같이 활동 로그를 Log Analytics 작업 영역으로 내보내고데이터 원본 - 삭제 API를 사용하여 레거시 수집을 사용하지 않도록 설정하는 것이 좋습니다.

  1. 데이터 원본 - 작업 영역별 나열 API를 사용하여 작업 영역에 연결된 모든 데이터 원본을 나열하고, filter=kind='AzureActivityLog'를 설정하여 활동 로그를 필터링합니다.

    데이터 원본 - 작업 영역별 나열 API의 구성을 보여 주는 스크린샷

  2. API 응답에서 사용하지 않도록 설정하려는 연결의 이름을 복사합니다.

    데이터 원본 - 작업 영역별 나열 API의 출력에서 ​​복사해야 하는 연결 정보를 보여 주는 스크린샷

  3. 데이터 원본 - 삭제 API를 사용하여 특정 리소스에 대한 활동 로그 수집을 중지합니다.

    데이터 원본 - 삭제 API 구성의 스크린샷

레거시 로그 프로필 관리

로그 프로필은 활동 로그를 스토리지 또는 이벤트 허브로 보내는 레거시 방법입니다. 이 방법을 사용하는 경우 리소스 로그에 더 나은 기능 및 일관성을 제공하는 진단 설정으로 전환하는 것이 좋습니다.

로그 프로필이 이미 있는 경우 먼저 기존 로그 프로필을 제거한 다음 새 로그 프로필을 만들어야 합니다.

  1. Get-AzLogProfile를 사용하여 로그 프로필이 있는지 확인합니다. 로그 프로필이 있으면 Name 속성을 기록해 두세요.

  2. Remove-AzLogProfile을 사용하여 Name 속성의 값을 사용하여 로그 프로필을 제거합니다.

    # For example, if the log profile name is 'default'
    Remove-AzLogProfile -Name "default"
    
  3. Add-AzLogProfile를 사용하여 새 로그 프로필을 만듭니다.

    Add-AzLogProfile -Name my_log_profile -StorageAccountId /subscriptions/s1/resourceGroups/myrg1/providers/Microsoft.Storage/storageAccounts/my_storage -serviceBusRuleId /subscriptions/s1/resourceGroups/Default-ServiceBus-EastUS/providers/Microsoft.ServiceBus/namespaces/mytestSB/authorizationrules/RootManageSharedAccessKey -Location global,westus,eastus -RetentionInDays 90 -Category Write,Delete,Action
    
    속성 필수 설명
    이름 로그 프로필의 이름입니다.
    StorageAccountId 활동 로그를 저장할 스토리지 계정의 리소스 ID입니다.
    serviceBusRuleId 이벤트 허브를 만들 Service Bus 네임스페이스의 Service Bus 규칙 ID입니다. 이 문자열의 형식은 {service bus resource ID}/authorizationrules/{key name}입니다.
    위치 활동 로그 이벤트를 수집하려는 지역의 쉼표로 구분된 목록입니다.
    RetentionInDays 이벤트를 스토리지 계정에 보관해야 하는 일 수(1~365)입니다. 0 값은 로그를 무기한 저장합니다.
    범주 수집할 이벤트 범주의 쉼표로 구분된 목록입니다. 가능한 값은 쓰기, 삭제 및 작업입니다.

예제 스크립트

이 샘플 PowerShell 스크립트는 스토리지 계정과 이벤트 허브 모두에 활동 로그를 기록하는 로그 프로필을 만듭니다.

# Settings needed for the new log profile
$logProfileName = "default"
$locations = (Get-AzLocation).Location
$locations += "global"
$subscriptionId = "<your Azure subscription Id>"
$resourceGroupName = "<resource group name your Event Hub belongs to>"
$eventHubNamespace = "<Event Hub namespace>"

# Build the service bus rule Id from the settings above
$serviceBusRuleId = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.EventHub/namespaces/$eventHubNamespace/authorizationrules/RootManageSharedAccessKey"

# Build the Storage Account Id from the settings above
$storageAccountId = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Storage/storageAccounts/$storageAccountName"

Add-AzLogProfile -Name $logProfileName -Location $locations -StorageAccountId  $storageAccountId -ServiceBusRuleId $serviceBusRuleId

데이터 구조 변경

활동 로그 내보내기 환경은 AzureActivity 테이블의 구조를 일부 변경하여 활동 로그를 보내는 데 사용된 레거시 방법과 동일한 데이터를 보냅니다.

다음 표의 열은 업데이트된 스키마에서 더 이상 사용되지 않습니다. AzureActivity에 여전히 존재하지만 데이터가 없습니다. 이러한 열에 대한 대체는 새로운 것은 아니지만 사용되지 않는 열과 동일한 데이터를 포함합니다. 형식이 다르므로 이를 사용하는 로그 쿼리를 수정해야 할 수 있습니다.

활동 로그 JSON Log Analytics 열 이름
(이전 버전은 사용되지 않음)
새 Log Analytics 열 이름 참고
category 범주 CategoryValue
상태

값은 성공, 시작, 수락, 실패임
ActivityStatus

JSON과 동일한 값
ActivityStatusValue

값이 성공, 시작됨, 수락됨, 실패로 변경됨
유효한 값은 다음과 같이 변경됩니다.
subStatus ActivitySubstatus ActivitySubstatusValue
operationName OperationName OperationNameValue REST API는 작업 이름 값을 지역화합니다. Log Analytics UI는 항상 영어를 표시합니다.
resourceProviderName ResourceProvider ResourceProviderValue

중요

경우에 따라 이러한 열의 값이 모두 대문자일 수 있습니다. 이러한 열이 포함된 쿼리가 있는 경우 =~ 연산자를 사용하여 대/소문자를 구분하지 않고 비교합니다.

다음 열이 업데이트된 스키마의 AzureActivity에 추가되었습니다.

  • Authorization_d
  • Claims_d
  • Properties_d

다음 단계

다음에 대해 자세히 알아봅니다.