자습서: Azure Event Hubs의 이벤트를 Azure Monitor 로그로 수집(공개 미리 보기)

Azure Event Hubs는 Azure 및 외부 서비스에서 수집할 여러 원본의 이벤트를 수집하는 빅 데이터 스트리밍 플랫폼입니다. 이 문서에서는 이벤트 허브에서 Log Analytics 작업 영역으로 직접 데이터를 수집하는 방법을 설명합니다.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • Log Analytics 작업 영역에서 이벤트 허브 데이터에 대한 대상 테이블 만들기
  • 데이터 수집 엔드포인트 만들기
  • 데이터 수집 규칙을 만듭니다.
  • 이벤트 허브에 데이터 수집 규칙 권한 부여
  • 데이터 수집 규칙을 이벤트 허브와 연결

필수 조건

Azure Event Hubs에서 Azure Monitor 로그로 이벤트를 보내려면 모두 동일한 지역에 있는 다음 리소스가 필요합니다.

지원되는 지역

Azure Monitor는 현재 다음 지역의 Event Hubs에서 수집을 지원합니다.

아메리카 유럽 중동 아프리카 아시아 태평양
브라질 남부 프랑스 중부 아랍에미리트 북부 남아프리카 공화국 북부 오스트레일리아 중부
브라질 남동부 북유럽 오스트레일리아 동부
캐나다 중부 노르웨이 동부 오스트레일리아 남동부
캐나다 동부 스위스 북부 인도 중부
미국 동부 스위스 서부 동아시아
미국 동부 2 영국 남부 일본 동부
미국 중남부 영국 서부 Jio 인도 서부
미국 서부 서유럽 한국 중부
미국 서부 3 동남아시아

필요한 정보 수집

후속 단계에서 구독 ID, 리소스 그룹 이름, 작업 영역 이름, 작업 영역 리소스 ID 및 이벤트 허브 인스턴스 리소스 ID가 필요합니다.

  1. Log Analytics 작업 영역 메뉴에서 작업 영역으로 이동하여 속성을 선택하고 구독 ID, 리소스 그룹작업 영역 이름을 복사합니다. 이 자습서에서 리소스를 만들려면 이러한 세부 정보가 필요합니다.

    Screenshot showing Log Analytics workspace overview screen with subscription ID, resource group name, and workspace name highlighted.

  2. JSON을 선택하여 리소스 JSON 화면을 열고 작업 영역의 리소스 ID를 복사합니다. 데이터 수집 규칙을 만들려면 작업 영역 리소스 ID가 필요합니다.

    Screenshot showing the Resource JSON screen with the workspace resource ID highlighted.

  3. 이벤트 허브 인스턴스로 이동하고, JSON을 선택하여 Resource JSON 화면을 열고, 이벤트 허브 인스턴스의 리소스 ID를 복사합니다. 데이터 수집 규칙을 이벤트 허브와 연결하려면 이벤트 허브 인스턴스의 리소스 ID가 필요합니다.

    Screenshot showing the Resource JSON screen with the event hub resource ID highlighted.

Log Analytics 작업 영역에서 대상 테이블 만들기

데이터를 수집하려면 먼저 대상 테이블을 설정해야 합니다. 사용자 지정 테이블 및 지원되는 Azure 테이블로 데이터를 수집할 수 있습니다.

Azure Portal에서 이벤트를 수집할 사용자 지정 테이블을 만들려면 다음을 수행합니다.

  1. Cloud Shell 단추를 선택하고 환경이 PowerShell로 설정되어 있는지 확인합니다.

    Screenshot showing how to open Cloud Shell.

  2. 이 PowerShell 명령을 실행하여 테이블을 만들고 JSON에 테이블 이름(<table_name>)을 제공하고(사용자 지정 테이블의 경우 접미사 _CL도 포함) Invoke-AzRestMethod -Path 명령에서 <subscription_id>, <resource_group_name>, <workspace_name><table_name> 값을 설정합니다.

    $tableParams = @'
    {
        "properties": {
            "schema": {
                "name": "<table_name>",
                "columns": [
                    {
                        "name": "TimeGenerated",
                        "type": "datetime",
                        "description": "The time at which the data was ingested."
                    },
                    {
                        "name": "RawData",
                        "type": "string",
                        "description": "Body of the event."
                    },
                    {
                        "name": "Properties",
                        "type": "dynamic",
                        "description": "Additional message properties."
                    }
                ]
            }
        }
    }
    '@
    
    Invoke-AzRestMethod -Path "/subscriptions/<subscription_id>/resourcegroups/<resource_group_name>/providers/microsoft.operationalinsights/workspaces/<workspace_name>/tables/<table_name>?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
    

