我正在使用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读到:
[警告]:#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>
感谢任何帮助。谢谢!
答案 0 :(得分:2)
我正在使用Fluentd将Nginx日志传递给MongoDB,但我使用Nginx的配置文件创建了自定义日志格式。我让Nginx以json格式编写日志,这对我来说更容易处理。我认为使用Fluentd时这是一种更好的方法。 如果您可以将日志格式更改为json,也许可以尝试以下设置:
<source>
@type tail
path /path/json/server_nginx.access.log.json #...or where you placed your Apache access log
pos_file /path2/server_nginx.access.log.json.pos # This is where you record file position
tag nginx.access #fluentd tag!
format json
</source>
<match **>
@type mongo
database logs #(required)
collection foo #(optional; default="untagged")
host ***.***.***.*** #(optional; default="localhost")
port 27017 #(optional; default=27017)
user notmyrealusername
password notmyrealpassword
</match>
我不确定您的应用是否与nginx相关,但这些是我的nginx日志格式设置:
log_format logstash_json '{ "@timestamp": "$time_iso8601", '
'"@fields": { '
'"remote_addr": "$remote_addr", '
'"request_time": "$request_time", '
'"request": "$request", '
'"http_referrer": "$http_referer", '
'"http_host": "$host", '
'"http_user_agent": "$http_user_agent" } }';