全链路追踪 & 性能监控工具 SkyWalking 实战

Skywalking介绍

Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持 Java、.Net、NodeJs等探针,数据存储支持Mysql、Elasticsearch等,跟Pinpoint一样采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但性能表现优秀,且对云原生支持,目前增长势头强劲,社区活跃

使用版本

当前使用版本信息为: apache-skywalking-apm-es7-8.7.0

数据存储方式

Skywalking默认使用的是 H2,本次实战主要使用的 ElasticSearch来存储相对应的链路数据。 Skywalking本身还支持 mysql、tidb、influxdb、postgresql等数据存储方式

Skywalking的安装以及使用

安装及运行(本次安装主要是在windows)

  1. 下载对应的二进制软件包 (apache-skywalking-apm-es7-8.7.0.tar),并且解压到指定的文件夹下面
  2. 涉及到的主要目录为: bin(存放对应的命令)、config(相关的配置文件)、agent(代理jar包)
  3. 进入bin目录直接执行目录下对应的 startup.bat即可运行 Skywalking,默认是运行在8080端口;启动成功后即可在浏览器输入地址即可访问: 127.0.0.1:8080。运行界面如图所示:
  4. 首次访问没有上图相关的图示数据,因为还未对项目进行代理做数据采集

运行 SpringBoot 项目,并对其进行监控

运行其要进行监控的项目,增加代理参数,代理参数如下:

java -jar -javaagent:H:\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar -DSW_AGENT_NAME=demo -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800

启动完项目后,就可以在SkyWalking看到该项目对应的访问数据以及对应的拓扑图

全链路追踪 & 性能监控工具 SkyWalking 实战
全链路追踪 & 性能监控工具 SkyWalking 实战
全链路追踪 & 性能监控工具 SkyWalking 实战

采集数据持久化

  1. Skywalking默认是通过H2对采集数据进行存取的,并且没有做相对应的持久化,相关配置在 config文件夹中 application.xml文件中的121行: selector: ${SW_STORAGE:H2}。为了方便以及做持久化本实战主要将数据存放在 ElasticSearch
  2. 修改数据存取方式为 elasticsearch7,只需要将selector修改为对应的elasticsearch7即可: selector: ${SW_STORAGE:elasticsearch7}
  3. 配置elasticsearch:
nameSpace: ${SW_NAMESPACE:"elasticsearch"} //一定为要和elasticsearch中的cluster_name相对应
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
  1. 重启SkyWalking之后,后期采集数据就存放在了ElasticSearch中了 注:在使用elasticsearch时需要注意其版本号,负责SkyWalking Collect将启动失败,本实战其对应的版本为7.2.0

加入日志采集

1、引入日志采集相关的jar包:


    org.apache.skywalking
    apm-toolkit-trace
    8.10.0

    org.apache.skywalking
    apm-toolkit-logback-1.x
    8.5.0

2、在项目resource目录下新建 logback.xml文件


            %-15(%d{HH:mm:ss.SSS}) %msg%n

        ${logData}/logDataDemo.log

            ${logData}/%d{yyyy-MM-dd}/${appName}-info.%d{yyyy-MM-dd}.%i.log
            1MB
            30

                %-15(%d{yyyy-MM-dd HH:mm:ss} [info]) %msg%n

            UTF-8

            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

3、重新启动对应的SpringBoot项目,然后访问对应的路径即可收集到相关的数据

全链路追踪 & 性能监控工具 SkyWalking 实战

也可以在其追踪数据中查看起对应的日志

全链路追踪 & 性能监控工具 SkyWalking 实战
全链路追踪 & 性能监控工具 SkyWalking 实战

对某个接口/端点增加性能剖析,从而找出系统瓶颈

1、增加对应的端点对应进行性能剖析(故意对log/test2方法中 sleep 4秒)

@GetMapping("/test2")
public Result>> test2() throws InterruptedException {
    final ArrayList> maps = new ArrayList<>();
    Thread.sleep(4000);
    maps.add(new HashMap() {{
        put("name","张三");
        put("age",12);
    }});
    maps.add(new HashMap() {{
        put("name","李四");
        put("age",32);
    }});
    return Result.success(maps);

}

全链路追踪 & 性能监控工具 SkyWalking 实战

2、访问起对应的地址(http://127.0.0.1:8802/demo/log/test2?name=1&age=12&sex=1),在收集期间,尽量多访问几次,访问次数少有可能无法采集到

3、查看相应的分析报告,从而找出具体瓶颈

点击分析就会出现如下图所示信息

全链路追踪 & 性能监控工具 SkyWalking 实战

全链路追踪 & 性能监控工具 SkyWalking 实战

通过分析可以看出耗时的主要控制器和方法,以及对应的行号

全链路追踪 & 性能监控工具 SkyWalking 实战
全链路追踪 & 性能监控工具 SkyWalking 实战

全链路栗子

1、上述实例中并未涉及到对应的数据库和redis以及其他的服务交互,所以在拓扑图中看到的数据是非常单一的

2、如果在应用中有数据库、redis以及其他服务的调用在起拓扑图中会清晰的看到具体的调用关系,实例如下图:

全链路追踪 & 性能监控工具 SkyWalking 实战

3、当其中一个服务不可用时,其拓扑图会标识某个业务为不健康的(红色),下图是因为手动关闭了redis的服务

全链路追踪 & 性能监控工具 SkyWalking 实战

4、接口请求异常会在相对应的追踪页面看到红色标注的信息,通过点击查看日志可以看到报错信息

全链路追踪 & 性能监控工具 SkyWalking 实战

全链路追踪 & 性能监控工具 SkyWalking 实战

Original: https://www.cnblogs.com/tm2015/p/16363491.html
Author: 铁猛
Title: 全链路追踪 & 性能监控工具 SkyWalking 实战

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/589371/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【Unity Shader学习笔记】Unity光照-阴影

    1、原理 由一个物体向其他物体投射阴影,以及一个物体如何接收其他物体的阴影。 实时渲染中经常使用 Shadow Map 技术。它会首先把摄像机的位置放在与光源重合的位置上, 那么场…

    Java 2023年6月9日
    077
  • centos使用openssl生成自签名SSL证书并配置到nginx

    检查OpenSSL 检查是否已经安装openssl: 一般在CentOS7上,openssl已经默认安装好了。 生成自签名的SSL证书和私钥 新建/etc/ssl/certs/ww…

    Java 2023年5月30日
    0146
  • oracle创建索引

    数据库索引是为了提高查询速度的一种数据结构。 索引的创建语句 CREATE INDEX 索引名 ON 表名(列名);1除了单列索引,还可以创建包含多个列的复合索引。 CREATE …

    Java 2023年5月29日
    068
  • java的collection类

    collection来源于java.util包。 Collection 接口常用的方法size():返回集合中元素的个数add(Object obj):向集合中添加一个元素addA…

    Java 2023年6月9日
    061
  • VMware虚拟机 NAT模式 配置静态ip

    前言:Ubuntu 16.04 VMware虚拟机 NAT模式 配置静态ip,这个问题困扰我好长时间,桥接的静态ip我会了,然而用NAT 的方式配置集群会更好。(NAT 方式客户机…

    Java 2023年5月30日
    0109
  • 【Linux】Linux常用命令记录

    记录一下平时在Linux服务器常用的命令 1.基础类命令 .. #&#x8868;&#x793A;&#x4E0A;&#x4E00;&#x5C…

    Java 2023年6月8日
    069
  • 开源框架是如何使用设计模式的-MyBatis缓存机制之装饰者模式

    写在前面 聊一聊MyBatis是如何使用装饰者模式的,顺便回顾下缓存的相关知识,可以看看右侧目录一览内容概述。 装饰者模式 这里就不聊它的概念了,总结下就是套娃。利用组合的方式将装…

    Java 2023年6月6日
    098
  • 用redis和jpa实现缓存文章和点击量-SpringBoot(23)

    实现缓存文章 1.1 实体类 package com.intehel.demo.domain; import lombok.AllArgsConstructor; import l…

    Java 2023年6月13日
    069
  • 在vue中使用echarts

    1.引入echarts 先通过npm安装echarts npm run echarts–save 2.在main.js中 import * as echarts fro…

    Java 2023年6月7日
    072
  • MyBatis-Plus使用SQL语句

    项目中碰到一个必须要使用动态SQL的地方, 想着在xml文件中进行一层一层的判断太麻烦了,也不好理解,要是能在Java代码中组织好SQL,进行查询操作 QueryWrapper&l…

    Java 2023年6月15日
    066
  • 如何痛快地写一篇博客

    如何痛快地写一篇博客 当各位踏入咱们的科技领域时,一定也有想写一篇博客的想法吧。可能在博客园,也可能在自建网站。但是,写博客要用markdown,不同于word,它的图片功能全部需…

    Java 2023年6月9日
    069
  • (解决)IntelliJ IDEA 中 Error:java: 无效的源发行版: 9

    (解决)IntelliJ IDEA 中 Error:java: 无效的源发行版: 9 (解决)IntelliJ IDEA 中 Error:java: 无效的源发行版: 9 &#82…

    Java 2023年6月9日
    082
  • 23.线程锁的使用

    不合理的设定临界区域,会让线程的调用失去意义。 1.不应该频繁的使用锁 2.减小锁使用的区域,线程公共资源之外 的资源 尽量不要放到临界区。 示例二:(不用线程) 示例三:(使用线…

    Java 2023年5月29日
    0114
  • Java项目中的下载 与 上传

    使用超级链接下载,一般会在浏览器中直接打开,而不是出现下载框 如果要确保出现下载框下载文件,则需要设置response中的参数: 1是要设置用附件的方式下载 Content-Dis…

    Java 2023年5月29日
    066
  • 从服务间的一次调用分析整个springcloud的调用过程(二)

    先看示例代码 @RestController @RequestMapping("/students") public class StudentControll…

    Java 2023年6月7日
    069
  • 权限管理系统之SpringBoot集成LayUI实现后台管理首页

    万事开头难,昨天一直在构思用户权限管理系统怎么实现,实现哪些需求,采用什么技术等,也在网上百度了好多,计划使用SpringBoot + Mybatis + thymeleaf + …

    Java 2023年5月30日
    0147
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球