文章目录
1. 背景
开启Sleuth以后,我们就可以获取请求的链路日志,但是这些日志都是存储在各个微服务的文件系统上,对查询分析不方便,需要通过ELK来帮我们解决这些事
2. ELK组成
- ElasticSearch:分布式搜索引擎,快速搜索查找
- Logstash:对日志搜集过滤,统一存储
- Kibana:提供web查询页面
3. 日志架构
所有微服务产生的日志放入队列中,Logstash从队列中获取日志进行过滤输出到ElasticSearch中,最后由Kibana做展示

4. 搭建
4.1 统一日志输出
将微服务产生的日志统一输送到队列中,以便后续Logstash来消费,这边使用Redis做队列,因为Logstash的标配就是Redis
4.1.1 pom依赖
<dependency>
<groupId>com.cwbase</groupId>
<artifactId>logback-redis-appender</artifactId>
<version>1.1.5</version>
</dependency>
4.1.2 logback.xml配置
规范化日志输出,与指定存储队列,这边使用redis
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<Target>System.out</Target>
<encoder>
<pattern>[%d{HH:mm:ss}][%t][%p][%c]-%m%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>info</level>
</filter>
</appender>
<appender name="LOGSTASH" class="com.cwbase.logback.RedisAppender">
<source>boot-sleuth</source>
<type>dev</type>
<host>127.0.0.1</host>
<key>logstash:redis</key>
<tags>dev</tags>
<mdc>true</mdc>
<location>true</location>
<callerStackIndex>0</callerStackIndex>
</appender>
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="LOGSTASH"/>
</root>
</configuration>
4.1.3 redis日志查看
127.0.0.1:6379> keys *
1) "logstash:redis"
127.0.0.1:6379> type logstash:redis
list
127.0.0.1:6379> LRANGE logstash:redis 0 1
1) "{\"source\":\"boot-sleuth\",\"host\":\"PC-201808271158\",\"path\":null,\"type\":\"dev\",\"tags\":[\"dev\"],\"message\":\"Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@7d20d0b: startup date [Sat Apr 11 23:38:26 CST 2020]; root of context hierarchy\",\"@timestamp\":\"2020-04-11T23:38:26.802+0800\",\"logger\":\"org.springframework.context.annotation.AnnotationConfigApplicationContext\",\"level\":\"INFO\",\"thread\":\"main\",\"level\":\"INFO\",\"location\":{\"class\":\"org.springframework.context.support.AbstractApplicationContext\",\"method\":\"prepareRefresh\",\"file\":\"AbstractApplicationContext.java\",\"line\":\"588\"}}"
2) "{\"source\":\"boot-sleuth\",\"host\":\"PC-201808271158\",\"path\":null,\"type\":\"dev\",\"tags\":[\"dev\"],\"message\":\"JSR-330 'javax.inject.Inject' annotation found and supported for autowiring\",\"@timestamp\":\"2020-04-11T23:38:27.580+0800\",\"logger\":\"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor\",\"level\":\"INFO\",\"thread\":\"main\",\"level\":\"INFO\",\"location\":{\"class\":\"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor\",\"method\":\"<init>\",\"file\":\"AutowiredAnnotationBeanPostProcessor.java\",\"line\":\"153\"}}"
4.2 ElasticSearch安装
4.2.1 下载路径
4.2.2 配置环境变量
D:\elasticsearch-7.6.2\bin
4.2.3 启动
elasticsearch.bat
4.3 Kibana安装
4.3.1 下载路径
4.3.2 配置环境变量
D:\kibana-7.6.2\bin
4.3.3 启动
kibana.bat
4.4 Logstash安装
4.4.1 下载路径
4.4.2 配置环境变量
D:\logstash-7.6.2\bin
4.4.3 修改配置文件
D:\logstash-7.6.2\config在这个文件新建logstash.conf文件
input {
redis {
data_type => "list" #存储类型
type => "redis-input"
key => "logstash:redis"#key值,后面要与spring boot中key保持一致
host => "127.0.0.1"
port => 6379
threads => 5 #启动线程数量
codec => "json"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "springboot-elk" #index是定义将过滤后的日志推送到Elasticsearch后存储的名字
}
stdout { codec => rubydebug} #是否在控制台打印
}
4.4.4 启动
logstash -f D:\logstash-7.6.2\config\logstash.conf
4.5 Kibana界面配置
- 访问http://localhost:5601
- 在Management页签添加Index Patterns

- 在Discover页签查看日志信息

- 用户可以在这里搜索某个TraceId的日志或者某个SpanId的日志,可以追踪链路
本文介绍如何利用ELK(ElasticSearch、Logstash、Kibana)搭建日志收集、处理和分析系统,实现微服务日志统一管理和链路追踪,提升日志查询效率。
9971

被折叠的 条评论
为什么被折叠?



