filebeat.inputs:
- type: log
enabled: true
paths:
- /app/weaver/Resin/log/xxx.log
此段配置日志输入,指定日志存储路径
output.logstash:
The Logstash hosts
hosts: [“172.31.0.207:5044”]
此段配置日志输出,指定Logstash存储路径
- 启动filebeat
./filebeat -e -c filebeat.yml
如果需要静默启动,则使用nohup ./filebeat -e -c filebeat.yml &
命令启动即可
必看视频!获取2024年最新Java开发全套学习资料 备注Java
logstash的配置主要分为三段input
,filter
,output
。
input
用于指定输入,主要是开放端口给Filebeat用于接收日志
filter
用于指定过滤,对日志内容进行解析过滤。
output
用于指定输出,直接配置ES的地址即可
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => [“http://172.31.0.127:9200”]
index => “myindex-%{+YYYY.MM.dd}”
user => “elastic”
password => “xxxxxx”
}
}
我们配置好logstash后通过命令重启logstash
docker-compose -f elk.yml restart logstash
经过上述两步配置后应用程序往日志文件写入日志,filebeat会将日志写入logstash。在kibana查看写入的日志结果如下:
日志显示有2个问题:
-
由于错误日志堆栈信息有多行,在kibana中展示成了多行,数据查看很乱。需要将堆栈异常整理成一行显示。
-
需要对日志进行解析,拆成“时间 日志级别 日志详情”的显示格式。
- 在filebeat中设置合并行
filebeat默认是行传输的,但是我们的日志肯定是多行一个日志,我们要把多行合并到一起就要找到日志的规律。比如我们的日志格式全都是以时间格式开头,所以我们在filebeat中filebeat.inputs
区域添加如下几行配置
以日期作为前缀
multiline.pattern: ^\d{4}-\d{1,2}-\d{1,2}
开启多行合并
multiline.negate: true
合并到上一行之后
multiline.match: after
- 在logstash中设置对日志的解析
将日志解析成“时间 日志级别 日志详情”的展示格式,所以我们需要在logstash配置文件中添加filter段
filter {
grok{
match => {
“message” => “(?\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}),\d{3} %{LOGLEVEL:loglevel} (?.*)”
}
}
}
这里主要是使用grok语法对日志进行解析,通过正则表达式对日志进行过滤。大家可以通过kibana里的grok调试工具进行调试
配置完成后我们重新打开kibana Discover界面查看日志,符合预期,完美!
kibana 乱码
这个主要原因还是客户端日志文件格式有问题,大家可以通过file xxx.log
查看日志文件的编码格式,如果是ISO8859的编码基本都会乱码,我们可以在filebeat配置文件中通过encoding指定日志编码进行传输。
filebeat.inputs:
- type: log
enabled: true
paths:
- /app/weaver/Resin/log/xxx.log
encoding: GB2312
kibana 提取字段出错
如上所示,打开kibana Discover面板时出现此异常,大家只要删除ES中的.kibana_1
索引然后重新访问Kibana即可。
查看周围文件
最后
金三银四马上就到了,希望大家能好好学习一下这些技术点
学习视频:
大厂面试真题:
zb3VyY2UvMjIyNjQ0ODNlNmUwYzY0Y2NmYjEwMDE1Nzg1NjAwNzAucG5n?x-oss-process=image/format,png)
查看周围文件
最后
金三银四马上就到了,希望大家能好好学习一下这些技术点
学习视频:
[外链图片转存中…(img-e8rqLtDh-1716355478123)]
大厂面试真题:
[外链图片转存中…(img-aMeeaN5u-1716355478124)]