【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控

这篇具有很好参考价值的文章主要介绍了【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Skywalking

skywalking是一个apm系统,包含监控,追踪,并拥有故障诊断能力的 分布式系统

一、Skywalking介绍

1.什么是SkyWalking

  Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的产品,它同时吸收了Zipkin /Pinpoint /CAT 的设计思路。特点是:支持多种插件,UI功能较强,支持非侵入式埋点。目前使用厂商最多,版本更新较快。

  数据存储支持:Elasticsearch、MySQL、H2、TiDB。默认是H2,而且是存到内存。实际我们一般将其存到ES。

主页:http://skywalking.apache.org/
下载:https://skywalking.apache.org/downloads/
github:https://github.com/apache/skywalking
文档:https://github.com/apache/skywalking/tree/master/docs
配置:https://github.com/apache/skywalking/tree/master/docs/en/setup/backend

2.APM

  APM全称Application Performance Management应用性能管理,目的是通过各种探针采集数据,收集关键指标,同时搭配数据呈现以实现对应用程序性能管理和故障管理的系统化解决方案.

  Zabbix、Premetheus、open-falcon等监控系统主要关注服务器硬件指标与系统服务运行状态等,而APM系统则更重视程序内部执行过程指标和服务之间链路调用情况的监控,APM更有利于深入代码找到请求响应“慢”的根本问题,与Zabbix之类的监控是互补关系 目前市面上开源的APM系统主要有CAT、Zipkin、Pinpoint、SkyWalking,大都是参考Google的 Dapper实现的.

3.链路追踪工具对比

链路追踪工具一般要有如下功能:

  • 心跳检测(确定应用是否还在运行)
  • 记录请求的执行流程、执行时间
  • 资源监控(CPU、内存、带宽、磁盘)
  • 告警功能(监控执行时间、成功率等通过邮件、钉钉、短信、微信等进行通知)
  • 可视化页面

常用的工具有:

Zipkin
  Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。
Pinpoint
  韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。
SkyWalking
  本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。
CAT
  大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。

各维度对比

对比项 Zipkin Pinpoint SkyWalking Cat
实现方式 拦截请求,发送(Http,MQ)数据到Zipkin服务 Java探针,字节码增强 Java探针,字节码增强 代码埋点(拦截器,注解,过滤器等)
接入方式 基于linkerd或者sleuth方式 javaagent字节码 javaagent字节码 代码侵入
agent到collector协议 http,MQ thrift gRPC http/tcp
OpenTracing 支持 不支持 支持 不支持
颗粒度 接口级 方法级 方法级 代码级
全局调用统计 不支持 支持 支持 支持
traceid查询 支持 不支持 支持 不支持
报警 不支持 支持 支持 支持
JVM监控 不支持 不支持 支持 支持
UI功能 支持 支持 支持 支持
数据存储 ES、MySQL等 HBase ES/H2/MySQL MySQL/HDFS

性能对比图

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

4.SkyWalking的功能特性

  1. 多种监控手段,通过语言探针和Service mesh 获得监控的数据
  2. 支持多种语言自动探针,包括 Java, .NET Core 和 Node.js
  3. 轻量高效,无需大数据平台和大量的服务器资源
  4. 模块化,UI,存储,集群管理都有多种机制可选
  5. 支持报警,告警
  6. 优秀的可视化解决方案

二、SkyWalking环境搭建

1.Skywalking结构

  先来看看Skywalking的结构图

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

说明:

  • Skywalking agent 和业务系统绑定在一起,负责收集各种监控数据
  • Skywalking oapservice负责处理监控数据,比如接受Skywalking agent的监控数据,并且存储在数据库中,接受Skywalking webapp前端的请求,从数据库查询数据,并返回给前端,Skywalking oapservice通常会以集群的方式搭建
  • Skywalking webapp ,UI服务,用于可视化展示数据
  • 用户持久化监控数据的数据库,可以选用ElasticSearch、MySQL等

2.Skywalking部署

  从官网提供的下载地址下载安装文件,我们先通过windows操作来演示下:https://skywalking.apache.org/downloads/

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

点击对应的下载链接下载即可

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

启动服务:

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

启动成功后会启动两个服务,一个是Skywalking-oap-server,一个是Skywalking-web-ui:8080

Skywalking-oap-server服务启动后会暴露11800和12800两个端口,分别为收集监控数据的端口11800和接收前端请求的端口12800,修改端口可以修改config/application.yml

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

默认端口8080,访问效果如下:

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

3.Java Agent

  在新版本中Agent是需要单独下载的。

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

下载后解压出来放在了前面Skywalking的解压目录中

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

三、服务接入

  然后我们就可以把我们的微服务接入到Skywalking中来监控链路的执行。

1.开发环境的配置

  首先来看看在开发环境中的配置,因为Skywalking是无侵入式的。我们只需要在启动的时候 idea中的启动类配置中的 VM options 设置参数配置即可

# skywalking-agent.jar 的路径位置
-javaagent:d:\xxx\skywalking-agent.jar
# 在Skywalking中显示的服务名称
-DSW_AGENT_NAME=xxx-skywalking-service
# Skywalking的collector服务的IP及端口
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=localhost:11800

注意:-DSW_AGENT_COLLECTOR_BACKEND_SERVICES 可以指定远程服务,但是 -javaagent必须是本地的jar包.

2.gateway服务

  然后我们接入gateway的服务。在启动时设置对应的参数

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

启动服务后,我们进入Skywalking的UI服务中查看

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

可以看到有对应的服务信息,但是没有相关的链路信息,主要是因为默认Skywalking中是不支持Gateway的,我们需要显示的添加对应的gateway插件支持

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

从我们下载的agent包中的 optional-plugins中把gateway的jar拷贝的对应的plugins中即可

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

重启服务测试即可

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

3.对接多个服务

  接下来我们就可以把商城系统中的各个服务都对接到Skywalking中,给每个服务添加对应的配置

-Xmx512m
-javaagent:D:\software\apache-skywalking-apm-bin\skywalking-agent\skywalking-agent.jar
-DSW_AGENT_NAME=mall-product
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=localhost:11800

分别启动

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

四、Skywalking持久化

  持久化数据到MySQL中。修改下config/application.yml配置,把原来默认的H2修改为MySQL就可以了。

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

mysql://localhost:3306/swtest?rewriteBatchedStatements=true&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

然后还需要把MySQL的驱动包拷贝到对应的目录中 oap-libs

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

然后重启服务即可,对应的数据库会自动生成表结构

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

五、自定义SkyWalking链路

  在默认情况下Skywalking是没有记录我们的业务方法的,只会追踪到controller层接口,如果需要添加业务方法的链路监控我们就需要添加如下的依赖

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-trace</artifactId>
    <version>8.8.0</version>
</dependency>

然后在业务方法上添加@Trace注解。那么该方法就会被监控

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

重启服务并访问:

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

但是查看这个方法的详情中没有返回信息和参数

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

这时我们可以通过@Tags和@Tag来解决这个问题

@Trace
    @Tags({
            @Tag(key = "getCatelog2JSON",value = "returnedObj"),
            @Tag(key = "param",value = "arg[0]")
    })

key:方法名 value = returnedObj:是指定返回值

arg[0]:参数

重启测试

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控

六、集成日志框架

  将微服务的日志框架去集成SkyWalking,我们希望在我们微服务中日志中,能够记录当前调用链路的id,然后我们再根据这个id去SkyWalking的前端界面中进行搜索找到对应的调用链路记录。

  因为springboot默认实现的日志框架是logback,这里也就拿logback举例,使得调用链路的id可以显示在控制台,每当请求接口时,控制台就会输出对应的id,拿到id就可以在skywalking客户端去检索对应的链路,比较方便快速的找到。

在微服务中导入maven坐标

<!-- skywalking 日志记录  -->
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
    <version>8.5.0</version>
</dependency>

在项目中 resources目录下创建 logback-spring.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level logger_name:%logger{36} - [%tid] - message:%msg%n</pattern>
            </layout>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="console" />
    </root>

</configuration>

在Skywalking UI的日志菜单中显示日志信息,那么就需要再配置文件中再增加一个日志配置信息

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!--  控制台日志输出的格式中添加tid  -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level logger_name:%logger{36} - [%tid] - message:%msg%n</pattern>
            </layout>
        </encoder>
    </appender>

    <!-- skywalking grpc 日志收集 8.4.0版本开始支持 -->
    <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="console" />
        <appender-ref ref="grpc-log" />
    </root>

</configuration>

前面的部署环境是在windows下,一般实际上我们都是安装在linux服务器上通过docker容器安装,那么这里还需要注意下,需要在前面安装下载出来的 skywalking-agent文件下 ->> conf ->> agent.config文件,添加以下的配置信息即可,server_host的ip换成所在的服务器ip即可

plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:127.0.0.1}
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}

【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控,Spring boot,Spring cloud,分布式,微服务,spring cloud,spring boot,Skywalking,链路追踪,监控文章来源地址https://www.toymoban.com/news/detail-712639.html

七、告警信息&信息推送

  • 在skywalking客户端上,有告警栏目,当我们请求接口时长过长时,会显示对应接口信息,而告警规则是在前面安装的 skywalking-apm-bin\config\alarm-settings.yml 配置文件中,默认响应配置了一些告警规则,比如10分钟内有多少次接口请求超过1s那么就会显示告警信息在页面上,提供用户查看
  • 而页面上看之外,我们也还可能将告警信息通知到我们的项目中,可以通过配置网络钩子,使得告警信息可以通过指定的接口请求返回给我们。webhooks:- http://127.0.0.1:8087/notify 地址就是指定的微服务的请求地址,如果有符合告警规则的请求场景,配置了这个网络钩子指定的接口,那么就会去自动发起请求接口,那么我们指定的接口,就可以用Object做参数,接收告警信息,接着在方法中做相关的信息推送比如发送邮件,短信等提醒推送功能

   @RestController
public class Api Controller {
    @PostMapping("/notify")
    public String getCurrentSeckillSessionSkus(@ResponseBody Object obj){
        System.out.println("obj="+ obj);
        return "Skywalking warning notify";
    }

到了这里,关于【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【业务功能篇85】微服务-springcloud-Nginx-反向代理-网关

    Nginx域名 在c:/window/system32/drivers/etc/hosts文件,我们在这个文件中添加 注意如果是没有操作权限,那么点击该文件右击属性,去掉只读属性即可 通过这个域名访问到Nginx服务 nginx.cof是全局配置文件 /mydata/nginx/conf/nginx.cof 文件中最后配置了一个信息 include /etc/nginx/conf.d/*.conf 表示

    2024年02月10日
    浏览(64)
  • 【业务功能篇90】微服务-springcloud-检索服务-ElasticSearch实战运用-DSL语句

      商品检索页面我们放在search服务中处理,首页我们需要在mall-search服务中支持Thymeleaf。添加对应的依赖 然后我们拷贝模板文件到template目录下,然后不要忘记添加Thymeleaf的名称空间 需要把相关的静态资源文件拷贝到Nginx服务中。目录结构是:/mydata/nginx/html/static/search/ 我们

    2024年02月10日
    浏览(56)
  • 【业务功能篇92】微服务-springcloud-多线程-异步处理-异步编排-CompletableFutrue

    一个商品详情页 展示SKU的基本信息 0.5s 展示SKU的图片信息 0.6s 展示SKU的销售信息 1s spu的销售属性 1s 展示规格参数 1.5s spu详情信息 1s   Future是Java 5添加的类,用来描述一个异步计算的结果。你可以使用 isDone 方法检查计算是否完成,或者使用 get 阻塞住调用线程,直到计算

    2024年02月10日
    浏览(57)
  • 【业务功能篇94】微服务-springcloud-springboot-认证服务-注册功能-第三方短信验证API

      结合我们前面介绍的商城的架构我们需要单独的搭建一个认证服务。   首先创建一个SpringBoot项目,然后添加对应的依赖   我们需要把认证服务注册到Nacos中,添加对应的依赖,然后完成对应的配置 放开Nacos注册中心 然后启动测试   然后我们整理登录和注册的相关

    2024年02月09日
    浏览(56)
  • 【业务功能篇99】微服务-springcloud-springboot-电商订单模块-生成订单服务-锁定库存

    一个是需要生成订单信息一个是需要生成订单项信息。具体的核心代码为 锁定库存的操作,需要操作ware仓储服务。 没有库存或者锁定库存失败我们通过自定义的异常抛出 如果下订单操作成功(订单数据和订单项数据)我们就会操作锁库存的行为 锁定库存失败通过抛异常来

    2024年02月09日
    浏览(45)
  • 【业务功能篇84】微服务SpringCloud-ElasticSearch-Kibanan-电商实例应用

    ElasticSearch实现商城系统中全文检索的流程。 商品的映射关系 如上的例子,netsted类型,避免了我们properties属性里的三个字段值同类型,他们的内容不会错乱匹配 参考官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/nested.html 3.1 创建ESModel 点击上架功能传递spuId到后台

    2024年02月10日
    浏览(60)
  • 【业务功能篇93】微服务-springcloud-多线程-异步处理-异步编排-CompletableFutrue-实战运用

      我们可以在商品详细信息查询的位置实现CompletableFuture的异步编排处理。 根据业务分析:3.4.5数据接口的入参信息需要来源于1数据接口的返回信息,也就是skuid 所以可以设计 1 3 4 5 串行线程 ,而 3 4 5依赖1 ,需要等1 执行完成 2接口数据没有关系,所以就与上面的线程是并

    2024年02月10日
    浏览(41)
  • 【业务功能篇82】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-进阶实战

    https://www.elastic.co/guide/en/elasticsearch/reference/7.4/getting-started-search.html 在ElasticSearch中支持两种检索方式 通过使用REST request URL 发送检索参数(uri+检索参数) 通过使用 REST request body 来发送检索参数 (uri+请求体) 第一种方式 GET bank/_search # 检索bank下的所有信息,包括 type 和 docs GET ba

    2024年02月11日
    浏览(42)
  • 【业务功能篇81】微服务SpringCloud-ElasticSearch-Kibanan-docker安装-入门实战

      ES 是一个开源的 高扩展的分布式全文搜索引擎 ,是整个Elastic Stack技术栈的核心。它可以近乎实时的存储,检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。   ElasticSearch的底层是开源库Lucene,但是你没办法直接用Lucene,必须自己写代码去调用

    2024年02月02日
    浏览(48)
  • 【业务功能篇81】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-入门实战

      ES 是一个开源的 高扩展的分布式全文搜索引擎 ,是整个Elastic Stack技术栈的核心。它可以近乎实时的存储,检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。   ElasticSearch的底层是开源库Lucene,但是你没办法直接用Lucene,必须自己写代码去调用

    2024年02月11日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包