Azure Monitor 에이전트를 사용하여 텍스트 또는 JSON 파일에서 로그 수집

많은 애플리케이션이 Windows 이벤트 로그 또는 Syslog 같은 표준 로깅 서비스 대신 텍스트 또는 JSON 파일에 정보를 기록합니다. 이 문서에서는 DCR(데이터 수집 규칙)을 만들어 Azure Monitor 에이전트를 사용하여 모니터링되는 컴퓨터에서 텍스트 및 JSON 파일의 로그 데이터를 수집하는 방법을 설명합니다.

참고 항목

JSON 수집은 현재 미리 보기로 제공됩니다.

필수 조건

이 절차를 완료하려면 다음이 필요합니다.

  • 최소한 기여자 권한이 있는 Log Analytics 작업 영역입니다.

  • 가상 머신과 Log Analytics 작업 영역이 동일한 지역에 있는지 여부에 따라 하나 또는 두 개의 데이터 수집 엔드포인트가 있습니다.

    자세한 내용은 배포에 따라 데이터 수집 엔드포인트를 설정하는 방법을 참조하세요.

  • 작업 영역에서 데이터 컬렉션 규칙 개체를 만들 수 있는 권한입니다.

  • 적절한 수집을 위해서는 JSON 텍스트가 단일 행에 포함되어야 합니다. JSON 본문(파일) 형식은 지원되지 않습니다.

  • 텍스트 또는 JSON 파일에 로그를 쓰는 Windows 온-프레미스 클라이언트의 Virtual Machine, Virtual Machine Scale Set, Arc 지원 서버 온-프레미스 또는 Azure Monitoring Agent

    텍스트/JSON 파일 요구 사항 및 모범 사례:

    • Azure Monitor 에이전트가 실행 중인 컴퓨터의 로컬 드라이브와 모니터링 중인 디렉터리에 파일을 저장합니다.
    • 줄의 끝을 사용하여 레코드의 끝을 구분합니다.
    • ASCII 또는 UTF-8 인코딩을 사용합니다. UTF-16과 같은 다른 형식은 지원되지 않습니다.
    • 오래된 파일을 쉽게 제거할 수 있도록 매일 새 로그 파일을 만듭니다.
    • 모니터링되는 디렉터리의 모든 로그 파일을 정리합니다. 많은 로그 파일을 추적하면 에이전트 CPU 및 메모리 사용량이 증가할 수 있습니다. 모든 로그가 처리될 때까지 충분한 시간을 허용하기 위해 2일 이상 기다립니다.
    • 기존 파일을 새 데이터로 덮어쓰지 마세요. 파일 끝에 새 레코드만 추가해야 합니다. 덮어쓰면 데이터가 손실됩니다.
    • 파일 이름을 새 이름으로 바꾼 다음, 같은 이름으로 새 파일을 열지 마세요. 이로 인해 데이터가 손실될 수 있습니다.
    • 파일 검색 패턴과 일치하는 큰 로그 파일의 이름을 바꾸거나 모니터링되는 디렉터리에 복사하지 마세요. 필요한 경우 분당 50MB를 초과하지 마세요.
    • 파일 검색 패턴과 일치하는 파일의 이름을 해당 파일 검색 패턴과 일치하는 새 이름으로 바꾸지 마세요. 이로 인해 중복 데이터가 수집됩니다.

사용자 지정 테이블 만들기

스크립트에서 만든 테이블에는 다음 두 개의 열이 있습니다.

  • TimeGenerated(날짜/시간) [필수]
  • RawData(문자열) [테이블 스키마가 제공된 경우 선택 사항]
  • 'FilePath'(문자열) [선택 사항]
  • YourOptionalColumn(문자열) [선택 사항]

텍스트 파일에서 수집된 로그 데이터의 기본 테이블 스키마는 'TimeGenerated' 및 'RawData'입니다. 두 팀 모두에 'FilePath'를 추가하는 것은 선택 사항입니다. 최종 스키마를 알고 있거나 원본이 JSON 로그인 경우 테이블을 만들기 전에 스크립트에 최종 열을 추가할 수 있습니다. 나중에 언제든지 Log Analytics 테이블 UI를 사용하여 열을 추가할 수 있습니다.

테이블로 자동으로 구문 분석하려면 열 이름과 JSON 특성이 정확히 일치해야 합니다. 열과 JSON 특성은 모두 대/소문자를 구분합니다. 예를 들어, Rawdata는 이벤트 데이터를 수집하지 않습니다. RawData여야 합니다. 수집하면 해당 열이 없는 JSON 특성이 삭제됩니다.

REST 호출을 수행하는 가장 쉬운 방법은 Azure Cloud PowerShell CLI(명령줄)를 사용하는 것입니다. 셸을 열려면 Azure Portal로 이동하여 Cloud Shell 단추를 누르고 PowerShell을 선택합니다. Azure Cloud PowerShell을 처음 사용하는 경우 일회용 구성 마법사를 진행해야 합니다.

이 스크립트를 복사하여 PowerShell에 붙여넣어 작업 영역에 테이블을 만듭니다.

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
        {
                                "name": "TimeGenerated",
                                "type": "DateTime"
                        }, 
                       {
                                "name": "RawData",
                                "type": "String"
                       },
                       {
                                "name": "FilePath",
                                "type": "String"
                       },
                      {
                                "name": `"YourOptionalColumn",
                                "type": "String"
                     }
              ]
        }
    }
}
'@

Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{WorkspaceName}/tables/{TableName}_CL?api-version=2021-12-01-preview" -Method PUT -payload $tableParams

200 응답이 수신되고 방금 만든 테이블에 대한 세부 정보가 표시됩니다.

텍스트 또는 JSON 파일에 대한 데이터 수집 규칙 만들기

데이터 수집 규칙은 다음을 정의합니다.

  • Azure Monitor 에이전트가 새 이벤트를 검사하는 원본 로그 파일입니다.
  • 수집 중에 Azure Monitor가 이벤트를 변환하는 방법입니다.
  • Azure Monitor가 데이터를 보내는 대상 Log Analytics 작업 영역 및 테이블입니다.

여러 컴퓨터의 데이터를 다른 지역 또는 테넌트의 작업 영역을 포함하여 여러 Log Analytics 작업 영역으로 보내는 데이터 수집 규칙을 정의할 수 있습니다. Log Analytics 작업 영역과 동일한 지역에서 데이터 수집 규칙을 만듭니다.

참고 항목

테넌트 간에 데이터를 보내려면 먼저 Azure Lighthouse를 사용하도록 설정해야 합니다.

JSON 로그 파일을 사용자 지정 테이블로 자동 구문 분석하려면 Resource Manager 템플릿 단계를 따릅니다. 텍스트 데이터는 수집 시간 변환을 사용하여 열로 변환될 수 있습니다.

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

  1. 모니터 메뉴에서 데이터 수집 규칙을 선택합니다.

  2. 만들기를 선택하여 새 데이터 수집 규칙 및 연결을 만듭니다.

    데이터 수집 규칙 화면의 만들기 단추를 보여 주는 스크린샷.

  3. 규칙 이름을 입력하고 구독, 리소스 그룹, 지역, 플랫폼 형식데이터 수집 엔드포인트를 지정합니다.

    • 지역은 DCR을 만들 위치를 지정합니다. 가상 머신 및 해당 연결은 테넌트의 모든 구독 또는 리소스 그룹에 있을 수 있습니다.
    • 플랫폼 유형은 이 규칙이 적용될 수 있는 리소스의 종류를 지정합니다. 사용자 지정 옵션은 Windows 및 Linux 유형 모두에 허용됩니다.
    • 데이터 수집 엔드포인트는 Azure Monitor 에이전트가 수집된 데이터를 보내는 데이터 수집 엔드포인트를 지정합니다. 이 데이터 수집은 Log Analytics 작업 영역과 동일한 지역에 있어야 합니다. 자세한 내용은 배포에 따라 데이터 수집 엔드포인트를 설정하는 방법을 참조하세요.

    데이터 수집 규칙 화면의 기본 탭을 보여 주는 스크린샷.

  4. 리소스 탭에서:

    1. + 리소스 추가를 선택하고 리소스를 데이터 수집 규칙에 연결합니다. 리소스는 가상 머신, Virtual Machine Scale Sets 및 서버용 Azure Arc일 수 있습니다. Azure Portal은 Azure Monitor 에이전트를 아직 설치하지 않은 리소스에 설치합니다.

      Important

      포털은 기존 사용자 할당 ID(있는 경우)와 함께 대상 리소스에서 시스템 할당 관리 ID를 사용하도록 설정합니다. 기존 애플리케이션에서 요청에 사용자가 할당한 ID를 지정하지 않으면 머신은 기본적으로 시스템이 할당한 ID를 대신 사용합니다.

    2. 데이터 수집 엔드포인트 사용을 선택합니다.

    3. 선택적으로 데이터 수집 규칙에 연결된 각 가상 머신에 대한 데이터 수집 엔드포인트를 선택할 수 있습니다. 대부분의 경우 기본값을 사용해야 합니다.

      이 데이터 수집 엔드포인트는 구성 파일을 가상 머신으로 전송하며, 가상 머신과 동일한 지역에 있어야 합니다. 자세한 내용은 배포에 따라 데이터 수집 엔드포인트를 설정하는 방법을 참조하세요.

    데이터 수집 규칙 화면의 리소스 탭을 보여 주는 스크린샷.

  5. 수집 및 제공 탭에서 데이터 원본 추가를 선택하여 데이터 원본을 추가하고 대상을 설정합니다.

  6. 데이터 원본 유형 드롭다운에서 사용자 지정 텍스트 로그 또는 JSON 로그를 선택합니다.

  7. 다음 정보를 지정합니다.

    • 파일 패턴 - 로컬 디스크에서 로그 파일이 있는 위치를 식별합니다. 쉼표로 구분된 여러 파일 패턴을 입력할 수 있습니다(Linux에서는 쉼표로 구분된 파일 패턴 목록에서 수집하려면 AMA 버전 1.26 이상이 필요함).

      유효한 입력의 예:

      • 20220122-MyLog.txt
      • ProcessA_MyLog.txt
      • ErrorsOnly_MyLog.txt, WarningOnly_MyLog.txt

      참고 항목

      동일한 형식의 여러 로그 파일은 일반적으로 동일한 디렉터리에 존재합니다. 예를 들어, 컴퓨터는 로그 파일이 너무 커지는 것을 방지하기 위해 매일 새 파일을 만들 수 있습니다. 이 시나리오에서 로그 데이터를 수집하려면 파일 와일드카드를 사용할 수 있습니다. Windows의 경우 C:\directoryA\directoryB\*MyLog.txt 형식을 사용하고 Linux의 경우 /var/*.log 형식을 사용합니다. 디렉터리 와일드카드는 지원되지 않습니다.

    • 테이블 이름 - Log Analytics 작업 영역에서 만든 대상 테이블의 이름입니다. 자세한 내용은 사용자 지정 테이블 만들기를 참조하세요.

    • 레코드 구분 기호 - 현재 지원되는 줄 끝(/r/n) 이외의 구분 기호를 허용하기 위해 향후에 사용됩니다.

    • 변환 - 수집 시간 변환을 추가하거나 수집된 데이터를 변환할 필요가 없는 경우 원본으로 둡니다.

  8. 대상 탭에서 데이터 원본에 대한 대상을 하나 이상 추가합니다. 같거나 다른 유형의 여러 대상을 선택할 수 있습니다. 예를 들어 멀티 호밍이라고도 하는 여러 Log Analytics 작업 영역을 선택할 수 있습니다.

    Azure Portal의 데이터 수집 규칙에 대한 데이터 원본 추가 화면의 대상 탭을 보여 주는 스크린샷.

  9. 검토 + 만들기를 선택하여 데이터 수집 규칙 및 가상 머신 집합과의 연결에 대한 세부 정보를 검토합니다.

  10. 데이터 수집 규칙을 만들려면 만들기를 선택합니다.

참고 항목

데이터 수집 규칙을 만든 후 데이터가 대상으로 전송되는 데 최대 10분이 걸릴 수 있습니다.

샘플 로그 쿼리

여기에 사용된 열 이름은 예일 뿐입니다. 로그의 열 이름은 다를 수 있습니다.

  • 코드별 이벤트 수를 계산합니다.

    MyApp_CL
    | summarize count() by code
    

샘플 경고 규칙

  • 오류 이벤트에 대한 경고 규칙을 만듭니다.

    MyApp_CL
    | where status == "Error"
    | summarize AggregatedValue = count() by Computer, bin(TimeGenerated, 15m)
    

문제 해결

다음 단계를 사용하여 텍스트 및 JSON 파일에서 로그 수집 문제를 해결합니다.

사용자 지정 테이블에 데이터를 수집했는지 확인

먼저 Log Analytics에서 다음 쿼리를 실행하여 사용자 지정 로그 테이블에 대한 레코드가 수집되었는지 확인합니다.

<YourCustomTable>_CL
| where TimeGenerated > ago(48h)
| order by TimeGenerated desc

레코드가 반환되지 않으면 다른 섹션에서 가능한 원인을 확인합니다. 이 쿼리는 지난 2일 동안의 전체 항목을 찾지만 다른 시간 범위를 수정할 수 있습니다. 새 데이터가 테이블에 표시되는 데 5~7분이 걸릴 수 있습니다. Azure Monitor 에이전트는 데이터 수집 규칙을 가상 머신과 연결한 후에 텍스트 또는 JSON 파일에 기록된 데이터만 수집합니다.

사용자 지정 표를 만들었는지 확인

데이터를 보내기 전에 Log Analytics 작업 영역에서 사용자 지정 로그 테이블을 만들어야 합니다.

에이전트가 하트비트를 성공적으로 보내고 있는지 확인

Log Analytics에서 다음 쿼리를 실행하여 Azure Monitor 에이전트가 제대로 통신하고 있는지 확인하여 하트비트 테이블에 레코드가 있는지 확인합니다.

Heartbeat
| where TimeGenerated > ago(24h)
| where Computer has "<computer name>"
| project TimeGenerated, Category, Version
| order by TimeGenerated desc

데이터 수집 규칙에서 올바른 로그 위치를 지정했는지 확인

데이터 수집 규칙에는 다음과 유사한 섹션이 있습니다. filePatterns 요소는 에이전트 컴퓨터에서 수집할 로그 파일의 경로를 지정합니다. 에이전트 컴퓨터를 확인하여 이것이 올바른지 확인합니다.

"dataSources": [{
            "configuration": {
                "filePatterns": ["C:\\JavaLogs\\*.log"],
                "format": "text",
                "settings": {
                    "text": {
                        "recordStartTimestampFormat": "yyyy-MM-ddTHH:mm:ssK"
                    }
                }
            },
            "id": "myTabularLogDataSource",
            "kind": "logFile",
            "streams": [{
                    "stream": "Custom-TabularData-ABC"
                }
            ],
            "sendToChannels": ["gigl-dce-00000000000000000000000000000000"]
        }
    ]

이 파일 패턴은 에이전트 머신의 로그에 해당해야 합니다.

에이전트 컴퓨터의 텍스트 로그 파일 스크린샷.

Azure Monitor 에이전트 문제 해결사 사용

Azure Monitor 에이전트 문제 해결사를 사용하여 일반적인 문제를 찾고 Microsoft와 결과를 공유합니다.

로그가 채워지는지 확인

에이전트는 수집 중인 로그 파일에 기록된 새 콘텐츠만 수집합니다. 텍스트 또는 JSON 파일의 수집 로그로 실험하는 경우 다음 스크립트를 사용하여 샘플 로그를 생성할 수 있습니다.

# This script writes a new log entry at the specified interval indefinitely.
# Usage:
# .\GenerateCustomLogs.ps1 [interval to sleep]
#
# Press Ctrl+C to terminate script.
#
# Example:
# .\ GenerateCustomLogs.ps1 5

param (
    [Parameter(Mandatory=$true)][int]$sleepSeconds
)

$logFolder = "c:\\JavaLogs"
if (!(Test-Path -Path $logFolder))
{
    mkdir $logFolder
}

$logFileName = "TestLog-$(Get-Date -format yyyyMMddhhmm).log"
do
{
    $count++
    $randomContent = New-Guid
    $logRecord = "$(Get-Date -format s)Z Record number $count with random content $randomContent"
    $logRecord | Out-File "$logFolder\\$logFileName" -Encoding utf8 -Append
    Start-Sleep $sleepSeconds
}
while ($true)

다음 단계

자세히 알아보기: