为什么要用ELK?
ELK实际上是三个工具,Elastricsearch + LogStash + Kibana。一般情况下我们可以把日志保存在日志文件当中,也可以把日志存入数据库当中。但随着业务量的增加,日志数据量也会不断增加。我们通过ELK可以更好的收集、管理、分析日志。
收集过程架构图
1、ElasticSearch
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。它能很方便的使大量数据具有搜索、分析和探索的能力。
本文使用ES版本为elasticsearch-7.6.2。官网下载,安装配置十分简单,可自行百度。
2、Logstash
Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的 “存储库” 中。这边我们的存储库是 Elasticsearch。
本文使用Logstash版本为logstash-7.6.2。
官网下载地址:https://www.elastic.co/cn/downloads/logstash
新建一个配置文件logstash-simple.conf,内容为:
input { stdin { } }
output {
elasticsearch { hosts => ["localhost:9200"] }
stdout { codec => rubydebug }
}
执行启动脚本:
访问测试:http://localhost:9600
注意:在执行启动脚本时可能会报错,我把我遇到的问题列出来
1,找不到或无法加载主类Files
解决方法:去除logstash.bat中"%CLASSPATH%"的引号。是的是去除引号。
2,报编码问题,参数发生错误。 (ArgumentError) invalid byte sequence in US-ASCII
解决方法:logstash安装路径不能有中文。
3,不到或无法加载主类 7.7.0\logstash-core\lib\jars\animal-sniffer-annotations-1.14.jar
解决方法:logstash安装路径不能有空格。
3、Kibana
Kibana 让您能够可视化 Elasticsearch 中的数据并操作 Elastic Stack,因此您可以在这里解开任何疑问:例如,为何会在凌晨 2:00 被传呼,雨水会对季度数据造成怎样的影响。
本文使用kibana-7.6.2-windows-x86_64版本
官网下载:https://www.elastic.co/downloads/kibana
修改Kebana配置文件,让其指向ElasticSearch
双击脚本启动,访问测试:http://localhost:5601
4、整合SpringBoot + Logstash
首先修改logstash的配置并重启。作用是开启logstash服务,接收logback日志。
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"] }
stdout { codec => rubydebug }
}
在maven配置文件中添加依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.2</version>
</dependency>
添加日志框架logback的配置,配置日志输出
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
<contextName>logback</contextName>
<!--日志导出的到 Logstash-->
<appender name="stash"
class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>localhost:9250</destination>
<!-- encoder必须配置,有多种可选 -->
<encoder charset="UTF-8"
class="net.logstash.logback.encoder.LogstashEncoder" >
<!-- "appname":"ye_test" 的作用是指定创建索引的名字时用,并且在生成的文档中会多了这个字段 -->
<customFields>{"appname":"ye_test"}</customFields>
</encoder>
</appender>
<!--日志输出到控制台规则 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d[%level]%c{100}.%M:%L%m%n
</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="stash"/>
</root>
</configuration>
启动springboot项目,并在Kibana中查看日志
参考文章 :https://mp.weixin.qq.com/s/QC7AtZ8xW1z9MrbCtiUEvw