Spring Cloud下分布式服务搭建进阶(其四)

2周前发布 gsjqwyl
11 0 0

文章标题:

Spring Cloud下分布式服务搭建进阶(其四)

文章内容:

在这里插入图片描述

第四部分:借助nacos构建分布式项目之分布式系统日志(skywalking+es)
项目所需工具包含 maven + nacos + java8 + idea + git + mysql + redis + skywalking + es
本篇主要围绕客户下单时扣减库存这一操作,模拟出链路日志相关内容,涉及网关系统、用户系统、商品系统、订单系统

基于nacos构建分布式项目之分布式系统日志链路

  • 场景
  • 选用skywalking的缘由
    • skywalking
    • apache-skywalking-apm
    • apache-skywalking-java-agent
    • 版本建议
    • 启动成功界面
    • 展示几张部署后的图
    • 接着安装部署es+ kibana
    • 项目中需添加的内容
    • 项目启动

场景

当项目以分布式方式部署后,各个系统的日志会分散在不同系统内部,此时排查线上问题会十分不便,尤其是业务量大的场景下,日志更是难以找寻。如何将同一请求链路的日志关联起来呢?例如下单操作,进入网关后需查询用户信息,确认用户信息无误后,查看商品库存是否可用,之后进行下单,这一操作涉及四个系统的调用,排查问题难度极大。这时候可以引入一个唯一id来标识同一链路,链路id从进入网关时开始创建,通过HTTP头、RPC协议等在服务间传递,将其存储在数据库服务中,便可以通过唯一id进行查询。

选用skywalking的缘由

博主所在公司原本的方案是通过队列将链路日志写入es,然后自行搭建一套日志系统来查询es,通过响应时间来分析性能。但博主在网上查阅资料后发现,skywalking结合es也有其优势,并且skywalking默认支持性能监控等功能,易用性较好。

skywalking

SkyWalking是一款开源的应用性能监控(APM,即Application Performance Management)与分布式追踪系统,专为微服务、云原生以及容器化架构所设计。它由Apache软件基金会孵化并成为顶级项目,主要用于协助开发者监控、诊断分布式系统的性能问题。
SkyWalking通过Java Agent在运行时动态注入追踪代码,实现自动记录。这是不是感觉和aop有点类似,但它比aop更强大,aop仅对Spring容器管理的Bean起作用,而Agent是在类加载时修改字节码文件,能够对项目中的所有类进行监控和增强。
核心插件如下所示,8.9.0版本的Agent和apm是分开的。

在这里插入图片描述

apache-skywalking-apm

该插件是SkyWalking的核心后端服务(Observability Analysis Platform,即OAP),负责接收、分析以及存储来自各类探针(Agent)的监控数据。
下载后执行目录下的/bin/startup.sh,如果启动后无法访问http://127.0.0.1:8080/进入控制台,查看日志信息即可,通常排查起来比较简单。博主之前是因为版本选择问题查看logs里的文件才排查出来的。

apache-skywalking-java-agent

此插件是Java应用的探针(Agent),通过字节码增强技术无侵入式地收集应用性能数据。
依赖于skywalking-apm(OAP服务)来接收和存储数据,自身不处理或展示数据。
下载后需修改目录下/config/agent.config里的

agent.service_name=my-service
collector.backend_service=127.0.0.1:11800

版本建议

由于SkyWalking的使用资料相对较少,java8建议使用这个版本,8.9.0往上就不支持java8了。

https://archive.apache.org/dist/skywalking/8.9.0/apache-skywalking-apm-8.9.0.tar.gz

https://archive.apache.org/dist/skywalking/java-agent/8.9.0/apache-skywalking-java-agent-8.9.0.tgz

启动成功界面

在这里插入图片描述

展示几张部署后的图

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

接着安装部署es+ kibana

java8建议使用6.8.23版本的,超过该版本则不支持。

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.23.tar.gz

https://www.elastic.co/downloads/past-releases#kibana

之后在skywalking目录下的config/application.yml中将storage.selector设置为elasticsearch即可。默认端口是9200。
配置完成后重新启动SkyWalking。

项目中需添加的内容

pom版本

        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-logback-1.x</artifactId>
            <version>8.9.0</version>
        </dependency>

        <!-- SkyWalking Agent(可选,推荐通过启动参数指定) -->
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-trace</artifactId>
            <version>8.9.0</version>
        </dependency>

在/resources目录下添加logback-spring.xml

<configuration>
    <!-- 注册自定义 Converter -->
    <conversionRule conversionWord="tid" converterClass="org.apache.skywalking.apm.toolkit.log.logback.v1.x.LogbackPatternConverter" />

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- 使用 %tid 直接引用 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="GRPC_LOG" />
    </root>
</configuration>

项目启动

通过命令行启动

java -javaagent:你的地址/skywalking-agent/skywalking-agent.jar \
     -Dskywalking.agent.service_name=goods-service \
     -Dskywalking.collector.backend_service=localhost:11800 \
     -jar target/你的包.jar

观察控制台会自动将日志写入es,通过kibana页面进行检索。

结尾

第一篇快速部署一套分布式服务

第二篇 基于nacos搭建分布式项目
网关

第三篇 搭建分布式项目
分布式事务(分布式锁+事务)

希望本文能对你有所帮助。

© 版权声明

相关文章

暂无评论

暂无评论...