前言
如果日志格式不是标准的Json格式,那么该如何收集呢?
例如收集Nginx的error错误日志。
方法一
第一种方法,通过日志的字段来区分,分别收集。
简单来说,就是Nginx的access和error两个日志分别收集,然后通过共同的字段日志的path来做区分。
filebeat配置
filebeat配置文件如下
cat > /etc/filebeat/filebeat.yml << 'EOF'
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
json.keys_under_root: true
json.overwrite_keys: true
- type: log
enabled: true
paths:
- /var/log/nginx/error.log
output.elasticsearch:
hosts: ["172.16.49.130:9200"]
indices:
- index: "nginx-access-%{[agent.version]}-%{+yyyy.MM}"
when.contains:
log.file.path: "/var/log/nginx/access.log"
- index: "nginx-error-%{[agent.version]}-%{+yyyy.MM}"
when.contains:
log.file.path: "/var/log/nginx/error.log"
setup.ilm.enabled: false
setup.template.enabled: false
EOF
重启filebeat
systemctl restart filebeat
systemctl status filebeat
查看ES数据
此时,es的数据已经正常分开显示了。
方法二(推荐)
第二种方法通过标签来区分。
如果按照字段区分的话,还需要关注存到es里有哪些字段,比较繁琐。通过标签,可以自定义标签存入es,很方便。
filebeat配置
cat > /etc/filebeat/filebeat.yml << 'EOF'
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
json.keys_under_root: true
json.overwrite_keys: true
tags: ["access"]
- type: log
enabled: true
paths:
- /var/log/nginx/error.log
tags: ["error"]
output.elasticsearch:
hosts: ["172.16.49.130:9200"]
indices:
- index: "nginx-access-%{[agent.version]}-%{+yyyy.MM}"
when.contains:
tags: "access"
- index: "nginx-error-%{[agent.version]}-%{+yyyy.MM}"
when.contains:
tags: "error"
setup.ilm.enabled: false
setup.template.enabled: false
EOF
重启filebeat
systemctl restart filebeat
systemctl status filebeat
查看ES数据
此时,es的数据已经也正常分开显示了。