Azure Monitor 에이전트를 사용하여 텍스트 파일에서 로그 수집
사용자 지정 텍스트 로그는 DCR(데이터 수집 규칙)에 사용되는 데이터 원본 중 하나입니다. DCR 만들기에 대한 세부 정보는 Azure Monitor 에이전트를 사용하여 데이터 수집에 제공됩니다. 이 문서에서는 텍스트 로그 형식에 대한 추가 세부 정보를 제공합니다.
많은 애플리케이션과 서비스는 Windows 이벤트 로그 또는 Syslog와 같은 표준 로깅 서비스 대신 텍스트 파일에 정보를 로깅합니다. 이 데이터는 Azure Monitor 에이전트를 통해 수집할 수 있으며 다른 원본에서 수집한 데이터와 함께 Log Analytics 작업 영역에 저장할 수 있습니다.
필수 조건
- 최소한 기여자 권한이 있는 Log Analytics 작업 영역입니다.
- Log Analytics 작업 영역과 동일한 지역에 있는 DCE(데이터 수집 엔드포인트)입니다. 자세한 내용은 배포에 따라 데이터 수집 엔드포인트를 설정하는 방법을 참조하세요.
- Azure Monitor 에이전트를 사용하여 데이터 수집에 설명된 신규 DCR 또는 기존 DCR입니다.
기본 작업
다음 다이어그램은 텍스트 파일에서 로그 데이터를 수집하는 기본 작업을 보여 줍니다.
- 에이전트는 로컬 디스크에서 지정된 이름 패턴과 일치하는 모든 로그 파일을 감시합니다.
- 로그의 각 항목은 수집되어 Azure Monitor로 전송됩니다. 수신 스트림에는 단일 열의 전체 로그 항목이 포함됩니다.
- 기본 변환을 사용하는 경우 전체 로그 항목이 대상 테이블의 단일 열로 전송됩니다.
- 사용자 지정 변환을 사용하는 경우 로그 항목을 대상 테이블의 여러 열로 구문 분석할 수 있습니다.
텍스트 파일 요구 사항 및 모범 사례
Azure Monitor 에이전트가 모니터링하는 파일은 다음 요구 사항을 충족해야 합니다.
- 파일은 모니터링되는 디렉터리에 Azure Monitor 에이전트가 있는 컴퓨터의 로컬 드라이브에 저장되어야 합니다.
- 각 레코드는 줄 끝으로 설명되어야 합니다.
- 파일은 ASCII 또는 UTF-8 인코딩을 사용해야 합니다. UTF-16과 같은 다른 형식은 지원되지 않습니다.
- 새 레코드는 파일 끝에 추가되어야 하며 이전 레코드를 덮어쓰면 안 됩니다. 덮어쓰면 데이터가 손실됩니다.
데이터 손실이나 성능 문제가 발생하지 않도록 하려면 다음 권장 사항을 따릅니다.
- 오래된 파일을 쉽게 정리할 수 있도록 매일 새 로그 파일을 만듭니다.
- 모니터링되는 디렉터리의 로그 파일을 지속적으로 정리합니다. 많은 로그 파일을 추적하면 에이전트 CPU 및 메모리 사용량이 증가할 수 있습니다. 모든 로그가 처리될 때까지 충분한 시간을 허용하기 위해 2일 이상 기다립니다.
- 파일 검사 패턴과 일치하는 파일의 이름을 파일 검사 패턴과 일치하는 다른 이름으로 바꾸지 마세요. 이로 인해 중복 데이터가 수집됩니다.
- 파일 검사 패턴과 일치하는 대용량 로그 파일의 이름을 바꾸거나 모니터링되는 디렉터리에 복사하지 마세요. 필요한 경우 분당 50MB를 초과하지 마세요.
들어오는 스트림
참고 항목
이제 타임스탬프를 사용하여 구분된 이벤트에 대한 여러 줄 지원을 사용할 수 있습니다. 포털 UI에 지원이 추가될 때까지 리소스 관리 템플릿 배포를 사용해야 합니다.
들어오는 데이터 스트림에는 다음 표의 열이 포함됩니다.
Column | Type | 설명 |
---|---|---|
TimeGenerated |
datetime | 레코드가 생성된 시간입니다. 이 값은 레코드가 Log Analytics 작업 영역에 추가되는 시간으로 자동으로 채워집니다. 변환을 사용하여 이 값을 재정의하여 TimeGenerated 를 다른 값으로 설정할 수 있습니다. |
RawData |
string | 단일 열의 전체 로그 항목입니다. 테이블로 보내기 전에 이 데이터를 여러 열로 분류하려는 경우 변환을 사용할 수 있습니다. |
FilePath |
string | DCR의 수신 스트림에 이 열을 추가하면 로그 파일 경로가 채워집니다. 이 열은 자동으로 만들어지지 않으며 포털을 사용하여 추가할 수 없습니다. 포털에서 만들어진 DCR을 수동으로 수정하거나 수신 스트림을 명시적으로 정의할 수 있는 다른 방법을 사용하여 DCR을 만들어야 합니다. |
Computer |
string | DCR의 수신 스트림에 이 열을 추가하면 로그 파일이 있는 컴퓨터 이름으로 채워집니다. 이 열은 자동으로 만들어지지 않으며 포털을 사용하여 추가할 수 없습니다. 포털에서 만들어진 DCR을 수동으로 수정하거나 수신 스트림을 명시적으로 정의할 수 있는 다른 방법을 사용하여 DCR을 만들어야 합니다. |
사용자 지정 테이블
텍스트 파일에서 로그 데이터를 수집하려면 먼저 Log Analytics 작업 영역에서 사용자 지정 테이블을 만들어 데이터를 받아야 합니다. 테이블 스키마는 수집 중인 데이터와 일치해야 합니다. 또는 출력 스키마가 테이블과 일치하도록 변환을 추가해야 합니다.
Warning
데이터 손실을 방지하려면 MMA 에이전트가 현재 사용하고 있는 기존 사용자 지정 로그 테이블을 사용하지 않는 것이 중요합니다. AMA 에이전트가 기존 사용자 지정 로그 테이블에 쓰면 MMA 에이전트는 더 이상 해당 테이블에 쓸 수 없습니다. 대신 AMA 에이전트에 대한 새 테이블을 만들어 한 에이전트에서 다음 에이전트로 원활하게 전환해야 합니다.
예를 들어, 다음 PowerShell 스크립트를 사용하여 RawData
, FilePath
및 Computer
로 사용자 지정 테이블을 만들 수 있습니다. 스키마가 수신 스트림의 기본 스키마와 일치하므로 이 테이블에 대한 변환이 필요하지 않습니다.
$tableParams = @'
{
"properties": {
"schema": {
"name": "{TableName}_CL",
"columns": [
{
"name": "TimeGenerated",
"type": "DateTime"
},
{
"name": "RawData",
"type": "String"
},
{
"name": "FilePath",
"type": "String"
},
{
"name": "Computer",
"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
텍스트 파일에 대한 데이터 수집 규칙 만들기
Azure Monitor 에이전트를 사용하여 데이터 수집에 설명된 대로 데이터 수집 규칙을 만듭니다. 수집 및 배달 단계의 데이터 원본 유형 드롭다운에서 사용자 지정 텍스트 로그를 선택합니다.
설정 | 설명 |
---|---|
파일 패턴 | 로컬 디스크에 있는 로그 파일의 위치와 이름을 식별합니다. 예를 들어, 매일 새 이름으로 새 파일이 만들어지는 경우와 같이 다양한 파일 이름에는 와일드카드를 사용합니다. 쉼표로 구분된 여러 파일 패턴을 입력할 수 있습니다. 예: - C:\Logs\MyLog.txt - C:\Logs\MyLog*.txt - C:\App01\AppLog.txt, C:\App02\AppLog.txt - /var/mylog.log - /var/mylog*.log |
테이블 이름 | Log Analytics 작업 영역의 대상 테이블 이름입니다. |
레코드 구분 기호 | 현재 사용되지 않지만 향후 잠재적 사용을 위해 예약되어 현재 지원되는 줄 끝(/r/n ) 이외의 구분 기호를 허용합니다. |
변환 | 수집 시간 변환을 통해 레코드를 필터링하거나 대상 테이블에 대한 수신 데이터 서식을 지정합니다. 수신 데이터를 변경하지 않고 그대로 두려면 source 를 사용합니다. |
구분된 로그 파일
많은 텍스트 로그 파일에는 쉼표와 같은 문자로 구분된 항목이 있습니다. 이 데이터를 별도의 열로 구문 분석하려면 분할 함수를 사용하여 변환을 사용합니다.
예를 들어, 다음과 같이 쉼표로 구분된 데이터가 포함된 텍스트 파일을 생각해 보세요. 이러한 필드는 Time
, Code
, Severity
,Module
및 Message
로 설명될 수 있습니다.
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.
다음 변환은 데이터를 별도의 열로 구문 분석합니다. split
은 동적 데이터를 반환하므로 tostring
및 toint
와 같은 함수를 사용하여 데이터를 올바른 스칼라 형식으로 변환해야 합니다. 또한 대상 테이블의 열 이름과 일치하는 각 항목에 대한 이름을 제공해야 합니다. 이 예에서는 TimeGenerated
값을 제공합니다. 이것이 제공되지 않으면 수집 시간이 사용됩니다.
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])
로그 쿼리를 사용하여 이 데이터를 검색하면 다음 결과가 반환됩니다.
문제 해결
예상한 텍스트 로그에서 데이터를 수집하지 않는 경우 다음 단계를 수행합니다.
- 수집 중인 로그 파일에 데이터가 기록되고 있는지 확인합니다.
- 로그 파일의 이름과 위치가 지정한 파일 패턴과 일치하는지 확인합니다.
- 대상 테이블의 스키마가 수신 스트림과 일치하는지 또는 수신 스트림을 올바른 스키마로 변환하는 변환이 있는지 확인합니다.
- 에이전트가 작동 중이고 데이터가 수신되고 있는지 확인하려면 작동 확인을 참조하세요.
다음 단계
자세히 알아보기: