ELK日志解决方案
ELK套件日志系统应该是Elasticsearch使用最广泛的场景之一了,Elasticsearch支持海量数据的存储和查询,特别适合日志搜索场景。广泛使用的ELK套件(Elasticsearch、Logstash、Kibana)是日志系统最经典的案例,使用Logstash和Beats组件进行日志收集,Elasticsearch存储和查询应用日志,Kibana提供日志的可视化搜索界面。
安装es和kibana
本文版本为8.5.0
安装es和kibana文档可以参考:
https://blog.csdn.net/weixin_73195042/article/details/135835820
https://blog.csdn.net/weixin_73195042/article/details/135567295
此处es配置密码:elastic/111111
安装Logstash
请注意:Logstash版本必须和es版本一致!这里以8.5.0版本为例。
第一步:拉取镜像
docker pull logstash:8.5.0
第二步:需要提前在linux服务器上环境 /mydata/logstash/logstash.conf,内容如下
mkdir -p /mydata/logstash
json
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 5044
codec => json_lines
}
}
filter{
}
output {
elasticsearch {
hosts => "192.168.200.6:9200"
index => "project-%{+YYYY.MM.dd}"
user => "elastic"
password => "111111"
}
}
第三步:创建容器
纯文本
docker run --name docker_logstash -p 5044:5044 \
--restart=always \
--link docker_elasticsearch:es \
-v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
-d logstash:8.5.0
安装Filebeat
第一步:授权
chmod 777 -R /var/log/messages
第二步:启动日志收集器
text
docker run -d \
--name=filebeat \
--restart=always \
-v filebeat-conf:/usr/share/filebeat \
-v /var/log/messages:/var/log/messages \
--link 1833f6a65c2a:docker_elasticsearch \
elastic/filebeat:7.8.0
1833f6a65c2a: es容器的ID
第三步:修改配置文件:
纯文本
进入到目录:
cd /var/lib/docker/volumes/filebeat-conf/_data
修改配置文件
vim filebeat.yml
内容如下
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/messages
filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
processors:
- add_cloud_metadata: ~
- add_docker_metadata: ~
output.elasticsearch:
hosts: '192.168.200.128:9200'
indices:
- index: "filebeat-%{+yyyy.MM.dd}"
重启filebeat 容器,运行检索模块
效果:以后虚拟机上的所有日志都会收集保存到es中,可以在kibana中进行检索。
Logstash环境问题
-
安装Logstash
-
通过查看Logstash容器日志,401未授权异常 ES8.0后必须有授权许可
-
修改宿主机Logstash配置文件添加授权配置信息即可:/mydata/logstash/logstash.conf。
此处密码应该与es密码一致
jsonuser => "elastic" password => "111111"
-
重启Logstash容器,再查看一下日志,发现没有报错。
项目中整合
-
引入依赖
xml<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>5.1</version> </dependency>
-
日志配置文件
logback-spring.xml
增加,日志Logstash策略xml<!-- logstash日志 --> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <!-- logstash ip和暴露的端口,logback就是通过这个地址把日志发送给logstash --> <destination>192.168.200.6:5044</destination> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" /> </appender> <!-- 开发环境 --> <springProfile name="dev"> <!-- com.atguigu日志记录器:业务程序INFO级别 --> <logger name="com.atguigu" level="INFO" /> <!--<logger name="com.alibaba" level="WARN" />--> <!-- 根日志记录器:INFO级别 --> <root level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="LOGSTASH" /> </root> </springProfile>
-
启动项目测试Java进程启动会将日志发送到Logstash,Logstash会自动将数据存入ES
-
这时候我们启动项目,然后进入es的控制台,输入:
GET /project-2024.01.26/_search { "query": { "term": { "level.keyword": { "value": "WARN" } } } }
这样我们就可以得到服务的日志了。
我们还可以通过一些开源组件让日志可视化的直接展示出来,而不需要我们每次在es中查询。例如: