kafka-boot集成 ELK
在使用 filebeat 收集日志到 ELK 时, 消息中有很多不需要的字段,这里需要去掉:
{
"@timestamp": "2022 - 04 - 30 T07: 54: 24.132 ",
"message": {
"@timestamp": "2022-04-30T03:42:44.156Z",
"@metadata": {
"beat": "filebeat",
"type": "_doc",
"version": "7.12.1"
},
"agent": {
"ephemeral_id": "fc7259a7-7b4f-400b-aa72-f6041f118336",
"id": "f6c3697d-6b9b-4ec4-9f1f-0b1ee0c194bc",
"name": "c49f93715899",
"type": "filebeat",
"version": "7.12.1",
"hostname": "c49f93715899"
},
"message": "我是中国人",
"log": {
"offset": 18,
"file": {
"path": "/var/www/log/a.log"
}
},
"input": {
"type": "log"
},
"ecs": {
"version": "1.8.0"
},
"host": {
"name": "c49f93715899"
}
}
}
目的
提取 meaage 属性 的 json 值,删除 agent, log, input...
等等无用字段, 可以通过 logstash 对 filebeat 传过来的值进行过滤修改
- filebeat 增加 serverName 属性, 注意 service.name 填加的是 service:{ name: ‘xxx’} 这样的对象
- logstash 删除无用字段
案例
首先 要有 ELK+Filebeat+ kafka 环境
配置 Filebeat.yml 文件
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/www/log/boot-elk-log/*.log
fields: #添加自定义字段
serviceName: boot-elk-log
fields_under_root: true #true为添加到根节点,false为添加到子节点中
output.kafka:
hosts: ["192.168.1.17:9092"]
topic: 'kafka_elk_log'
partition.round_robin:
reachable_only: false
compression: gzip
max_message_bytes: 1000000
这里为根对象增加 一个 serviceName
属性
logstash.conf 配置
input {
# 从 kafka 消费
kafka {
bootstrap_servers => ["192.168.1.17:9092"]
group_id => "kafka_elk_group"
topics => ["kafka_elk_log"]
auto_offset_reset => "earliest"
codec => "plain"
}
}
filter{
json {
## 取出 message 属性,格式化成 json , 删除不需要的属性
source => "message"
remove_field => ["host","agent","ecs","@version","@metadata","log","input"] #移除字段,不需要采集
}
# 这里是删除以根对象底下的属性
# mutate{
# remove_field => ["host"]
# remove_field => ["agent"]
# remove_field => ["ecs"]
# remove_field => ["tags"]
# remove_field => ["@version"]
# remove_field => ["@timestamp"]
# remove_field => ["input"]
# remove_field => ["log"]
# }
}
output {
# 输出到 elasticsearch
elasticsearch {
hosts => "192.168.1.17:9200"
index => "kafka_elk_log‐%{+YYYY.MM.dd}"
codec => "plain"
}
# 输出到控制台
stdout { codec => rubydebug }
}
结果
看 logstash 输出日志
{
"serviceName": "boot-elk-log",
"@timestamp": "2022 - 04 - 30 T08: 02: 23.254 Z",
"message": ">>> BootElkLogApplication log 王五 - 2022-04-30T16:02:22.001173180"
}
再看看 kibana 显示页面: