에이전트를 사용한 데이터 사전 처리
모니터링한 파일에서 구문 분석한 레코드를 Firehose 스트림으로 보내기 전에 에이전트가 사전 처리할 수 있습니다. 파일 흐름에 dataProcessingOptions
구성 설정을 추가하여 이 기능을 활성화할 수 있습니다. 하나 이상의 처리 옵션을 추가할 수 있으며, 추가된 옵션은 지정된 순서로 수행됩니다.
에이전트는 다음 처리 옵션을 지원합니다. 에이전트는 오픈 소스이므로, 처리 옵션을 더 개발하고 확장할 수 있습니다. 에이전트는 Kinesis Agent
처리 옵션
SINGLELINE
-
줄 바꿈 문자, 선행 공백과 후행 공백을 삭제해 여러 줄 레코드를 한 줄 레코드로 변환합니다.
{ "optionName": "SINGLELINE" }
CSVTOJSON
-
구분 기호로 구분된 형식에서 JSON 형식으로 레코드를 변환합니다.
{ "optionName": "CSVTOJSON", "customFieldNames": [ "
field1
", "field2
",...
], "delimiter": "yourdelimiter
" }customFieldNames
-
[필수] 각각의 JSON 키 값 쌍에서 키로 사용되는 필드 이름입니다. 예를 들어
["f1", "f2"]
를 지정하면 레코드 "v1, v2"가{"f1":"v1","f2":"v2"}
로 변환됩니다. delimiter
-
레코드에서 구분 기호로 사용되는 문자열입니다. 기본값은 쉼표(,)입니다.
LOGTOJSON
-
로그 형식에서 JSON 형식으로 레코드를 변환합니다. 지원되는 로그 형식은 Apache Common Log, Apache Combined Log, Apache Error Log 및 RFC3164 Syslog입니다.
{ "optionName": "LOGTOJSON", "logFormat": "
logformat
", "matchPattern": "yourregexpattern
", "customFieldNames": [ "field1
", "field2
",…
] }logFormat
-
[필수] 로그 항목 형식입니다. 유효한 값은 다음과 같습니다.
-
COMMONAPACHELOG
- Apache Common Log 형식입니다. 각 로그 항목에는 기본적으로 "%{host} %{ident} %{authuser} [%{datetime}] \"%{request}\" %{response} %{bytes}
" 패턴이 있습니다. -
COMBINEDAPACHELOG
- Apache Combined Log 형식입니다. 각 로그 항목에는 기본적으로 "%{host} %{ident} %{authuser} [%{datetime}] \"%{request}\" %{response} %{bytes} %{referrer} %{agent}
" 패턴이 있습니다. -
APACHEERRORLOG
- Apache Error Log 형식입니다. 각 로그 항목에는 기본적으로 "[%{timestamp}] [%{module}:%{severity}] [pid %{processid}:tid %{threadid}] [client: %{client}] %{message}
" 패턴이 있습니다. -
SYSLOG
- RFC3164 Syslog 형식입니다. 각 로그 항목에는 기본적으로 "%{timestamp} %{hostname} %{program}[%{processid}]: %{message}
" 패턴이 있습니다.
-
matchPattern
-
지정된 로그 형식에 대한 기본 패턴을 재정의합니다. 사용자 지정 형식을 사용하는 경우 이 설정을 이용해 로그 항목에서 값을 추출합니다.
matchPattern
을 지정하면customFieldNames
도 함께 지정해야 합니다. customFieldNames
-
각각의 JSON 키 값 쌍에서 키로 사용되는 사용자 지정 필드 이름입니다. 이 설정을 사용하여
matchPattern
에서 추출한 값에 필드 이름을 정의하거나 사전 정의된 로그 형식의 기본 필드 이름을 재정의합니다.
예 : LOGTOJSON 구성
다음은 Apache Common Log 항목을 JSON 형식으로 변환하는 LOGTOJSON
구성의 예제입니다.
{ "optionName": "LOGTOJSON", "logFormat": "COMMONAPACHELOG" }
변환 전:
64.242.88.10 - - [07/Mar/2004:16:10:02 -0800] "GET /mailman/listinfo/hsdivision HTTP/1.1" 200 6291
변환 후:
{"host":"64.242.88.10","ident":null,"authuser":null,"datetime":"07/Mar/2004:16:10:02 -0800","request":"GET /mailman/listinfo/hsdivision HTTP/1.1","response":"200","bytes":"6291"}
예 : 사용자 지정 필드가 있는 LOGTOJSON 구성
다음은 LOGTOJSON
구성의 또 다른 예제입니다.
{ "optionName": "LOGTOJSON", "logFormat": "COMMONAPACHELOG", "customFieldNames": ["f1", "f2", "f3", "f4", "f5", "f6", "f7"] }
이 구성 설정을 사용하면 이전 예제의 동일한 Apache Common Log 항목이 다음과 같이 JSON 형식으로 변환됩니다.
{"f1":"64.242.88.10","f2":null,"f3":null,"f4":"07/Mar/2004:16:10:02 -0800","f5":"GET /mailman/listinfo/hsdivision HTTP/1.1","f6":"200","f7":"6291"}
예 : Apache Common Log 항목 변환
다음 흐름 구성은 Apache Common Log 항목을 JSON 형식의 한 줄 레코드로 변환합니다.
{ "flows": [ { "filePattern": "
/tmp/app.log*
", "deliveryStream": "my-delivery-stream
", "dataProcessingOptions": [ { "optionName": "LOGTOJSON", "logFormat": "COMMONAPACHELOG" } ] } ] }
예 : 여러 줄 레코드 변환
다음 흐름 구성은 첫 줄이 "[SEQUENCE=
"로 시작하는 여러 줄 레코드를 구문 분석합니다. 먼저 각각의 레코드가 한 줄 레코드로 변환됩니다. 그런 다음 탭 구분 기호를 기반으로 레코드에서 값이 추출됩니다. 추출된 값은 지정된 customFieldNames
값에 매핑되어 JSON 형식의 한 줄 레코드를 형성합니다.
{ "flows": [ { "filePattern": "
/tmp/app.log*
", "deliveryStream": "my-delivery-stream
", "multiLineStartPattern": "\\[SEQUENCE=
", "dataProcessingOptions": [ { "optionName": "SINGLELINE" }, { "optionName": "CSVTOJSON", "customFieldNames": [ "field1
", "field2
", "field3
" ], "delimiter": "\\t
" } ] } ] }
예 : 일치 패턴이 있는 LOGTOJSON 구성
다음은 마지막 필드(바이트)가 생략되어 있으며 Apache Common Log 항목을 JSON 형식으로 변환하는 LOGTOJSON
구성의 예제입니다.
{ "optionName": "LOGTOJSON", "logFormat": "COMMONAPACHELOG", "matchPattern": "^([\\d.]+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] \"(.+?)\" (\\d{3})", "customFieldNames": ["host", "ident", "authuser", "datetime", "request", "response"] }
변환 전:
123.45.67.89 - - [27/Oct/2000:09:27:09 -0400] "GET /java/javaResources.html HTTP/1.0" 200
변환 후:
{"host":"123.45.67.89","ident":null,"authuser":null,"datetime":"27/Oct/2000:09:27:09 -0400","request":"GET /java/javaResources.html HTTP/1.0","response":"200"}