我正在使用 Fluentd 解析日志并将解析后的日志存储在 MongoDB 中。
我的应用程序正在生成以下日志:
[2018-01-25 17:50:22] 192.168.10.1 GET http://localhost.com/mypage html 0 Mozilla/5.0 200 132
Fluentd 正在正确解析日志,但不是时间(我猜)。因为 MongoDB 无法存储解析后的内容。它甚至没有反映在解析的日志中。下面是解析结果:
2018-01-25 17:50:22.000000000 +0000 request.main: {"ip-address":"192.168.10.1","request-method":"GET","request-url":"http://localhost.com/mypage","format":"html","request-size":"0","user-agent":"Mozilla/5.0","response-code":"200","response-duration":"132"}
但是,我没有看到这里解析的时间。并怀疑这种行为,fluent-plugin-Mongo 写道:
[ warn ]: #0 从 v0.8 开始,无效记录检测将被删除,因为 Mongo 驱动程序 v2.x 和 API 规范不提供它。您可能会丢失无效记录,因此您不应将此类记录发送到 Mongo 插件
但是,当使用fluentular时,它会正确解析。这是我的尾部配置:
<source>
@type tail
path /home/app-logs/dev/my-app/%Y/%b/dev-main.log
tag request.main
time_format %Y-%m-%d %H:%M:%S
format /^\[(?<time>[^\]]*)\] (?<ip-address>[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*) (?<request-method>\w*) (?<request-url>[^ ]*) (?<format>[^ ]*) (?<request-size>\d*) (?<user-agent>[^ ]*) (?<response-code>\d*) (?<response-duration>\d*)$/
pos_file /tmp/fluentd--1516882649.pos
</source>
mongo插件配置如下:
<match request.*>
@type mongo
host 127.0.0.1
port 27017
user foo
password bar
database my-app
collection requests
capped
capped_size 100m
</match>
任何帮助表示赞赏。谢谢!