Important

  • 열 이름은 문자로 시작해야 하며 최대 45자의 영숫자와 밑줄(_)로 구성될 수 있습니다.
  • _ResourceId, id, _ResourceId, _SubscriptionId, TenantId, Type, UniqueIdTitle은 예약된 열 이름입니다.
  • 열 이름은 대/소문자를 구분합니다. 데이터 수집 규칙에 올바른 사례를 사용해야 합니다.

데이터 수집 엔드포인트 만들기

데이터 수집 규칙을 사용하여 데이터를 수집하려면 데이터 수집 엔드포인트가 필요합니다.

  1. 데이터 수집 엔드포인트를 만듭니다.

    Important

    Log Analytics 작업 영역과 동일한 지역에서 데이터 수집 엔드포인트를 만듭니다.

  2. 데이터 수집 엔드포인트의 개요 화면에서 JSON 보기를 선택합니다.

    Screenshot that shows the data collection endpoint Overview screen.

  3. 데이터 컬렉션 규칙의 리소스 ID를 복사합니다. 다음 단계에서 이 정보를 사용합니다.

    Screenshot that shows the data collection endpoint JSON view.

데이터 수집 규칙을 만듭니다.

Azure Monitor는 데이터 수집 규칙을 사용하여 수집할 데이터, 해당 데이터를 변환하는 방법 및 데이터를 보낼 위치를 정의합니다.

