目录
一、环境
1.1 ELKF环境
1.2 版本
1.3 流程
二、Filebeat安装
2.1 安装
2.2 新增配置采集日志
三、logstash 配置
3.1 配置输出日志到es
3.2 Grok 日志格式解析
3.2 启动 logstash
3.3 启动项目查看索引
一、环境
1.1 ELKF环境
- springboot项目:windows本地
- Filebeat:windows本地
- ELK:Ubuntu虚拟机
ELK搭建参考上一篇博客:ELK 7.17.x + Spring Boot:日志分析入门与实践-****博客
1.2 版本
7.17.0(Filebeat 与ELK的版本保持一致)
1.3 流程
Filebeat高效地采集本地项目日志,随后通过Logstash进行深度解析与格式化处理,再将处理后的日志数据上传至Elasticsearch进行高效存储与索引。最终,用户可借助Kibana提供的直观界面,轻松查看并分析这些日志数据。
二、Filebeat安装
2.1 安装
window下载地址:(选择不同版本只用修改版本号即可,官网太卡可能进不去)https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.0-windows-x86_64.zip
解压即可。
linux下载地址:
- wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.0-linux-x86_64.tar.gz
- tar -xzf filebeat-7.17.0-linux-x86_64.tar.gz
2.2 新增配置采集日志
新增 filebeat-test.yml 配置输出到logstash:
如果输出到es,注意配置具有写权限的用户,否则报错401,参考上篇文章
filebeat.inputs:
- type: log
enabled: true
# 配置日志地址
paths:
- D:\soft\logs\*.log
#es的配置
# output:
# elasticsearch:
# hosts: ["192.168.64.128:9200"]
# username: "elastic"
# password: "123456"
# 配置logstash地址
output.logstash:
enabled: true
hosts: ["192.168.64.128:5044"]
#es的配置
# output.elasticsearch.index: "elkf-%{+yyyy.MM.dd}"
# setup.template.name: "elkf"
# setup.template.pattern: "elkf-*"
# setup.ilm.enabled: false
修改 filebeat-test.yml 的运行权限:
注意:住这个命令的作用是从文件 filebeat-test.yml
的权限中移除组(group)和其他用户(others)的写(write)权限,于提高文件的安全性,防止未经授权的修改。不执行可能会报错提示。
chmod go-w filebeat-test.yml
后台启动:
./filebeat -e -c filebeat-test.yml
三、logstash 配置
3.1 配置输出日志到es
新增配置 filebeat-elasticSearch.conf :
注意:"@timestamp"字段不能排除掉,否则索引名日期无法获取
# logstash的地址
input {
beats {
port => 5044
host => "192.168.64.128"
}
}
# 过滤器配置Grok模式解析日志
filter {
grok {
match => {
"message" => "%{TIMESTAMP_ISO8601:timestamp} \| %{LOGLEVEL:loglevel} %{NUMBER:pid} \| %{GREEDYDATA:message_detail}"
}
}
mutate {
# 移除字段
remove_field => ["log","tags", "input", "agent", "host", "ecs", "@version","message"]
}
}
# 配置输出到es中,注意用户
output {
elasticsearch {
hosts => ["http://192.168.64.128:9200"]
user => "logstash_to_es"
password => "123456"
action => "index"
index => "elkf-log2-%{+YYYY.MM.dd}"
}
stdout{
codec => rubydebug
}
}
3.2 Grok 日志格式解析
Grok模式测试可以使用kibana的Grok Debugger:
更简便的方式是问AI :
有些特殊字符用“\”进行转移,空格比较严谨,如果未匹配要检查空格。
问题:这里我的Grok配置一直未生效,后面发现是项目中logback.xml配置了高亮
<property name="PATTERN_DEFAULT"
value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} | %highlight(${LOG_LEVEL_PATTERN:-%5p} ${PID:- }) | %boldYellow(%thread [%tid]) %boldGreen(%-40.40logger{39}) | %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
输出的日志用文本打开是:带有特殊字符
2024-10-29 15:31:39.534 |[34m INFO 34312[0;39m | [1;33mhttp-nio-18080-exec-1 [TID: N/A][0;39m [1;32mc.h.f.a.c.i.ApiAccessLogInterceptor [0;39m | [preHandle][开始请求 URL(/admin-api/test) 无参数]
需要将高亮和颜色去除:
<property name="PATTERN_DEFAULT"
value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} | %5p ${PID:- } | %thread [%tid] %-40.40logger{39} | %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%ex{full}}"/>
3.2 启动 logstash
--config.reload.automatic 自动重载配置
bin/logstash -f /config/conf/filebeat-elasticSearch.conf --config.reload.automatic
3.3 启动项目查看索引
查看logstash日志,项目日志已经解析格式化了
参考:
- Logstash:日志解析的 Grok 模式示例_logstash 日志解析的 grok 模式示例-****博客