背景
Java的日志为多行日志,filebeat每读取一行都会直接收集到ES,这样一条报错日志分成很多条收集到了ES,显然不是想要的效果。
filebeat配置文件
此配置文件表示,以“[”开头一直到下一个“[”开头,这中间的所有日志内容为一行日志。
剔除ecs、log等字段,不收集到ES。
cat > /etc/filebeat/filebeat.yml << 'EOF'
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/elasticsearch/elasticsearch.log
tags: ["ES"]
multiline.pattern: ^\[
multiline.negate: true
multiline.match: after
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: true
processors:
- drop_fields:
fields: ["ecs","log","input"]
output.elasticsearch:
hosts: ["172.16.49.130:9200"]
indices:
- index: "nginx-access-%{[agent.version]}-%{+yyyy.MM}"
when.contains:
fileset.name: "access"
- index: "nginx-error-%{[agent.version]}-%{+yyyy.MM}"
when.contains:
fileset.name: "error"
- index: "ES-log-%{[agent.version]}-%{+yyyy.MM}"
when.contains:
tags: "ES"
setup.ilm.enabled: false
setup.template.enabled: false
EOF
重启filebeat
systemctl restart filebeat
systemctl status filebeat
查看ES数据
故意改错一个ES的配置文件重启,就会产生Java错误日志。或者自己复制出来一些错误日志cat追加到ES日志中。
此时,ES中采集到的日志信息索引名称为自定义的es-log-7.9.1-2024.05。
可以看到,java的多行错误日志变成了一条来存储。
Kibana查看
Kibana中添加此索引,查看java多行日志效果