자습서: DCR(데이터 수집 규칙) 편집

이 자습서에서는 명령줄 도구를 사용하여 이미 프로비저닝된 DCR(데이터 수집 규칙)의 정의를 편집하는 방법을 설명합니다.

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

  • 기존 포털 기능을 활용하여 DCR을 미리 만들기
  • ARM API 호출을 사용하여 데이터 수집 규칙의 내용 가져오기
  • ARM API 호출을 사용하여 데이터 수집 규칙에 변경 내용 적용
  • PowerShell 스크립트를 사용하여 DCR 업데이트 프로세스 자동화

참고 항목

이 자습서에서는 기존 DCR을 편집하기 위한 한 가지 방법을 안내합니다. 다른 방법은 Azure Monitor에서 DCR(데이터 수집 규칙) 만들기 및 편집을 참조하세요.

필수 조건

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

자습서 개요

포털에서 마법사를 진행하는 것이 Log Analytics에 대한 사용자 지정 데이터 수집을 설정하는 가장 간단한 방법이지만 경우에 따라 나중에 데이터 수집 규칙을 업데이트하여 다음을 수행할 수 있습니다.

  • 데이터 수집 설정 변경(예: DCR과 연결된 데이터 수집 엔드포인트)
  • 데이터 스트림에 대한 데이터 구문 분석 또는 필터링 논리 업데이트
  • 데이터 대상 변경(예: Azure 테이블에 데이터 보내기, 이 옵션은 DCR 기반 사용자 지정 로그 마법사의 일부로 직접 제공되지 않음)

이 자습서에서는 먼저 사용자 지정 로그 수집을 설정합니다. 그런 후 추가 필터링을 포함하고 변경 내용을 DCR에 적용하도록 사용자 지정 로그에 대한 KQL 변환을 수정합니다. 마지막으로 모든 편집 작업을 단일 PowerShell 스크립트로 결합하여 위에서 언급한 이유로 DCR을 편집하는 데 사용할 수 있습니다.

새 사용자 지정 로그 설정

새 사용자 지정 로그를 설정하여 시작합니다. 자습서: Azure Portal(미리 보기)을 사용하여 Azure Monitor 로그에 사용자 지정 로그 보내기를 따릅니다. 만들어진 DCR의 리소스 ID를 기록해 둡니다.

DCR 콘텐츠 검색

DCR을 업데이트하기 위해 해당 콘텐츠를 검색하여 추가로 편집할 수 있는 파일로 저장할 것입니다.

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

    Screenshot of opening cloud shell

  2. 다음 명령을 실행하여 DCR 콘텐츠를 검색하고 파일에 저장합니다. <ResourceId>를 DCR ResourceID로 바꾸고 <FilePath>를 DCR을 저장할 파일 이름으로 바꿉니다.

    $ResourceId = "<ResourceId>" # Resource ID of the DCR to edit
    $FilePath = "<FilePath>" # Store DCR content in this file
    $DCR = Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2022-06-01") -Method GET
    $DCR.Content | ConvertFrom-Json | ConvertTo-Json -Depth 20 | Out-File -FilePath $FilePath
    

DCR 편집

이제 DCR 콘텐츠가 JSON 파일로 저장되면 원하는 편집기를 사용하여 DCR을 변경할 수 있습니다. 사용 중인 경우 Cloud Shell 환경에서 파일을 다운로드하도록 할 수 있습니다.

또는 환경과 함께 제공된 코드 편집기를 사용할 수 있습니다. 예를 들어 Cloud Drive의 temp.dcr 파일에 DCR을 저장한 경우 다음 명령을 사용하여 Cloud Shell 창에서 바로 편집할 DCR을 열 수 있습니다.

code "temp.dcr"

