Filebeat 实时收集 Nginx 日志
说明
- Filebeat 版本为 5.3.0
之所以使用 beats 家族的 Filebeat 来替代 Logstash 是因为 Logstash 实在太消耗资源了(服务器资源充足的土豪请无视)
在官网下载 Logstash 有 89M,而 Filebeat 才8.4M,由此可见一斑
Logstash 可以配置 jvm 参数,经过我本身的调试,内存分配小了,启动很慢有时根本起不来,分配大了,其他服务就没有资源了
所有说对于配置低的服务器,选择 Filebeat 是最好的选择了,而且现在 Filebeat 已经开始替代 Logstash 了 - 依然需要修改 nginx 的日志格式
nginx.config
更改日志记录的格式
1 | log_format json '{ "@timestamp": "$time_iso8601", ' |
filebeat.yml
1 | #=========================== Filebeat prospectors ============================= |
这里面需要注意的是
json.keys_under_root: 默认这个值是FALSE的,也就是我们的json日志解析后会被放在json键上。设为TRUE,所有的keys就会被放到根节点
json.overwrite_keys: 是否要覆盖原有的key,这是关键配置,将keys_under_root设为TRUE后,再将overwrite_keys也设为TRUE,就能把filebeat默认的key值给覆盖了
还有其他的配置
json.add_error_key:添加json_error key键记录json解析失败错误
json.message_key:指定json日志解析后放到哪个key上,默认是json,你也可以指定为log等。
说白了,差别就是,未配置前elasticsearch的数据是这样的:
1 | { |
配置后,是这样的:
1 | { |
这样看起来就很舒服了
启动 FileBeat
进入 Filebeat 目录
1 | nohup sudo ./filebeat -e -c filebeat.yml >/dev/null 2>&1 & |
更新
nginx 的日志里含有中文的话,会将中文转为 Unicode 编码,如果不转的话,加入 escape=json
参数就可以了
1 | log_format json escape=json '{ "@timestamp": "$time_iso8601", ' |