가상 머신의 많은 애플리케이션 및 서비스는 Windows 이벤트 로그 또는 Syslog와 같은 표준 로깅 서비스 대신 텍스트 파일에 정보를 기록합니다. 사용자 지정 텍스트 로그 데이터 원본과 함께 DCR(데이터 수집 규칙) 을 사용하여 가상 머신에서 사용자 지정 텍스트 로그를 수집할 수 있습니다.
DCR 생성에 대한 세부 정보는 Azure Monitor를 사용하여 VM 클라이언트에서 데이터 수집에 제공됩니다. 이 문서에서는 사용자 지정 텍스트 로그 데이터 원본 형식에 대한 추가 세부 정보를 제공합니다.
비고
DCR 정의를 직접 사용하거나 ARM 템플릿과 같은 다른 방법으로 배포하려면 Azure Monitor의 DCR(데이터 수집 규칙) 샘플을 참조하세요.
필수 조건
Azure Monitor를 사용하여 가상 머신 클라이언트에서 데이터 수집에 나열된 필수 조건 외에도 데이터를 수신하려면 Log Analytics 작업 영역에 사용자 지정 테이블이 필요합니다. 이 테이블의 요구 사항에 대한 자세한 내용은 Log Analytics 작업 영역 테이블을 참조하세요. Aarch64는 지원되지 않습니다.
사용자 지정 텍스트 파일 데이터 원본 구성
Azure Monitor를 사용하여 가상 머신 클라이언트에서 데이터 수집 프로세스를 사용하여 DCR을 만듭니다. DCR의 수집 및 배달 탭에서 데이터 원본 유형 드롭다운에서 사용자 지정 텍스트 로그를 선택합니다.
사용자 지정 텍스트 로그 구성에서 사용할 수 있는 옵션은 다음 표에 설명되어 있습니다.
설정 | 설명 |
---|---|
파일 패턴 | 로컬 디스크에 있는 로그 파일의 위치와 이름을 식별합니다. 예를 들어, 매일 새 이름으로 새 파일이 만들어지는 경우와 같이 다양한 파일 이름에는 와일드카드를 사용합니다. 쉼표로 구분된 여러 파일 패턴을 입력할 수 있습니다. 예제: - C:\Logs\MyLog.txt - C:\Logs\MyLog*.txt - C:\App01\AppLog.txt, C:\App02\AppLog.txt - /var/mylog.log - /var/mylog*.log |
테이블 이름 | Log Analytics 작업 영역의 대상 테이블 이름입니다. 이 테이블은 이미 있어야 합니다. |
레코드 구분 기호 | 로그 항목 간의 구분 기호를 나타냅니다. TimeStamp 는 현재 허용되는 유일한 값입니다. 새 레코드의 시작을 식별하기 위해 지정된 timeFormat 형식의 날짜를 찾습니다. 지정된 형식의 날짜가 없으면 줄의 끝이 사용됩니다. 자세한 내용은 시간 형식을 참조하세요. |
TimeStamp 형식 | 아래 시간 형식에 설명된 대로 로그 파일에 사용되는 시간 형식입니다 . |
변화시키다 | 수집 시간 변환을 통해 레코드를 필터링하거나 대상 테이블에 대한 수신 데이터 서식을 지정합니다. 들어오는 데이터를 변경하지 않고 source 을(를) 사용하여 RawData 열로 보냅니다. 구분된 로그 파일을 참조하여 변환 사용 예제를 확인하세요. |
대상 추가
사용자 지정 텍스트 로그는 사용자가 만든 사용자 지정 테이블에 저장된 Log Analytics 작업 영역으로만 보낼 수 있습니다. Azure Monitor 로그 유형의 대상을 추가하고 Log Analytics 작업 영역을 선택합니다. 사용자 지정 텍스트 로그 데이터 원본에 대한 단일 작업 영역만 DCR에 추가할 수 있습니다. 여러 대상이 필요한 경우 여러 DCR을 만듭니다. 이렇게 하면 중복된 데이터가 각각에 전송되므로 추가 비용이 발생합니다.
시간 형식
다음 표에서는 DCR 설정에서 지원되는 시간 형식에 timeFormat
대해 설명합니다. 지정된 형식의 시간이 로그 항목에 포함된 경우 새 로그 항목을 식별하는 데 사용됩니다. 지정된 형식의 날짜가 없으면 줄의 끝이 구분 기호로 사용됩니다. 이 설정이 사용되는 방법에 대한 자세한 내용은 여러 줄 로그 파일을 참조하세요.
시간 형식 | 예시 |
---|---|
ISO 8601 1 |
2024-10-29T18:28:34Z |
yyyy-MM-ddTHH:mm:ssk |
2024-10-29T18:28:34Z 2024-10-29T18:28:34+01:11 |
YYYY-MM-DD HH:MM:SS |
2024-10-29 18:28:34 |
M/D/YYYY HH:MM:SS AM/PM |
2024년 10월 29일 오후 06시 28분 34초 |
Mon DD, YYYY HH:MM:SS |
2024년 10월 29일 18:28:34 |
yyMMdd HH:mm:ss |
241029 18:28:34 |
ddMMyy HH:mm:ss |
291024 18:28:34 |
MMM d HH:mm:ss |
10월 29일 18:28:34 |
dd/MMM/yyyy:HH:mm:ss zzz |
2024년 10월 14일:18:28:34 -00 |
소수 자릿수/1초 미만의 정밀도를 사용하는 1 ISO 8601 타임스탬프는 지원되지 않습니다.
텍스트 파일 요구 사항 및 모범 사례
Azure Monitor에서 수집하는 파일은 다음 요구 사항을 충족해야 합니다.
- 이 파일은 모니터링 중인 디렉터리에 있는 에이전트 컴퓨터의 로컬 드라이브에 저장되어야 합니다.
- 파일은 ASCII 또는 UTF-8 인코딩을 사용해야 합니다. UTF-16과 같은 다른 형식은 지원되지 않습니다.
- 새 레코드는 파일 끝에 추가되어야 하며 이전 레코드를 덮어쓰면 안 됩니다. 덮어쓰면 데이터가 손실됩니다.
다음은 Azure Monitor에서 수집할 수 있는 일반적인 사용자 지정 텍스트 파일의 샘플입니다. 각 줄은 날짜로 시작하지만, 날짜가 없는 경우 각 항목을 식별하는 데 줄의 끝을 사용하므로 이 작업은 필요하지 않습니다.
2024-06-21 19:17:34,1423,Error,Sales,Unable to connect to pricing service.
2024-06-21 19:18:23,1420,Information,Sales,Pricing service connection established.
2024-06-21 21:45:13,2011,Warning,Procurement,Module failed and was restarted.
2024-06-21 23:53:31,4100,Information,Data,Nightly backup complete.
데이터 손실이나 성능 문제가 발생하지 않도록 하려면 다음 권장 사항을 따릅니다.
- 로그 파일이 있는 디렉터리를 10개 이상 대상으로 지정하지 마세요. 디렉터리를 너무 많이 폴링하면 성능이 저하됩니다.
- 모니터링되는 디렉터리의 로그 파일을 지속적으로 정리합니다. 많은 로그 파일을 추적하면 에이전트 CPU 및 메모리 사용량이 증가할 수 있습니다. 모든 로그가 처리될 때까지 충분한 시간을 허용하려면 2일 이상 기다립니다.
- 파일 검사 패턴과 일치하는 파일의 이름을 파일 검사 패턴과 일치하는 다른 이름으로 바꾸지 마세요. 이로 인해 중복 데이터가 수집됩니다.
- 파일 검사 패턴과 일치하는 대용량 로그 파일의 이름을 바꾸거나 모니터링되는 디렉터리에 복사하지 마세요. 필요한 경우 분당 50MB를 초과하지 마세요.
Log Analytics 작업 영역 테이블
로그 파일의 각 항목은 만들어지고 Log Analytics 작업 영역의 지정된 테이블로 전송될 때 수집됩니다. DCR을 만들기 전에 데이터를 받을 Log Analytics 작업 영역의 사용자 지정 테이블이 있어야 합니다.
다음 표에서는 작업 영역 테이블의 필수 및 선택적 열에 대해 설명합니다. 표에는 다른 열이 포함될 수 있지만, 데이터를 구분된 로그 파일에 설명된 대로 변환하여 구문 분석하지 않는 한 해당 열은 채워지지 않습니다.
칼럼 | 유형 | 필수? | 설명 |
---|---|---|---|
TimeGenerated |
날짜 및 시간 | 예 | 이 열에는 레코드가 생성된 시간이 포함되며 모든 테이블에 필요합니다. 이 값은 레코드가 Log Analytics 작업 영역에 추가되는 시간으로 자동으로 채워집니다. 변환을 사용하여 이 값을 재정의하고 로그 항목의 값을 TimeGenerated 에 설정할 수 있습니다. |
RawData |
문자열 | 예 1 | 단일 열의 전체 로그 항목입니다. 테이블로 보내기 전에 이 데이터를 여러 열로 분류하려는 경우 변환을 사용할 수 있습니다. |
Computer |
문자열 | 아니오 | 테이블에 이 열이 포함된 경우 로그 항목이 수집된 컴퓨터의 이름으로 채워집니다. |
FilePath |
문자열 | 아니오 | 테이블에 이 열이 포함된 경우 로그 항목이 수집된 로그 파일의 경로로 채워집니다. |
1 변환을 사용하여 데이터를 여러 열로 RawData
구문 분석하는 경우 테이블에 열을 포함할 필요가 없습니다.
기본 설정을 사용하여 수집되는 경우 위에 표시된 샘플 로그 파일의 데이터는 로그 쿼리를 사용하여 검색될 때 다음과 같이 표시됩니다.
사용자 지정 테이블 만들기
대상 테이블이 아직 없는 경우 DCR을 만들기 전에 만들어야 합니다. 테이블을 만드는 다른 방법에 대한 사용자 지정 테이블 만들기 를 참조하세요.
예를 들어 다음 PowerShell 스크립트를 사용하여 사용자 지정 텍스트 로그에서 데이터를 수신하는 사용자 지정 테이블을 만들 수 있습니다. 이 예제에서는 선택적 열도 추가합니다.
$tableParams = @'
{
"properties": {
"schema": {
"name": "{TableName}_CL",
"columns": [
{
"name": "TimeGenerated",
"type": "DateTime"
},
{
"name": "Computer",
"type": "string"
},
{
"name": "FilePath",
"type": "string"
},
{
"name": "RawData",
"type": "string"
}
]
}
}
}
'@
Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/MyTable_CL?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
여러 줄 로그 파일
일부 로그 파일에는 여러 줄에 걸쳐 있는 항목이 포함될 수 있습니다. 각 로그 항목이 날짜로 시작하는 경우 이 날짜를 구분 기호로 사용하여 각 로그 항목을 정의할 수 있습니다. 이 경우 추가 줄이 RawData
열에 결합됩니다.
예를 들어 이전 예제의 텍스트 파일은 다음과 같이 서식이 지정될 수 있습니다.
2024-06-21 19:17:34,1423,Error,Sales,
Unable to connect to pricing service.
2024-06-21 19:18:23,1420,Information,Sales,
Pricing service connection established.
2024-06-21 21:45:13,2011,Warning,Procurement,
Module failed and was restarted.
2024-06-21 23:53:31,4100,Information,Data,
Nightly backup complete.
DCR에서 타임스탬프를 YYYY-MM-DD HH:MM:SS
사용하는 경우 데이터는 이전 예제와 동일한 방식으로 수집됩니다. 추가 줄이 RawData
열에 포함됩니다. 로그 항목의 날짜와 일치하지 않는 다른 타임스탬프를 사용한 경우 각 항목은 두 개의 별도 레코드로 수집됩니다.
구분된 로그 파일
많은 텍스트 로그 파일에는 쉼표와 같은 문자로 구분된 열이 있는 항목이 있습니다. 전체 항목을 열로 RawData
보내는 대신 데이터를 별도의 열로 구문 분석하여 각각 대상 테이블에 채울 수 있습니다. 분할 함수를 이용한 변환을 통해 이 구문 분석을 수행합니다.
위에 표시된 샘플 텍스트 파일은 쉼표로 구분되어 있으며 필드는 다음Time
Code
Severity
Module
Message
으로 설명될 수 있습니다. 이 데이터를 별도의 열로 구문 분석하려면 각 열을 대상 테이블에 추가하고 DCR에 다음 변환을 추가합니다.
중요합니다
DCR에 이 변환을 추가하기 전에 이러한 열을 대상 테이블에 추가해야 합니다. 테이블을 만들 때 추가 열을 포함하도록 위의 PowerShell 스크립트를 수정할 수 있습니다. 또는 사용자 지정 열 추가 또는 삭제 에 설명된 대로 Azure Portal을 사용하여 기존 테이블에 열을 추가합니다.
변환 쿼리의 주목할 만한 세부 정보는 다음과 같습니다.
- 쿼리는 각각 대상 테이블의 열 이름과 일치하는 속성을 출력합니다.
- 이 예제에서는 이 값이
Time
에서 사용될 수 있도록 로그 파일의TimeGenerated
속성 이름을 바꿉니다. 이 정보가 제공되지 않았다면TimeGenerated
시간은 수집 시간으로 설정됩니다. split
은 동적 데이터를 반환하므로tostring
및toint
와 같은 함수를 사용하여 데이터를 올바른 스칼라 형식으로 변환해야 합니다.
source | project d = split(RawData,",") | project TimeGenerated=todatetime(d[0]), Code=toint(d[1]), Severity=tostring(d[2]), Module=tostring(d[3]), Message=tostring(d[4])
로그 쿼리를 사용하여 이 데이터를 검색하면 다음 결과가 반환됩니다.
문제 해결
예상한 텍스트 로그에서 데이터를 수집하지 않는 경우 다음 단계를 수행합니다.
- 수집 중인 로그 파일에 데이터가 기록되고 있는지 확인합니다.
- 로그 파일의 이름과 위치가 지정한 파일 패턴과 일치하는지 확인합니다.
- 대상 테이블의 스키마가 수신 스트림과 일치하는지 또는 수신 스트림을 올바른 스키마로 변환하는 변환이 있는지 확인합니다.
- 에이전트가 작동 중이고 데이터가 수신되고 있는지 확인하려면 작동 확인을 참조하세요.
다음 단계
- Azure Monitor 에이전트에 대해 자세히 알아보세요.
- 데이터 수집 규칙에 대해 자세히 알아봅니다.