Filebeat
Filebeat
配置文件:
filebeat.inputs:
- type: log
enabled: true
#要收集的日志文件路劲
paths: /home/study/ElasticStack/filebeat-7.15.2/logs/filebeat.log
#添加字段
fields:
log_topic: log_topic
fields_under_root: true #为true,则新增的fields成为顶级目录,而不是在fields目录下
#排除符合正则表达式的行
#exclude_lines: ['^DBG']
#include_lines: ['^ERR', '^WARN']
#排除符合正则表达式的文件
#exclude_files: ['.gz$']
- tail_files: true #设置为true,表示从文件尾部开始收集,不会重新从文件头部开始。
#输出到kafka
output.kafka:
enable: true
hosts: ["localhost:9092"]
topic: "%{[log_topic]}" #若fields_under_root: false ,则改为 "%{[fields][log_topic]}"
codec.json:
pretty: false
partition.round_robin:
reachable_only: false
required_ack: 1
compression: gzip
max_message_bytes: 1000000 #一个日志事件最大字节数
其余保持默认配置。
Logstash
请记住一个原则:Logstash 配置一定要有一个 input
和一个 output
。
logstash
配置文件
#input {
#beats {
#port => 5044
#}
#}
#从kafka中读取数据
input { #数据源端
kafka{
bootstrap_servers => ["127.0.0.1:9092"] #kafka集群地址
topics => ["log_topic"] #要读取那些kafka topics
codec => "json" #处理json格式的数据
auto_offset_reset => "latest" #只消费最新的kafka数据
}
}
filter {
grok {
match => {
#规定日志格式
"message" => "%{TIMESTAMP_ISO8601:logdate} \[%{NUMBER:threadId}\] %{LOGLEVEL:level}"
}
}
mutate{
#移除不需要的字段
remove_field => ["host"]
remove_field => ["agent"]
remove_field => ["ecs"]
remove_field => ["tags"]
remove_field => ["fields"]
remove_field => ["@version"]
remove_field => ["input"]
remove_field => ["_score"]
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "log-%{+YYYY.MM.dd}" #索引名,没有则创建
#ilm_rollover_alias => "%{[@metadata][beat]-%{[@metadata][version]}-%{+YYYY.MM.dd}"
#ilm_policy => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
#pipeline => "%{[@metadata][pipeline]}"
#user => "elastic"
#password => "changeme"
}
}
#output {
# stdout {
# codec => rubydebug # 将日志输出到当前的终端上显示
# }
#}