ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

54 Spring Cloud Sleuth与ELK(日志分析系统)配合使用

2021-02-24 14:04:04  阅读:213  来源: 互联网

标签:ELK 收集 Sleuth 54 Json 41b5a575c26eeea1 日志 logback Logstash


在《Spring Cloud使用Sleuth在应用中进行日志跟踪》教程中的案例,我们已经实现了服务调用之间的链路追踪,但是这些日志是分散在各个机器上的,就算出现问题了,我们想快速定位,也得从各个机器把日志整合起来,再去查问题。

这个时候就需要引入日志分析系统了,比如 ELK,可以将多台服务器上的日志信息统一收集起来,在出问题的时候我们可以轻松根据 traceId 来搜索出对应的请求链路信息。

LK 简介

ELK 由三个组件组成:

  • Elasticsearch 是个开源分布式搜索引擎,它的特点有分布式、零配置、自动发现、索引自动分片、索引副本机制、restful 风格接口、多数据源、自动搜索负载等。
  • Logstash 是一个完全开源的工具,它可以对日志进行收集、分析并存储以供以后使用。
  • kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供日志分析友好的 Web 界面,可以汇总、分析和搜索重要数据日志。

输出 JSON 格式日志

可以通过 logback 来输出 Json 格式的日志,让 Logstash 收集存储到 Elasticsearch 中,然后在 kibana 中查看。想要输入 Json 格式的数据需要加一个依赖,具体代码如下所示。

<!-- 输出 Json 格式日志 -->
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>5.2</version>
</dependency>

然后创建一个 logback-spring.xml 文件。配置 logstash 需要收集的数据格式如下:  

<!-- Appender to log to file in a JSON format -->
<appender name="logstash"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_FILE}.json</file>
    <rollingPolicy
        class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_FILE}.json.%d{yyyy-MM-dd}.gz</fileNamePattern>
        <maxHistory>7</maxHistory>
    </rollingPolicy>
    <encoder
        class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <providers>
            <timestamp>
                <timeZone>UTC</timeZone>
            </timestamp>
            <pattern>
                <pattern>
                    {
                    "severity": "%level",
                    "service": "${springAppName:-}",
                    "trace": "%X{X-B3-TraceId:-}",
                    "span": "%X{X-B3-SpanId:-}",
                    "parent": "%X{X-B3-ParentSpanId:-}",
                    "exportable":
                    "%X{X-Span-Export:-}",
                    "pid": "${PID:-}",
                    "thread": "%thread",
                    "class": "%logger{40}",
                    "rest": "%message"
                    }
                </pattern>
            </pattern>
        </providers>
    </encoder>
</appender>

集成好后就能在输出的日志目录中看到有一个以“.json”结尾的日志文件了,里面的数据格式是 Json 形式的,可以直接通过 Logstash 进行收集。  

{
    "@timestamp": "2019-11-30T01:48:32.221+00:00",
    "severity": "DEBUG",
    "service": "fsh-substitution",
    "trace": "41b5a575c26eeea1",
    "span": "41b5a575c26eeea1",
    "parent": "41b5a575c26eeea1",
    "exportable": "false",
    "pid": "12024",
    "thread": "hystrix-fsh-house-10",
    "class": "c.f.a.client.fsh.house.HouseRemoteClient",
    "rest": "[HouseRemoteClient#hosueInfo] <--- END HTTP (796-byte body)"
}

日志收集存入 ElasticSearch 之后,就可以用 Kibana 进行展示。需要排查某个请求的问题时,直接根据 traceid 搜索,就可以把整个请求链路相关的日志信息查询出来。  

标签:ELK,收集,Sleuth,54,Json,41b5a575c26eeea1,日志,logback,Logstash
来源: https://www.cnblogs.com/jrkl/p/14441041.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有