Azure Portal에서 데이터 수집 규칙을 만들려면 다음을 수행합니다.

  1. 포털의 검색 상자에 템플릿을 입력한 다음, 사용자 지정 템플릿 배포를 선택합니다.

    Screenshot to deploy custom template.

  2. 편집기에서 사용자 고유의 템플릿을 빌드합니다.를 선택합니다.

    Screenshot to build template in the editor.

  3. 아래 Resource Manager 템플릿을 편집기에 붙여넣은 다음, 저장을 선택합니다.

    Screenshot to edit Resource Manager template.

    아래 데이터 수집 규칙에서 다음 세부 정보를 확인합니다.

    • identity - 사용할 관리 ID의 유형을 정의합니다. 이 예제에서는 시스템 할당 ID를 사용합니다. 사용자 할당 관리 ID를 구성할 수도 있습니다.

    • dataCollectionEndpointId - 데이터 수집 엔드포인트의 리소스 ID입니다.

    • streamDeclarations - 이벤트 허브에서 수집할 데이터(들어오는 데이터)를 정의합니다. 스트림 선언은 수정할 수 없습니다.

      • TimeGenerated - 데이터가 이벤트 허브에서 Azure Monitor 로그로 수집된 시간입니다.
      • RawData - 이벤트의 본문입니다. 자세한 내용은 이벤트 읽기를 참조하세요.
      • Properties - 이벤트의 사용자 속성입니다. 자세한 내용은 이벤트 읽기를 참조하세요.
    • datasources - 이벤트 허브 소비자 그룹 및 데이터를 수집할 스트림을 지정합니다.

    • destinations - 데이터를 보낼 모든 대상을 지정합니다. 하나 이상의 Log Analytics 작업 영역에 데이터를 수집할 수 있습니다.

    • dataFlows - 스트림을 대상 작업 영역과 일치시키고 변환 쿼리 및 대상 테이블을 지정합니다. 이 예제에서는 이전에 만든 사용자 지정 테이블에 데이터를 수집합니다. 지원되는 Azure 테이블로 수집할 수도 있습니다.

    • transformKql - 작업 영역으로 전송되기 전에 들어오는 데이터(스트림 선언)에 적용할 변환을 지정합니다. 이 예제에서는 들어오는 데이터를 해당 스키마를 사용하여 특별히 만든 사용자 지정 테이블에 매핑하기 때문에 어떤 방식으로든 원본의 데이터를 수정하지 않는 transformKqlsource로 설정합니다. 다른 스키마가 있는 테이블에 데이터를 수집하거나 수집하기 전에 데이터를 필터링하는 경우 데이터 수집 변환을 정의합니다.

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "dataCollectionRuleName": {
                "type": "string",
                "metadata": {
                    "description": "Specifies the name of the data collection Rule to create."
                }
            },
            "workspaceResourceId": {
                "type": "string",
                "metadata": {
                    "description": "Specifies the Azure resource ID of the Log Analytics workspace to use."
                }
            },
            "endpointResourceId": {
                "type": "string",
                "metadata": {
                    "description": "Specifies the Azure resource ID of the data collection endpoint to use."
                }
            },
            "tableName": {
                "type": "string",
                "metadata": {
                    "description": "Specifies the name of the table in the workspace."
                }
            },
            "consumerGroup": {
                "type": "string",
                "metadata": {
                    "description": "Specifies the consumer group of event hub."
                },
                "defaultValue": "$Default"
            }
        },
        "resources": [
            {
                "type": "Microsoft.Insights/dataCollectionRules",
                "name": "[parameters('dataCollectionRuleName')]",
                "location": "[resourceGroup().location]", 
                "apiVersion": "2022-06-01",
                "identity": {
                                 "type": "systemAssigned"
                  },
                "properties": {
                    "dataCollectionEndpointId": "[parameters('endpointResourceId')]",
                    "streamDeclarations": {
                        "Custom-MyEventHubStream": {
                            "columns": [
                    {
                        "name": "TimeGenerated",
                        "type": "datetime"
                    },
                    {
                        "name": "RawData",
                        "type": "string"
                    },
                    {
                        "name": "Properties",
                        "type": "dynamic"
                    }
                ]
                        }
                    },
                    "dataSources": {
                        "dataImports": {
                             "eventHub": {
                                        "consumerGroup": "[parameters('consumerGroup')]",
                                        "stream": "Custom-MyEventHubStream",
                                        "name": "myEventHubDataSource1"
                                                              }
                                               }
                   },
                    "destinations": {
                        "logAnalytics": [
                            {
                                "workspaceResourceId": "[parameters('workspaceResourceId')]",
                                "name": "MyDestination"
                            }
                        ]
                    },
                    "dataFlows": [
                        {
                            "streams": [
                                "Custom-MyEventHubStream"
                            ],
                            "destinations": [
                                "MyDestination"
                            ],
                            "transformKql": "source",
                            "outputStream": "[concat('Custom-', parameters('tableName'))]"
                        }
                    ]
                }
            }
        ]
    }
    
  4. 사용자 지정 배포 화면에서 구독리소스 그룹을 지정하여 데이터 수집 규칙을 저장한 후, 다음을 포함하여 템플릿에 정의된 매개 변수에 대한 값을 제공합니다.

    • 지역 - 데이터 수집 규칙이 적용되는 지역입니다. 선택한 리소스 그룹에 따라 자동으로 채워집니다.
    • 데이터 수집 규칙 이름 - 규칙에 이름을 지정합니다.
    • 작업 영역 리소스 ID - 필요한 정보 수집을 참조하세요.
    • 엔드포인트 리소스 ID - 데이터 수집 엔드포인트를 만들 때 생성됩니다.
    • 테이블 이름 - 대상 테이블의 이름입니다. 이 예제에서는 사용자 지정 테이블을 사용할 때마다 테이블 이름이 접미사 _CL로 끝나야 합니다. Azure 테이블에 데이터를 수집하는 경우 접미사 없이 테이블 이름(예: Syslog)을 입력합니다.
    • 소비자 그룹 - 기본적으로 소비자 그룹은 $Default로 설정됩니다. 필요한 경우 값을 다른 이벤트 허브 소비자 그룹으로 변경합니다.

    Screenshot showing the Custom Template Deployment screen with the deployment values for the data collection rule set up in this tutorial.

  5. 세부 정보를 검토할 때 검토 + 만들기를 클릭한 다음 만들기를 선택합니다.

  6. 배포가 완료되면 배포 세부 정보 상자를 확장하고 세부 정보를 볼 데이터 수집 규칙을 선택합니다. JSON 보기를 선택합니다.

    Screenshot that shows the Data Collection Rule Overview screen.

  7. 데이터 컬렉션 규칙의 리소스 ID를 복사합니다. 다음 단계에서 이 정보를 사용합니다.

    Screenshot that shows the data collection rule JSON view.

