ElasticSearch+Logstash+Kibana日志管理
一、什么是ELK?
ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。一般情况下我们可以把日志保存在日志文件当中,也可以把日志存入数据库当中。但随着业务量的增加,日志数据量也会不断增加。我们通过ELK可以更好的收集、管理、分析日志。
1.Elasticsearch
是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
2.Logstash
是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
3.Kibana
是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。
3.ElasticHD
ElasticSearch的客户端,可以查看es中的数据信息,下载完成之后,直接运行ElasticHD.exe,运行成功之后如下
访问:http://localhost:9800
这里会记录http://127.0.0.1:9200,es的所有信息
详情
索引列表信息
根据索引查询索引内容,log-2023.07.16是获取springboot中的日志,索引名为日志文件名称
二、收集过程架构图
三、Windows环境下实现ELK的搭建,ElasticSearch+Logstash+Kibana
百度官网下载即可,我这里使用的是7.9.2版本,注意保持版本统一
1.ElasticSearch
下载完成之后,编辑文件elasticsearch.yml
添加如下两行配置信息,更多其它配置信息可询问度娘
作用是:允许ElasticSearch跨域,用于连接ElasticSearch-head跨域失败的问题
http.cors.enabled: true
http.cors.allow-origin: "*"
双击启动es
不报错则访问:http://localhost:9200/,name可根据配置elasticsearch.yml来进行修改
2.Logstash
下载完成之后,创建文件logstash.conf,并编辑,添加如下内容,里面的详情内容可咨询度娘,编辑完之后保存,注意文件的编码格式为utf-8
input {
# stdin { }
tcp {
# host:port就是上面appender中的 destination,
# 这里其实把logstash作为服务,开启9250端口接收logback发出的消息
host => "127.0.0.1" port => 9250 mode => "server" tags => ["tags"] codec => json_lines
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
#index => "boot"
#ES索引名称(自己定义的)
index => "log-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
当调用时,则会创建,log-%{+YYYY.MM.dd}所以,例如:log-2023.07.16
这里若不为utf-8,则启动时会报错
启动logstash,不报错即为启动成功
D:\elasticSearch\logstash-7.9.2\bin> .\logstash.bat -f .\logstash.conf
这里的9250是上面配置文件中,对外提供的端口,可变更成其它的端口号
访问:http://localhost:9600/
3.Kibana
下载完成之后,编辑文件kibana.yml并保存,
这里是Kibana的启动配置信息,kibana.index索引名称,可改成其它
server.port: 5601
server.name: kibana
server.host: 127.0.0.1
elasticsearch.hosts: http://127.0.0.1:9200
kibana.index: .kibana
启动完成之后,则会关联到es中
双击启动Kibana
不报错,启动完成
访问http://127.0.0.1:5601,这里面的其它的选项有待学习
查看console信息,查询数据
ElasticSearch-文档查询
4.springboot项目中使用—日志部分
maven依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.internetitem</groupId>
<artifactId>logback-elasticsearch-appender</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0</version>
</dependency>
创建日志文件-logback-spring.xml,并添加如下,logstash配置信息
这里的127.0.0.1:9250:与logstash.conf对应
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!-- 这是是logstash服务器地址,端口随意,和之后logstash的配置文件保持一致-->
<destination>127.0.0.1:9250</destination>
<!--输出的格式,推荐使用这个-->
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<providers>
<timestamp/>
<version/>
<message/>
<loggerName/>
<threadName/>
<logLevel/>
<callerData/>
</providers>
</encoder>
</appender>
<root level="INFO">
<!-- 需要采集日志到logstash -->
<appender-ref ref="LOGSTASH"/>
</root>
application.properties
logging.level.root=info
logging.config=classpath:logback-spring.xml
运行springboot
则在这里就能够查得到,在代码中记录的日志信息