全链路追踪 & 性能监控工具 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)

大家都在看

  • 面试记录

    JVM线程属于用户态还是内核态 当进程运行在ring3级别时为用户态,ring0级别时为内核态 有些操作需要有内核权限才能进行,那么有三种由用户态切换到内核态的情况: 系统调用:操…

    Java 2023年6月8日
    089
  • springboot系列十三、springboot集成swaggerUI

    一、Swagger介绍 Swagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原因: Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速…

    Java 2023年5月30日
    082
  • CI/CD和 DevOps还在傻傻分不清吗?今日一文让你通透

    基本概念 持续集成 (Continuous Intergration) ​ 持续集成的重点在于构建编译及测试,开发人员每天要提交很多次代码到分支,在分支合并到主干前,需要通过编译和…

    Java 2023年6月15日
    074
  • Lua:Nginx Lua环境配置,第一个Nginx Lua代码

    一、编译安装LuaJIT Lua:编译安装LuaJIT,第一个Lua程序 http://blog.csdn.net/guowenyan001/article/details/482…

    Java 2023年5月30日
    067
  • 浏览器上写代码,4核8G微软服务器免费用,Codespaces真香

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 一图胜千言 先上图,下面是欣宸在自…

    Java 2023年6月8日
    089
  • Docker安装容器示例

    1.以mysql为例 ,搜索镜像 2.下载镜像 3.查看已经安装的镜像 4.删除镜像 二、容器操作 软件镜像——运行镜像——产生一个容器(正在运行的软件) 1.运行创建镜像,有了镜…

    Java 2023年6月13日
    076
  • Spring Boot2 核心功能

    1、文件类型 1、1 properties yml 控制台输出 单引号会将\n作为字符串输出 双引号会换行输出 单引号会转义,双引号不会转义 person: userName: &…

    Java 2023年6月13日
    080
  • datatimepicker插件

    演示bs_datatimepicker插件 $(function () { //当容器加载完成,对容器调用工具函数 $("#myDate").datetimep…

    Java 2023年6月9日
    082
  • Apache Lucene 4.5 发布,Java 搜索引擎

    Apache Lucene 4.5 发布了,该版本提供基于磁盘的文档值以及改进了过滤器的缓存。Lucene 4.5 的文档请看这里。 Lucene 是apache软件基金会一个开放…

    Java 2023年5月29日
    080
  • Skywalking-03:Skywalking本地调试

    live-demo 与 skywalking 源码联调 构建项目 找一个目录执行如下命令 git clone https://github.com/apache/skywalkin…

    Java 2023年6月5日
    090
  • 使用Intellij IDEA搭建Ext JsMVC web项目

    由于自己从android开发转来学习web开发,最近在学习Jsp,之前接触过一点Extjs,所以用jsp来配合ext试试。 Ext JS介绍 extjs是一个javascript框…

    Java 2023年6月13日
    060
  • JPA 入门实战(1)–简介

    JPA(Java Persistence API) 是 SUN 公司推出的一套 ORM 规范,充当 Java 对象和关系数据库系统之间的桥梁;本文主要介绍其基本概念。 1、JPA …

    Java 2023年6月16日
    079
  • Vue图片浏览组件v-viewer使用

    简单介绍v-viewer的两种使用方法: Demo 安装依赖: npm install v-viewer –save 全局引入 import Viewer from ‘v-vie…

    Java 2023年6月9日
    092
  • Go学习第一天:有关环境变量及结构的解释

    环境变量 有三个变量 GOPATH、 PATH、 GOROOT: GOROOT 就是 go 的安装路径; GOPATH 就是go的项目目录; PATH是go安装路径下的bin目录。…

    Java 2023年6月7日
    089
  • 狂神说笔记——SpringBoot快速入门20

    SpringBoot快速入门 ; 1.什么是SpringBoot 回顾什么是Spring? Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Ro…

    Java 2023年5月30日
    0127
  • 阿里云Linux-Centos8安装mysql8

    1. 安装MySQL &#x4F9D;&#x6B21;&#x6267;&#x884C;&#x4EE5;&#x4E0B;&#x…

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