사용자 할당 관리 ID 구성(선택 사항)

사용자 할당 ID를 지원하도록 데이터 수집 규칙을 구성하려면 위의 예제에서 다음을 대체합니다.

    "identity": {
                        "type": "systemAssigned"
        },

다음으로 바꿉니다.

    "identity": {
            "type": "userAssigned",
            "userAssignedIdentities": {
                "<identity_resource_Id>": {
                }
            }
        },

<identity_resource_Id> 값을 찾으려면 Azure Portal에서 사용자 할당 관리 ID 리소스로 이동하고 JSON을 선택하여 리소스 JSON 화면을 열고 관리 ID의 리소스 ID를 복사합니다.

Screenshot showing Resource JSON screen with the managed identity resource ID highlighted.

Azure 테이블로 로그 데이터 수집(선택 사항)

지원되는 Azure 테이블로 데이터를 수집하려면 다음을 수행합니다.

  1. 데이터 수집 규칙에서 outputStream을 변경합니다.

    보낸 사람: "outputStream": "[concat('Custom-', parameters('tableName'))]"

    수신자: "outputStream": "outputStream": "[concat(Microsoft-', parameters('tableName'))]"

  2. transformKql에서는 수집된 데이터를 대상 Azure 테이블의 대상 열로 보내는 변환을 정의합니다.

데이터 수집 규칙에 이벤트 허브 권한 부여

관리 ID를 사용하면 이벤트 허브 또는 Event Hubs 네임스페이스에 사용자가 만든 데이터 수집 규칙 및 데이터 수집 엔드포인트로 이벤트를 보낼 수 있는 권한을 부여할 수 있습니다. Event Hubs 네임스페이스에 권한을 부여하면 네임스페이스 내의 모든 이벤트 허브가 권한을 상속합니다.

  1. Azure Portal의 이벤트 허브 또는 Event Hubs 네임스페이스에서 Access Control(IAM)>역할 할당 추가를 선택합니다.

    Screenshot that shows the Access control screen for the data collection rule.

  2. Azure Event Hubs 데이터 수신기를 선택하고 다음을 선택합니다.

    Screenshot that shows the Add Role Assignment screen for the event hub with the Azure Event Hubs Data Receiver role highlighted.

  3. 액세스 권한 할당에 대해 관리 ID를 선택하고 멤버 선택을 클릭합니다. 데이터 수집 규칙을 선택하고 이름으로 데이터 수집 규칙을 검색한 다음 선택을 클릭합니다.

    Screenshot that shows how to assign access to managed identity.

  4. 검토 + 할당을 선택하고 역할 할당을 저장하기 전에 세부 정보를 확인합니다.

    Screenshot that shows the Review and Assign tab of the Add Role Assignment screen.

데이터 수집 규칙을 이벤트 허브와 연결

마지막 단계는 데이터 수집 규칙을 이벤트를 수집하려는 이벤트 허브에 연결하는 것입니다.

단일 데이터 수집 규칙을 동일한 소비자 그룹을 공유하고 동일한 스트림에 데이터를 수집하는 여러 이벤트 허브와 연결할 수 있습니다. 또는 고유한 데이터 수집 규칙을 각 이벤트 허브에 연결할 수 있습니다.

Important

이벤트 허브에서 데이터를 수집하려면 이벤트 허브에 하나 이상의 데이터 수집 규칙을 연결해야 합니다. 이벤트 허브와 관련된 모든 데이터 수집 규칙 연결을 삭제하면 이벤트 허브에서 데이터 수집이 중지됩니다.

