暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Sleuth+ELK整合分布式日志收集

燕山雷震子 2021-09-14
769

    之前的更新中,我们简单地聊了一下ELK,即Elasticsearch、Logstash、kibana分别完成日志收集,格式处理及最终可视化展示,昨天的更新我们对sleuth进行了一番讲解,今天让我们来把这些整合起来,完成分布式日志中的链路追踪!


将日志json化输出



    对于日志的记录,相信大家对此深有理解,在一些传统行业中的日志里,可以看到格式繁乱地记录信息,查询日志问题时,我们会迫切的希望要是有格式化的记录那该多么舒服,使用logback可以帮助我们解决这个头疼的问题,通过logback来输出json格式的日志,让logstash将其手机存储至es中,然后在kibana中查看,首先输入json格式数据是首要解决的:


引入logback的依赖:

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

{
    "@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)"
}


结语



    今天的分享就到这里,我是雷记,专注于分享关于开发编程相关的技术干货,如果今日的分享对您有帮助的话,还望不吝关注点赞,这对我很重要!如果各位在开发过程中遇到棘手问题,可以扫描下图二维码加群一起探讨解决,让我们努力让每一个问题都得到解决!

    

更多推荐
将hystrix整合至spring cloud feign实现容错处理
feign的契约设置与继承特性
玩转Spring Cloud Feign自定义
文章转载自燕山雷震子,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论