자습서: Resource Manager 템플릿을 사용하여 Azure Monitor에 작업 영역 데이터 수집 규칙의 변환 추가

이 자습서에서는 Resource Manager 템플릿을 사용하여 작업 영역 데이터 수집 규칙의 변환 샘플의 구성을 안내합니다. Azure Monitor의 변환을 사용하면 들어오는 데이터를 대상으로 보내기 전에 필터링하거나 수정할 수 있습니다. 작업 영역 변환은 아직 Azure Monitor 데이터 수집 파이프라인을 사용하지 않는 워크플로에 대한 수집 시간 변환을 지원합니다.

작업 영역 변환은 작업 영역 DCR이라고 하는 작업 영역에 대한 단일 DCR(데이터 수집 규칙)에 함께 저장됩니다. 각 변환은 특정 테이블과 연결됩니다. 변환은 DCR을 사용하지 않는 워크플로에서 이 테이블로 전송된 모든 데이터에 적용됩니다.

참고 항목

이 자습서에서는 Resource Manager 템플릿과 REST API를 사용하여 작업 영역 변환을 구성합니다. Azure Portal을 사용하는 동일한 자습서는 자습서: Azure Portal을 사용하여 Azure Monitor에 작업 영역 데이터 수집 규칙의 변환 추가를 참조하세요.

이 자습서에서는 다음을 알아봅니다.

  • Log Analytics 작업 영역의 테이블에 대해 작업 영역 변환을 구성합니다.
  • 수집 시간 변환에 대한 로그 쿼리를 작성합니다.

참고 항목

이 자습서에서는 Azure Cloud Shell의 PowerShell을 사용하여 Azure Monitor Tables API와 Azure Portal을 사용하여 REST API를 호출하여 Resource Manager 템플릿을 설치합니다. 다른 방법을 사용하여 이러한 호출을 수행할 수 있습니다.

사전 요구 사항

이 자습서를 완료하려면 다음이 필요합니다.

자습서 개요

이 자습서에서는 특정 레코드를 필터링하여 LAQueryLogs 테이블에 대한 스토리지 요구 사항을 줄입니다. 또한 열 데이터를 구문 분석하는 동안 열의 내용을 제거하여 사용자 지정 열에 데이터 조각을 저장합니다. LAQueryLogs 테이블은 작업 영역에서 로그 쿼리 감사를 사용하도록 설정하면 만들어지지만 이는 자습서의 샘플로만 사용됩니다. 이와 동일한 기본 프로세스를 사용하여 Log Analytics 작업 영역에서 모든 지원되는 테이블에 대한 변환을 만들 수 있습니다.

쿼리 감사 로그 사용

작업할 LAQueryLogs 테이블을 만들려면 작업 영역에 대해 쿼리 감사를 사용하도록 설정해야 합니다. 모든 수집 시간 변환에 필요한 것은 아닙니다. 이 샘플 변환에서 사용할 샘플 데이터를 생성하기 위한 것입니다.

  1. Azure Portal의 Log Analytics 작업 영역 메뉴에서 진단 설정을 선택한 다음 진단 설정 추가를 선택합니다.

    진단 설정의 스크린샷

  2. 진단 설정의 이름을 입력하고 감사 데이터가 동일한 작업 영역에 저장되도록 작업 영역을 선택합니다. 감사 범주를 선택한 다음 저장을 클릭하여 진단 설정을 저장하고 진단 설정 페이지를 닫습니다.

    새 진단 설정의 스크린샷

  3. 로그를 선택한 다음 일부 쿼리를 실행하여 일부 데이터로 LAQueryLogs를 채웁니다. 이러한 쿼리는 실제로 데이터를 반환할 필요가 없습니다.

    샘플 로그 쿼리의 스크린샷

테이블 스키마 업데이트

변환을 만들기 전에 테이블에 대해 다음 두 가지를 변경해야 합니다.

  • 작업 영역 변환을 위해 테이블을 사용하도록 설정해야 합니다. 이는 변환이 테이블의 스키마를 수정하지 않더라도 변환이 있을 모든 테이블에 필요합니다.
  • 변환으로 채워진 추가 열은 테이블에 추가해야 합니다.

Tables - Update API를 사용하여 아래 PowerShell 코드로 테이블을 구성합니다. API를 호출하면 사용자 지정 열이 정의되었는지 여부에 관계없이 작업 영역 변환을 위한 테이블이 사용하도록 설정됩니다. 이 샘플에는 변환 쿼리로 채워질 Resources_CF라는 사용자 지정 열이 포함되어 있습니다.

Important

기본 제공 테이블에 추가된 모든 사용자 지정 열은 _CF로 끝나야 합니다. 사용자 지정 표(이름이 _CL로 끝나는 테이블)에 추가된 열에는 이 접미사가 필요하지 않습니다.

  1. Azure Portal에서 Cloud Shell 단추를 클릭하고 환경이 PowerShell로 설정되어 있는지 확인합니다.

    열기 스크린샷.

  2. 다음 PowerShell 코드를 복사하고 Path 매개 변수를 작업 영역에 대한 세부 정보로 바꿉니다.

    $tableParams = @'
    {
        "properties": {
            "schema": {
                "name": "LAQueryLogs",
                "columns": [
                    {
                        "name": "Resources_CF",
                        "description": "The list of resources, this query ran against",
                        "type": "string",
                        "isDefaultDisplay": true,
                        "isHidden": false
                    }
                ]
            }
        }
    }
    '@
    
    Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/LAQueryLogs?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
    
  3. 코드를 Cloud Shell 프롬프트에 붙여넣어 실행합니다.

    Cloud Shell의 스크립트 스크린샷.

  4. Azure Portal의 Log Analytics 작업 영역 메뉴로 이동하여 열이 추가되었는지 확인할 수 있습니다. 로그를 선택하여 Log Analytics를 연 다음 LAQueryLogs 테이블을 확장하여 해당 열을 봅니다.

    새 열이 있는 Log Analytics의 스크린샷

변환 쿼리 정의

Log Analytics를 사용하여 데이터 컬렉션 규칙에 추가하기 전에 변환 쿼리를 테스트합니다.

  1. Azure Portal의 Log Analytics 작업 영역 메뉴에서 작업 영역을 열고 로그를 선택하여 Log Analytics를 엽니다.

  2. 다음 쿼리를 실행하여 LAQueryLogs 테이블의 내용을 봅니다. RequestContext 열의 내용을 확인합니다. 변환은 이 열에서 작업 영역 이름을 검색하고 그 안에 있는 나머지 데이터를 제거합니다.

    LAQueryLogs
    | take 10
    

    Log Analytics의 초기 쿼리 스크린샷

  3. 쿼리를 다음과 같이 수정합니다.

    LAQueryLogs
    | where QueryText !contains 'LAQueryLogs'
    | extend Context = parse_json(RequestContext)
    | extend Workspace_CF = tostring(Context['workspaces'][0])
    | project-away RequestContext, Context
    

    이렇게 하면 다음이 변경됩니다.

    • 이러한 로그 항목은 유용하지 않으므로 공간을 절약하기 위해 LAQueryLogs 테이블 자체 쿼리와 관련된 행을 삭제합니다.
    • 쿼리된 작업 영역의 이름에 대한 열을 추가합니다.
    • 공간을 절약하려면 RequestContext 열에서 데이터를 제거합니다.

    Log Analytics에서 수정된 쿼리의 스크린샷

  4. 변환에 사용하려면 쿼리를 다음과 같이 변경합니다.

    • 이 쿼리의 데이터 원본으로 테이블 이름(이 경우 LAQueryLogs)을 지정하는 대신 source 키워드를 사용합니다. 이는 변환 쿼리에서 항상 들어오는 데이터를 나타내는 가상 테이블입니다.
    • 변환 쿼리에서 지원하지 않는 모든 연산자를 제거합니다. 지원되는 연산자의 세부 정보 목록은 지원되는 KQL 기능을 참조하세요.
    • DCR JSON에 맞도록 쿼리를 한 줄로 병합합니다.

    다음은 이러한 수정 후 변환에서 사용할 쿼리입니다.

    source | where QueryText !contains 'LAQueryLogs' | extend Context = parse_json(RequestContext) | extend Resources_CF = tostring(Context['workspaces']) |extend RequestContext = ''
    

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

