아래의 fluentd configuration은 udp 5140 port로 listening을 하여
syslog type의 input을 받고 이를 두 차례 parsing 하여 stdout 하는 설정입니다.
<source>
@type syslog
port 5140
tag nginx.access
<parse>
@type syslog
</parse>
</source>
<filter **>
@type stdout
</filter>
<filter nginx.access.**>
@type parser
key_name message
reserve_data true
<parse>
@type nginx
</parse>
</filter>
<filter **>
@type stdout
</filter>
syslog로 가져왔을 때 두차례나 parsing이 필요했다.
아직 입문이라 어떻게 할 지 당황했는데, 아래 출처의 블로그를 보고 해결할 수 있었다.
또한 tag가 nginx.access가 아닌 nginx.access.local7.info가 되는데
이것은 input syslog plugin이 규칙에 따라 자동으로 생성한 것이라고 한다.(참조)
key_name 또한 공식 document을 참조하여 message 부분만을 parsing 하도록 하였고
이때 reserve_data를 false로 하면 해당 parsing의 결과로 생성되는 필드만 다음 스텝으로 넘어가게 된다.
reserve_data true인 경우
2020-05-23 04:03:06.000000000 +0000 nginx.access.local7.info: {"host":"28da686c17fc","ident":"nginx_access","message":"172.22.0.1 - - [23/May/2020:04:03:06 +0000] \"GET / HTTP/1.1\" 200 612 \"-\" \"curl/7.58.0\" \"-\""}
2020-05-23 04:03:06.000000000 +0000 nginx.access.local7.info: {"host":"-","ident":"nginx_access","message":"172.22.0.1 - - [23/May/2020:04:03:06 +0000] \"GET / HTTP/1.1\" 200 612 \"-\" \"curl/7.58.0\" \"-\"","remote":"172.22.0.1","user":"-","method":"GET","path":"/","code":"200","size":"612","referer":"-","agent":"curl/7.58.0","http_x_forwarded_for":"-"}
reserve_data false인 경우
2020-05-23 04:08:29.000000000 +0000 nginx.access.local7.info: {"host":"28da686c17fc","ident":"nginx_access","message":"172.22.0.1 - - [23/May/2020:04:08:29 +0000] \"GET / HTTP/1.1\" 200 612 \"-\" \"curl/7.58.0\" \"-\""}
2020-05-23 04:08:29.000000000 +0000 nginx.access.local7.info: {"remote":"172.22.0.1","host":"-","user":"-","method":"GET","path":"/","code":"200","size":"612","referer":"-","agent":"curl/7.58.0","http_x_forwarded_for":"-"}
출처
https://jonnung.dev/system/2018/04/06/fluentd-log-collector-part1/
'Devops > Logging' 카테고리의 다른 글
Docker 자동으로 기동시키기 (0) | 2021.02.08 |
---|---|
[Fluentd] Life cycle, 컴포넌트, 데이터구조 (0) | 2020.05.23 |