目录

1. Skywalking概述

2. Skywalking主要功能

3. Skywalking主要特性

4. Skywalking架构简介

5. Spring Cloud与Skywalking实战

5.1 Skywalking部署构建

5.3 Spring Cloud整合Skywalking实战


1. Skywalking概述

Skywalking与2016年11月2日由国人吴晟在Github上传v1.0版本,用于提供分布式链路追踪功能,从5.x开始,成为一个功能较为完善的APM(Application Performance Management)系统,2019年4月17日从Apache孵化器毕业,正式成为Apache顶级项目。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。官方对自己介绍是专为微服务,云原生和基于容器(Docker,Kubernetes,Mesos)架构而设计。

2. Skywalking主要功能

  • 服务,服务实例,端点指标分析

  • 根本原因分析

  • 服务拓扑图分析

  • 服务,服务实例和端点依赖性分析

  • 慢服务检测

  • 性能优化

  • 分布式跟踪和上下文传播

  • 数据库访问指标、检测慢速数据库访问语句(包括SQL)

  • 告警

3. Skywalking主要特性

  • 多种监控手段,语言探针和service mesh

  • 多语言自动探针,Java,.NET Core和Node.JS

  • 多种后端存储支持

  • 轻量高效

  • 模块化,UI、存储、集群管理多种机制可选

  • 支持告警

  • 优秀的可视化方案

4. Skywalking架构简介

先看一下官方提供的架构图,如图:

Skywalking总体由四个部分agentcollectorwebapp-uistorage组成。图10-11从上到下是应用层接入,可以使用无入侵性的agent探针接入,通过HTTP或者gRPC讲数据发送至Skywalking分析平台collectorcollector对接受到的数据进行聚合分析,最后存储至storage中,这里支持多种存储方式,比较常用的有H2和ElasticSearch,最后可以由webapp-ui对所有的数据进行展示

5. Spring Cloud与Skywalking实战

5.1 Skywalking部署构建

5.1.1.ES安装

docker run --name es6 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -v /data/elasticsearch6/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elasticsearch6/data:/usr/share/elasticsearch/data -v /data/elasticsearch6/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:6.7.2

访问ip:9200表示安装成功

5.1.2 Skywalking安装

到官网下载对应版本的包 我这边选择的6.5.0版本的

Index of /dist/skywalking (apache.org)

解压可以看到目录结构,如图:

  • agent:探针相关,后面会做更加详细的介绍。

  • bin:这里放的是oapService和webappService的启动脚本,当然也有执行两个脚本的合并脚本startup.sh

  • config:这里主要存放的是collector的配置信息,我们需要修改这里的application.yml中的有关ElasticSearch的配置,如下图:

修改storage.elasticsearch.nameSpace为我们前面构建ElasticSearch设置的cluster.name,笔者这里的值为CollectorDBCluster,同时修改storage.elasticsearch.clusterNodes为我们当前构建的ElasticSearch的地址。

  • logs:存放collector和webapp-ui生成的日志。

  • webapp:这里存放的是Skywalking展示UI的jar和配置文件。

Skywalking中默认使用的端口有8080、11800、12800,请保证这些端口未被占用,如需修改,可以修改config目录中的application.ymlwebapp目录中的webapp.yml

接下来启动collector和webapp-ui,进入bin目录中,执行命令./startup.sh,如:

打开浏览器访问http://192.168.60.34:8080/,可以看到webapp-ui的仪表盘,如图:

5.3 Spring Cloud整合Skywalking实战

在idea中使用需要修改启动配置,点击右上角的Edit Configurations...,在打开的窗口中选择Environment->VM Options,配置如下脚本:

-javaagent:D:\Development\SpringCloudLearning\chapter15\skywalking\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=test-service
-Dskywalking.collector.backend_service=192.168.60.34:11800

还可以使用java -jar的方式来加载agent探针,我们将整个maven项目打包,使用java -jar的方式来启动,启动命令中增加启动参数,如下:

-javaagent:/mnt/skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=test-service -Dskywalking.collector.backend_service=192.168.60.34:11800 -jar test-0.0.1-SNAPSHOT.jar

http://localhost:8080/client/hello?name=spring,多刷新几次后,我们再使用浏览器访问http://192.168.60.34:8080/,如:

还可以使用java -jar的方式来加载agent探针,我们将整个maven项目打包,运行mvn install的命令,使用java -jar的方式来启动,启动命令中增加启动参数,如下:

-javaagent:D:\Development\SpringCloudLearning\chapter15\skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=consumer-service -Dskywalking.collector.backend_service=192.168.44.128:11800 -jar zuul-0.0.1-SNAPSHOT.jar

顺次启动四个工程后,使用浏览器访问:http://localhost:8080/client/hello?name=spring,多刷新几次后,我们再使用浏览器访问http://192.168.44.128:8080/,如:

顺次启动四个工程后,使用浏览器访问:http://localhost:8080/client/hello?name=spring,多刷新几次后,我们再使用浏览器访问http://192.168.44.128:8080/,如:

  • all_heatmap:所有服务响应时间的热点图

  • all_p99:所有服务响应时间的 p99 值

点击上边栏的拓扑图,可以看到当前我们工程的一个依赖拓扑关系,如:

点击上边栏的追踪,可以看到左边是当前所有的访问请求,随便点击一个,可以在右边看到一个详细的链路追踪过程,如:

点击链路,可以看到一些标记信息,包含端点、跨度类型、成功还是失败,以及一些Exception信息,如图:

点击仪表盘页面的Service,可以看到一些服务相关的信息,如平均响应时间、平均吞吐量、平均时延统计,如图:

  • service_instance_sla:服务实例的成功率

  • service_instance_resp_time:服务实例的平均响应时间

  • service_instance_cpm:服务实例每分钟调用次数

点击仪表盘页面的Endpoint,可以看到一些端点相关的信息,如图:

  • endpoint_cpm:端点每分钟调用次数

  • endpoint_avg:端点平均响应时间

  • endpoint_sla:端点成功率

  • endpoint_p99:端点响应时间的 p99 值

点击仪表盘页面的Instance,可以看到一些JVM相关的信息,如图:

5.4 Skywalking 添加tid

pom中引入以下依赖


  1. <dependency>
  2. <groupId>org.apache.skywalking</groupId>
  3. <artifactId>apm-toolkit-logback-1.x</artifactId>
  4. <version>6.2.0</version>
  5. </dependency>
  6. springboot logback 日志依赖,使用的是spring-boot-starter-logging
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-web</artifactId>
  10. </dependency>
  11. 替换logback.xml中配置
  12. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  13. <pattern>%d{ISO8601} | %thread | %-5level | %msg%n</pattern>
  14. </encoder>
  15. <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  16. <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
  17. <pattern>%d{ISO8601} | %tid | %thread | %-5level | %msg%n</pattern>
  18. </layout>
  19. </encoder>

启动项目请求http://localhost:9000/api/user/login查看控制台日志

找到tid到skywalking上查找 可以查找到对应的请求,查看对应的链路

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览113542 人正在系统学习中

[转帖]Skywalking学习及整合springboot的更多相关文章

  1. Netty学习篇③--整合springboot

    经过前面的netty学习,大概了解了netty各个组件的概念和作用,开始自己瞎鼓捣netty和我们常用的项目的整合(很简单的整合) 项目准备 工具:IDEA2017 jar包导入:maven 项目框架 ...

  2. Java-Dubbo学习及整合SpringBoot

    Dubbo架构 Dubbo是Java的RPC框架,具有三大核心功能:面向接口的远程方法调用,智能容错和负载均衡,以及服务的自动注册和发现 Dubbo架构图: 节点角色说明: 节点 说明 Provide ...

  3. SpringBoot学习之整合Mybatis

    本博客使用IDEA开发工具,通过Maven构建SpringBoot项目,初始化项目添加的依赖有:spring-boot-starter-jdbc.spring-boot-starter-web.mys ...

  4. dubbo入门学习(三)-----dubbo整合springboot

    springboot节省了大量的精力去配置各种bean,因此通过一个简单的demo来整合springboot与dubbo 一.创建boot-user-service-provider 本篇博文基于上篇 ...

  5. 消息中间件——RabbitMQ(十)RabbitMQ整合SpringBoot实战!(全)

    前言 1. SpringBoot整合配置详解 publisher-confirms,实现一个监听器用于监听Broker端给我们返回的确认请求:RabbitTemplate.ConfirmCallbac ...

  6. 基于Centos 7.4 搭建ELK整合SpringBoot日志收集

    基于Centos 7.4搭建es7.12.0+logstash-7.12.0+kibana-7.12.0(ELK)整合SpringBoot日志收集 注:Skywalking和logstash可共用一个 ...

  7. Seata整合SpringBoot和Mybatis

    Seata整合SpringBoot和Mybatis 一.背景 二.实现功能 三.每个服务使用到的技术 1.账户服务 2.订单服务 四.服务实现 1.账户服务实现 1.引入jar包 2.项目配置 3.建 ...

  8. canal整合springboot实现mysql数据实时同步到redis

    业务场景: 项目里需要频繁的查询mysql导致mysql的压力太大,此时考虑从内存型数据库redis里查询,但是管理平台里会较为频繁的修改增加mysql里的数据 问题来了: 如何才能保证mysql的数 ...

  9. RabbitMQ从概念到使用、从Docker安装到RabbitMQ整合Springboot【1.5w字保姆级教学】

    @ 目录 一.前言 二.RabbitMQ作用 1. 异步处理 2. 应用解耦 3. 流量控制 三.RabbitMQ概念 1. RabbitMQ简介 2. 核心概念 四.JMS与AMQP比较 五.Rab ...

  10. 整合springboot(app后台框架搭建四)

    springboot可以说是为了适用SOA服务出现,一方面,极大的简便了配置,加速了开发速度:第二方面,也是一个嵌入式的web服务,通过jar包运行就是一个web服务: 还有提供了很多metric,i ...