작업 영역의 첫 번째 변환이므로 작업 영역 변환 DCR을 만들어야 합니다. 동일한 작업 영역의 다른 테이블에 대한 작업 영역 변환을 만드는 경우 이 변환을 동일한 DCR에 저장해야 합니다.

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

    사용자 지정 템플을 배포하기 위한 스크린샷.

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

    편집기에서 템플릿을 빌드하기 위한 스크린샷

  3. 아래 Resource Manager 템플릿을 편집기에 붙여넣고 저장을 클릭합니다. 이 템플릿은 DCR을 정의하고 변환 쿼리를 포함합니다. 이 템플릿은 해당 매개 변수에 대한 값을 수집하므로 수정할 필요가 없습니다.

    Resource Manager 템플릿을 배포하기 위한 스크린샷.

    {
        "$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."
                }
            },
            "location": {
                "type": "string",
                "defaultValue": "westus2",
                "allowedValues": [
                    "westus2",
                    "eastus2",
                    "eastus2euap"
                ],
                "metadata": {
                    "description": "Specifies the location in which to create the Data Collection Rule."
                }
            },
            "workspaceResourceId": {
                "type": "string",
                "metadata": {
                    "description": "Specifies the Azure resource ID of the Log Analytics workspace to use."
                }
            }
        },
        "resources": [
            {
                "type": "Microsoft.Insights/dataCollectionRules",
                "name": "[parameters('dataCollectionRuleName')]",
                "location": "[parameters('location')]",
                "apiVersion": "2021-09-01-preview",
                "kind": "WorkspaceTransforms",
                "properties": {
                    "destinations": {
                        "logAnalytics": [
                            {
                                "workspaceResourceId": "[parameters('workspaceResourceId')]",
                                "name": "clv2ws1"
                            }
                        ]
                    },
                    "dataFlows": [
                        {
                            "streams": [
                                "Microsoft-Table-LAQueryLogs"
                            ],
                            "destinations": [
                                "clv2ws1"
                            ],
                            "transformKql": "source |where QueryText !contains 'LAQueryLogs' | extend Context = parse_json(RequestContext) | extend Resources_CF = tostring(Context['workspaces']) |extend RequestContext = ''"
                        }
                    ]
                }
            }
        ],
        "outputs": {
            "dataCollectionRuleId": {
                "type": "string",
                "value": "[resourceId('Microsoft.Insights/dataCollectionRules', parameters('dataCollectionRuleName'))]"
            }
        }
    }
    
  4. 사용자 지정 배포 화면에서 구독리소스 그룹을 지정하여 데이터 컬렉션 규칙을 저장한 다음 템플릿에 정의된 값을 제공합니다. 여기에는 데이터 컬렉션 규칙의 이름과 이전 단계에서 컬렉션한 작업 영역 리소스 ID가 포함됩니다. 위치는 작업 영역과 동일한 위치여야 합니다. 지역은 이미 채워져 있으며 데이터 컬렉션 규칙의 위치에 사용됩니다.

    사용자 지정 배포 값 편집 스크린샷

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

  6. 배포가 완료되면 배포 세부 정보 상자를 확장하고 데이터 컬렉션 규칙을 클릭하여 세부 정보를 봅니다. JSON 보기를 클릭합니다.

    데이터 수집 규칙 세부 정보 스크린샷

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

    데이터 수집 규칙 JSON 보기의 스크린샷

변환을 사용하도록 설정하는 마지막 단계는 DCR을 작업 영역에 연결하는 것입니다.

Important

작업 영역은 단일 DCR에만 연결할 수 있으며 연결된 DCR에는 이 작업 영역이 대상으로 포함되어야 합니다.

작업 영역 - 업데이트 API를 사용하여 아래 PowerShell 코드로 테이블을 구성합니다.

  1. Cloud Shell 단추를 클릭하여 Cloud Shell을 다시 엽니다. 다음 PowerShell 코드를 복사하고 매개 변수를 작업 영역 및 DCR에 대한 값으로 바꿉니다.

    $defaultDcrParams = @'
    {
        "properties": {
            "defaultDataCollectionRuleResourceId": "/subscriptions/{subscription}/resourceGroups/{resourcegroup}/providers/Microsoft.Insights/dataCollectionRules/{DCR}"
        }
    }
    '@
    
    Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}?api-version=2021-12-01-preview" -Method PATCH -payload $defaultDcrParams
    
  2. 코드를 Cloud Shell 프롬프트에 붙여넣어 실행합니다.

    작업 영역을 DCR에 연결하는 스크립트의 스크린샷

테스트 변환

변환이 적용되는 데 약 30분이 소요됩니다. 그런 다음 테이블에 대해 쿼리를 실행하여 테스트할 수 있습니다. 변환이 적용된 후 테이블로 전송된 데이터만 영향을 받습니다.

이 자습서에서는 몇 가지 샘플 쿼리를 실행하여 데이터를 LAQueryLogs 테이블로 보냅니다. 변환이 이러한 레코드를 필터링하는지 확인할 수 있도록 LAQueryLogs에 대한 일부 쿼리를 포함합니다. 출력에 새 Workspace_CF 열이 있고 LAQueryLogs에 대한 레코드가 없습니다.

문제 해결

이 섹션에서는 나타날 수 있는 다양한 오류 조건과 이를 수정하는 방법에 대해 설명합니다.

Log Analytics의 IntelliSense가 테이블의 새 열을 인식하지 못함

IntelliSense를 구동하는 캐시는 업데이트하는 데 최대 24시간이 걸릴 수 있습니다.

동적 열의 변환이 작동하지 않음

현재 동적 열에 영향을 미치는 알려진 문제가 있습니다. 임시 해결 방법은 동적 열 데이터에 대해 작업을 수행하기 전에 parse_json()을 사용하여 동적 열 데이터를 명시적으로 구문 분석하는 것입니다.

다음 단계