Azure Portal에서 데이터 수집 규칙 연결을 만들려면 다음을 수행합니다.

  1. Azure Portal의 검색 상자에 템플릿을 입력한 다음 사용자 지정 템플릿 배포를 선택합니다.

  2. 편집기에서 사용자 고유의 템플릿을 빌드합니다.를 선택합니다.

  3. 아래 Resource Manager 템플릿을 편집기에 붙여넣은 다음, 저장을 선택합니다.

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "eventHubResourceID": {
          "type": "string",
          "metadata": {
            "description": "Specifies the Azure resource ID of the event hub to use."
          }
        },
        "associationName": {
          "type": "string",
          "metadata": {
            "description": "The name of the association."
          }
        },
        "dataCollectionRuleID": {
          "type": "string",
          "metadata": {
            "description": "The resource ID of the data collection rule."
          }
        }
      },
      "resources": [
        {
          "type": "Microsoft.Insights/dataCollectionRuleAssociations",
          "apiVersion": "2021-09-01-preview",
          "scope": "[parameters('eventHubResourceId')]",
          "name": "[parameters('associationName')]",
          "properties": {
            "description": "Association of data collection rule. Deleting this association will break the data collection for this event hub.",
            "dataCollectionRuleId": "[parameters('dataCollectionRuleId')]"
          }
        }
      ]
    }
    
  4. 사용자 지정 배포 화면에서 구독리소스 그룹을 지정하여 데이터 수집 규칙 연결을 저장한 후, 다음을 포함하여 템플릿에 정의된 매개 변수에 대한 값을 제공합니다.

    • 지역 - 선택한 리소스 그룹에 따라 자동으로 채워집니다.
    • 이벤트 허브 인스턴스 리소스 ID - 필요한 정보 수집을 참조하세요.
    • 연결 이름 - 연결에 이름을 지정합니다.
    • 데이터 수집 규칙 ID - 데이터 수집 규칙을 만들 때 생성됩니다.

    Screenshot showing the Custom Template Deployment screen with the deployment values for the data collection rule association set up in this tutorial.

  5. 세부 정보를 검토할 때 검토 + 만들기를 클릭한 다음 만들기를 선택합니다.

수집된 이벤트에 대한 대상 테이블 확인

이제 데이터 수집 규칙을 이벤트 허브와 연결했으므로 Azure Monitor 로그는 보존 기간이 만료되지 않은 모든 기존 이벤트와 모든 새 이벤트를 수집합니다.

수집된 이벤트에 대한 대상 테이블을 확인하려면 다음을 수행합니다.

  1. 작업 영역으로 이동하여 로그를 선택합니다.

  2. 쿼리 편집기에서 간단한 쿼리를 작성하고 실행을 선택합니다.

    <table_name>
    

    이벤트 허브의 이벤트가 표시됩니다.

Screenshot showing the results of a simple query on a custom table. The results consist of events ingested from an event hub.

리소스 정리

이 자습서에서는 다음 리소스를 만들었습니다.

  • 사용자 지정 테이블
  • 데이터 수집 엔드포인트
  • 데이터 수집 규칙
  • 데이터 수집 규칙 연결

이러한 리소스가 여전히 필요한지 평가합니다. 필요하지 않은 리소스를 개별적으로 삭제하거나 리소스 그룹을 삭제하여 이러한 리소스를 모두 한 번에 삭제합니다. 실행 중인 리소스를 그대로 두면 비용이 부과될 수 있습니다.

이벤트 허브에서 데이터 수집을 중지하려면 이벤트 허브와 관련된 모든 데이터 수집 규칙 연결을 삭제하거나 데이터 수집 규칙 자체를 삭제합니다. 이러한 작업은 이벤트 허브 검사점도 다시 설정합니다.

알려진 문제 및 제한 사항

  • Microsoft Entra 디렉터리 간에 구독을 전송하는 경우 데이터를 계속 수집하려면 Azure 리소스 관리 ID와 관련된 알려진 문제에 설명된 단계를 따라야 합니다.
  • Event Hubs에서 Azure Monitor 로그로 최대 64KB의 메시지를 수집할 수 있습니다.

다음 단계

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