随机推荐

  1. linux_文本处理工具详细介绍

    文本处理工具 1. grep工具 grep是行过滤工具:用于根据关键字进行行过滤 语法和选项 语法: # grep [选项] '关键字' 文件名 常见选项: OPTIONS: -i: 不区分大小写 - ...

  2. C++篇:第三章_控制结构_知识点大全

    C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器 三.控制结构 for循环的结束判定条件是boolean型 只要适当地修改代码,就 ...

  3. 华为云MVP付健权:从机械工程师到AI开发者的华丽转身

    摘要:谁说AI开发难,看一个机械工程师是如何转型成为AI工程师的. 付健权,华为云MVP,企业上云导师.软通动力,售前解决方案经理,为制造业讲解华为云产品,为客户提供上云和云上解决方案.为企业提供大数 ...

  4. Python图像处理丨基于K-Means聚类的图像区域分割

    摘要:本篇文章主要讲解基于理论的图像分割方法,通过K-Means聚类算法实现图像分割或颜色分层处理. 本文分享自华为云社区<[Python图像处理] 十九.图像分割之基于K-Means聚类的区域 ...

  5. 政企上云网络适配复杂,看华为云Stack有妙招

    摘要:政企数据中心部署云资源池后,网络架构变得复杂,如何在数据中心内无缝集成云资源池.如何协同云上业务和云下传统业务的互通.如何解决云上业务的安全合规等新问题出现. 本文分享自华为云社区<[华为 ...

  6. 火山引擎DataTester分享:A/B实验中常见的8个错误

    火山引擎DataTester是科学可信的A/B测试与智能优化平台,源自字节跳动长期沉淀,能够深度耦合推荐.广告.搜索.UI.产品功能等多种行业场景需求,为业务增长.转化.产品迭代,运营提效等各环节提供 ...

  7. ECS 挂载 OSS 多Bucket

    ECS 挂载 OSS,等同于在ECS 上使用内网的 Bucket 域名,不需要收取流量费用,减少接口代码的编写. CentOS系统 安装 wget http://gosspublic.alicdn.c ...

  8. 【PS算法理论探讨三】 Photoshop中图层样式之 颜色叠加/渐变叠加/图案叠加 算法原理初探讨。

    这三个表面上看上去很简单,我们就先描述简单的部分. 颜色叠加:这个和编辑菜单下的填充 颜色 基本是一个意思,相当于在原有的图层上部添加了一个纯实色的虚拟图层,选项里的不透明度和混合模式和普通的概念是一 ...

  9. linux服务器之间免密登录

    目标  192.168.0.10 免密登录 192.168.0.11.192.168.0.12两台服务器 1.登录192.168.0.10 生成ssh密钥        ssh-keygen -t r ...

  10. 简单的winform学生管理系统Demo

    界面效果 练习重点 1. 关系表的创建 2. 增删改查的操作,及sqlhelper的封装 3. 跨页面数据传递,编辑页数据提交后数据局步刷新到列表数据 项目源码 FrmStuddentList pub ...