DCR 내에서 KQL 변환을 수정하여 RequestType이 "GET"이 아닌 행을 삭제해 보겠습니다.

  1. 원하는 편집기를 사용하여 편집하기 위해 이전 부분에서 만든 파일을 엽니다.
  2. ”transformKql” 특성이 포함된 행을 찾습니다. 이 행은 사용자 지정 로그 만들기에 대한 자습서를 따른 경우 다음과 유사해야 합니다.
    "transformKql": "  source\n    | extend TimeGenerated = todatetime(Time)\n    | parse RawData with \n    ClientIP:string\n    ' ' *\n    ' ' *\n    ' [' * '] \"' RequestType:string\n    \" \" Resource:string\n    \" \" *\n    '\" ' ResponseCode:int\n    \" \" *\n    | where ResponseCode != 200\n    | project-away Time, RawData\n"
    
  3. RequestType별 추가 필터를 포함하도록 KQL 변환 수정
    "transformKql": "  source\n    | where RawData contains \"GET\"\n     | extend TimeGenerated = todatetime(Time)\n    | parse RawData with \n    ClientIP:string\n    ' ' *\n    ' ' *\n    ' [' * '] \"' RequestType:string\n    \" \" Resource:string\n    \" \" *\n    '\" ' ResponseCode:int\n    \" \" *\n    | where ResponseCode != 200\n    | project-away Time, RawData\n"
    
  4. 수정된 DCR 내용으로 파일을 저장합니다.

변경 내용 적용

마지막 단계는 시스템에서 DCR을 다시 업데이트하는 것입니다. 이는 업데이트된 DCR 콘텐츠가 HTTP 요청 본문에 전송되어 ARM API에 대한 "PUT" HTTP 호출에 의해 수행됩니다.

  1. Azure Cloud Shell을 사용하는 경우 파일을 저장하고 포함 편집기를 닫거나 편집된 DCR 파일을 Cloud Shell 환경에 다시 업로드합니다.
  2. 다음 명령을 실행하여 파일에서 DCR 콘텐츠를 로드하고 HTTP 호출을 실행하여 시스템에서 DCR을 업데이트합니다. <ResourceId>를 DCR ResourceID로 바꾸고 <FilePath>를 자습서의 이전 부분에서 수정한 파일 이름으로 바꿉니다. 동일한 PowerShell 세션 내에서 DCR을 읽고 쓰는 경우 처음 두 줄을 생략할 수 있습니다.
    $ResourceId = "<ResourceId>" # Resource ID of the DCR to edit
    $FilePath = "<FilePath>" # Store DCR content in this file
    $DCRContent = Get-Content $FilePath -Raw 
    Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2022-06-01") -Method PUT -Payload $DCRContent 
    
  3. 호출이 성공하면 DCR이 이제 업데이트되었음을 나타내는 상태 코드 "200"이 포함된 응답을 받아야 합니다.
  4. 이제 DCR로 이동하여 "JSON 보기" 함수를 통해 포털에서 해당 콘텐츠를 검사하거나 자습서의 첫 번째 부분을 반복하여 DCR 콘텐츠를 파일로 검색할 수 있습니다.

모두 통합

이제 DCR의 내용을 읽고 업데이트하는 방법을 알았으므로 두 작업을 함께 수행하는 데 사용할 수 있는 유틸리티 스크립트에 모든 것을 통합해 보겠습니다.

param ([Parameter(Mandatory=$true)] $ResourceId)

# get DCR content and put into a file
$FilePath = "temp.dcr"
$DCR = Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2022-06-01") -Method GET
$DCR.Content | ConvertFrom-Json | ConvertTo-Json -Depth 20 | Out-File $FilePath

# Open DCR in code editor
code $FilePath | Wait-Process

#Wait for confirmation to apply changes
$Output = Read-Host "Apply changes to DCR (Y/N)? "
if ("Y" -eq $Output.toupper())
{ 
	#write DCR content back from the file
	$DCRContent = Get-Content $FilePath -Raw
	Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2022-06-01") -Method PUT -Payload $DCRContent		
}

#Delete temporary file
Remove-Item $FilePath

이 유틸리티를 사용하는 방법

스크립트를 DCREditor.ps1이라는 파일로 저장하고 리소스 ID가 /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/foo/providers/Microsoft.Insights/dataCollectionRules/bar인 데이터 수집 규칙을 수정해야 한다고 가정하면 다음 명령을 실행하여 이를 수행할 수 있습니다.

.\DCREditor.ps1 "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/foo/providers/Microsoft.Insights/dataCollectionRules/bar"

DCR 콘텐츠가 포함된 코드 편집기에서 열립니다. 편집이 완료된 후 스크립트 프롬프트에 "Y"를 입력하면 변경 내용이 DCR에 다시 적용됩니다.

다음 단계