fluentd에서 가장 까다로운 것이 로그를 정규표현식으로 분석하는 것이다.
잘못하면 로그가 drop될 수 있기 때문에.. 신중하게 써야 하는데.
헤로쿠의 다음 url에서 fluent의 정규 표현식을 테스트해볼 수 있다.
http://fluentular.herokuapp.com/
예를 들어 다음 로그를
"192.168.6.118 - - [25/May/2014:23:44:21 +0000] GET /images/templates/main/favicon_16_24_32.ico HTTP/1.1 \"200\" 1811 \"-\" \"test-domain.com\" test-domain.com \"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36\" \"-\" upstream_response_time 0.028 upstream_addr 192.168.6.7:8017 msec 1401061461.752 request_time 0.028"
다음과 같은 regex로 파싱할 수 있다.
^(?<remote_addr>[^ ]*) - (?<remote_user>[^ ]*) \[(?<time>[^\]]*)\]\s+(?<request_type>[^ ]*) (?<request_url>[^ ]*) (?<request_http_protocol>[^ ]*) "(?<status>[^"]*)" (?<body_bytes_sent>[^ ]*) "(?<http_referer>[^"]*)" "(?<http_host>[^"]*)" (?<host>[^ ]*) "(?<http_user_agent>[^"]*)" "(?<http_x_forwarded_for>[^"]*)" upstream_response_time (?<upstream_response_time>[^ ]*) upstream_addr (?<upstream_addr>[^ ]*) msec (?<msec request_time>[^ ]*) request_time (?<request_time>[^ ]*)
url은 get으로 볼 수 있다.
<source>
type tail
path /var/log/foo/bar.log
pos_file /var/log/td-agent/foo-bar.log.pos
tag foo.bar
format /^(?<remote_addr>[^ ]*) - (?<remote_user>[^ ]*) \[(?<time>[^\]]*)\]\s+(?<request_type>[^ ]*) (?<request_url>[^ ]*) (?<request_http_protocol>[^ ]*) "(?<status>[^"]*)" (?<body_bytes_sent>[^ ]*) "(?<http_referer>[^"]*)" "(?<http_host>[^"]*)" (?<host>[^ ]*) "(?<http_user_agent>[^"]*)" "(?<http_x_forwarded_for>[^"]*)" upstream_response_time (?<upstream_response_time>[^ ]*) upstream_addr (?<upstream_addr>[^ ]*) msec (?<msec request_time>[^ ]*) request_time (?<request_time>[^ ]*)/
</source>
'Cloud' 카테고리의 다른 글
[openstack] 오버 커밋(overcommit) 공부 (0) | 2018.04.11 |
---|---|
[docker] Permission denied 해결, docker 드라이버(aufs를 overlay)를 변경하는 방법 (0) | 2018.04.11 |
[fluentd] format json (0) | 2018.04.10 |
[openstack] keystone 인증(auth)만 해보기 (0) | 2018.02.07 |
[k8s] 쿠버네티스의 로그 수집 툴 (0) | 2018.02.06 |