Spring Cloud

Spring Cloud 系列之 Sleuth 链路追踪(三)

2020-04-29  本文已影响0人  哈喽沃德先生

本篇文章为系列文章,未读前几集的同学请猛戳这里:

本篇文章讲解 Sleuth 如何使用 Elasticsearch、Logstash、Kibana 分析追踪数据。

使用 ELK 分析追踪数据

点击链接观看:ELK 环境准备视频(获取更多请关注公众号「哈喽沃德先生」)

ELK 是 elastic 公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是 Elasticsearch、Logstash 和 Kibana。

环境准备

之前的课程中我们已经学习过 ELK 的详细使用,这里不再过多赘述,直接开启使用即可。

文中使用的 ELK 版本统一为 7.5.2。

Logstash 运行时指定的配置文件 log-to-es.conf 内容如下:

# 数据入口
input {
    tcp {
        mode => "server"
        host => "192.168.10.101"
        port => 9250
    }
}
# 处理数据
filter {
    # 获取 @timestamp 的值并加上 8*60*60(北京时间比 logstash 中@timestamp 晚了 8 小时),然后赋值给变量 timestamp。
    ruby { 
        code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)" 
    }
    # 将 timestamp 值重新赋值给 @timestamp
    ruby {
        code => "event.set('@timestamp', event.get('timestamp'))"
    }
    # 删除变量 timestamp
    mutate {
        remove_field => ["timestamp"]
    }
}
# 数据出口
output {
    elasticsearch {
        hosts => ["192.168.10.101:9200", "192.168.10.102:9200", "192.168.10.103:9200"]
        index => "applog"
    }
}

添加依赖

在需要进行链路追踪的项目中(服务网关、商品服务、订单服务)添加 logstash-logback-encoder 依赖。

<!-- logstash 编码依赖 -->
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>6.3</version>
</dependency>

日志配置

在需要进行链路追踪的项目中(服务网关、商品服务、订单服务)添加 logstash 输出 JSON 格式数据

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
    
    ...

    <!-- 为 Logstash 输出 JSON 格式数据 -->
    <appender name="LOGSTASH_PATTERN" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!-- 数据输出目的地 -->
        <destination>192.168.10.101:9250</destination>
        <!-- 日志输出编码 -->
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <pattern>
                    <pattern>
                        {
                        "severity": "%level",
                        "service": "${springAppName:-}",
                        "trace": "%X{X-B3-TraceId:-}",
                        "span": "%X{X-B3-SpanId:-}",
                        "exportable": "%X{X-Span-Export:-}",
                        "pid": "${PID:-}",
                        "thread": "%thread",
                        "class": "%logger{40}",
                        "rest": "%message"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
    </appender>

    <!-- 日志输出级别及方式 -->
    <root level="DEBUG">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="LOGSTASH_PATTERN"/>
        <appender-ref ref="DEBUG_FILE"/>
        <appender-ref ref="INFO_FILE"/>
        <appender-ref ref="WARN_FILE"/>
        <appender-ref ref="ERROR_FILE"/>
    </root>
    
    ...

</configuration>

查看索引库

重启项目后,访问:http://192.168.10.101:9100 可以看到已经创建好了 applog 索引库。

测试

访问:http://localhost:9000/order-service/order/1 查看索引库结果如下:

访问:http://192.168.10.101:5601/ Kibana 首页。

添加 applog 索引库。

不使用时间过滤器。

搜索 gateway 结果如下:

至此 Sleuth 链路追踪所有的知识点就讲解结束了。

本文采用 知识共享「署名-非商业性使用-禁止演绎 4.0 国际」许可协议

大家可以通过 分类 查看更多关于 Spring Cloud 的文章。

🤗 您的点赞转发是对我最大的支持。

📢 关注公众号 哈喽沃德先生「文档 + 视频」每篇文章都配有专门视频讲解,学习更轻松噢 ~

上一篇 下一篇

猜你喜欢

热点阅读