0082-整合ELK统一存储与查询

本文介绍如何利用ELK(ElasticSearch、Logstash、Kibana)搭建日志收集、处理和分析系统,实现微服务日志统一管理和链路追踪,提升日志查询效率。

1. 背景

开启Sleuth以后,我们就可以获取请求的链路日志,但是这些日志都是存储在各个微服务的文件系统上,对查询分析不方便,需要通过ELK来帮我们解决这些事

2. ELK组成

  1. ElasticSearch:分布式搜索引擎,快速搜索查找
  2. Logstash:对日志搜集过滤,统一存储
  3. 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安装

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界面配置
  1. 访问http://localhost:5601
  2. 在Management页签添加Index Patterns
    在这里插入图片描述
  3. 在Discover页签查看日志信息
    在这里插入图片描述
  4. 用户可以在这里搜索某个TraceId的日志或者某个SpanId的日志,可以追踪链路
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值