Redian新闻
>
分布式追踪与监控:Skywalking介绍

分布式追踪与监控:Skywalking介绍

公众号新闻

点击上方“芋道源码”,选择“设为星标

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

 
来源:shemg.cn/post/ONglILg32/

一、APM介绍

APMApplication Performance Management应用性能管理 ,通过各种探针采集并上报数据,收集关键指标,同时搭配数据展示以实现对应用程序性能管理和故障管理的系统化解决方案。

目前主要的一些 APM 工具有: Cat、Zipkin、Pinpoint、SkyWalking,这里主要介绍 SkyWalking ,它是一款优秀的国产 APM 工具,包括了分布式追踪、性能指标分析、应用和服务依赖分析等。

Zabbix、Premetheus、open-falcon等监控系统主要关注服务器硬件指标与系统服务运行状态 等,而APM系统则更重视程序内部执行过程指标和服务之间链路调用情况的监控APM更有利于深入代码找到请求响应“慢”的根本问题,与Zabbix之类的监控是互补关系。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

二、分布式链路追踪

下图是常见的微服务的框架,4 个实例,2 个 MySQL、1 个 Redis。实际上它有两次完全不同的请求进来:有一次的一个请求会访问 Redis,再去访问 MySQL;另外一个可能走到另外的服务上,然后直接去 MySQL。整个分布式追踪的目的是什么?是为了让我们最终在页面上、UI上、和数据上能够复现这个过程。我们要拿到整个完整的链路,包括精确的响应时间,访问的方法、访问的 circle,访问的 Redis 的 key等,这些是我们在做分布式追踪的时候需要展现的一个完整的信息。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

三、Apache Skywalking(Incubator)简介

分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。

Apache Skywalking(Incubator)专门为微服务架构和云原生架构系统而设计并且支持分布式链路追踪的APM系统。Apache Skywalking(Incubator)通过加载 探针-非侵入式 的方式收集应用调用链路信息,并对采集的调用链路信息进行分析,生成应用间关系和服务间关系以及服务指标。Apache Skywalking (Incubating)目前支持多种语言,其中包括Java,.Net Core,Node.js和Go语言。另外社区还发展出了一个叫OpenTracing的组织,旨在推进调用链监控的一些规范和标准工作。

Skywalking支持从6个可视化维度剖析分布式系统的运行情况。

  • 总览视图(Global view)是应用和组件的全局视图,其中包括组件和应用数量,应用的告警波动,慢服务列表以及应用吞吐量;
  • 拓扑图(topology view)从应用依赖关系出发,展现整个应用的拓扑关系;
  • 应用视图从单个应用的角度,展现应用的上下游关系,TopN的服务和服务器,JVM的相关信息以及对应的主机信息。
  • 服务视图关注单个服务入口的运行情况以及此服务的上下游依赖关系,依赖度,帮助用户针对单个服务的优化和监控;
  • 追踪(trace)展现了调用的单次请求经过的所有埋点以及每个埋点的执行时长;
  • 告警视图(alarm)根据配置阈值针对应用、服务器、服务进行实时告警。

四、SkyWalking 原理架构图

五、SkyWalking 核心模块

SkyWalking采用组件式开发,易于扩展,主要组件作用如下:

1. Skywalking Agent :链路数据采集tracing(调用链数据)和metric(指标)信息并上报,上报通过HTTP或者gRPC方式发送数据到Skywalking Collector。

2. Skywalking Collector :链路数据收集器,对agent传过来的tracing和metric数据进行整合分析通过Analysis Core模块处理并落入相关的数据存储中,同时会通过Query Core模块进行二次统计和监控告警。

3. Storage :Skywalking的存储,支持以ElasticSearch、Mysql、TiDB、H2等主流存储作为存储介质进行数据存储,H2仅作为临时演示单机用。

4. SkyWalking UI :Web可视化平台,用来展示落地的数据,目前官方采纳了RocketBot作为SkyWalking的主UI。

本文通过Docker容器安装Skywalking,并示例整合apisix网关、Spring Boot微服务项目进行APM(Application Performance Management)应用性能管理,检测从接口网关到微服务实例、再到数据库、缓存等存储层之间的链路追踪。

六、SkyWalking服务端安装

安装环境:

操作系统:CentOS7,配置为4核8G

Docker版本:Docker version 19.03.12, build 48a66213fe

安装工具:docker-compose,版本:docker-compose version 1.26.2, build eefe0d31

skywalking版本:8.1.0

elasticsearch版本:7.5.0

1、创建目录

mkdir -p /data/ent/skywalking
cd /data/ent/skywalking

2、编写docker-compose.yml

vim docker-compose.yml
#添加以下内容
version: '3.8'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.5.0
    container_name: elasticsearch
    restart: always
    ports:
      - 9200:9200
    healthcheck:
      test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - TZ=Asia/Shanghai
    ulimits:
      memlock:
        soft: -1
        hard: -1
  skywalking-oap:
    image: apache/skywalking-oap-server:8.1.0-es7
    container_name: skywalking-oap
    depends_on:
      - elasticsearch
    links:
      - elasticsearch
    restart: always
    ports:
      - 11800:11800
      - 12800:12800
    healthcheck:
      test: ["CMD-SHELL", "/skywalking/bin/swctl"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    environment:
      TZ: Asia/Shanghai
      SW_STORAGE: elasticsearch7
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
  skywalking-ui:
    image: apache/skywalking-ui:8.1.0
    container_name: skywalking-ui
    depends_on:
      - skywalking-oap
    links:
      - skywalking-oap
    restart: always
    ports:
      - 28080:8080
    environment:
      TZ: Asia/Shanghai
      SW_OAP_ADDRESS: skywalking-oap:12800

3、启动服务

#启动(docker和docker-compose的安装不再详介绍)
docker-compose up -d

4、开放端口

firewall-cmd --zone=public --add-port=11800/tcp --permanent
firewall-cmd --zone=public --add-port=12800/tcp --permanent
firewall-cmd --zone=public --add-port=28080/tcp --permanent
firewall-cmd --reload

5、访问skywalking ui后台,访问地址为:http://服务器ip:28080

七、Skywalking Agent安装

以java agent为例,下载skywalking项目,地址:https://www.apache.org/dyn/closer.cgi/skywalking/8.1.0/apache-skywalking-apm-es7-8.1.0.tar.gz

解压下载后的文件,将agent文件夹复制至java项目下,执行java项目时,使用javaagent开启skywalking agent

java -javaagent:agent/skywalking-agent.jar=agent.service_name=sab-service,collector.backend_service=192.168.35.226:11800 -jar sab-manager.war  --spring.profiles.active=local_dev

其中,agent.service_name为要注册到skywalking的服务名称,collector.backend_service为skywalking grpc注册地址。

启动无报错,在skywalking ui后台可查看服务是否已注册成功到skywalking。

八、Skywalking UI 管理后台介绍

1、首页

  • 仪表盘:查看被监控服务的运行状态
  • 拓扑图:以拓扑图的方式展现服务直接的关系,并以此为入口查看相关信息
  • 追踪:以接口列表的方式展现,追踪接口内部调用过程
  • 性能剖析:单独端点进行采样分析,并可查看堆栈信息
  • 告警:触发告警的告警列表,包括实例,请求超时等。
  • 自动刷新:自动刷新当前数据内容

2、仪表盘

**查看全局服务基本性能指标**
  • 第一栏:不同内容主题的监控面板,应用/数据库/容器等
  • 第二栏:操作,包括编辑/导出当前数据/导入展示数据/不同服务端点筛选展示
  • 第三栏:不同纬度展示,服务/实例/端点
2.1、参数说明
2.1.1 Global全局维度
  • 第一栏:Global、Server、Instance、Endpoint不同展示面板,可以调整内部内容
  • Services load:服务每分钟请求数
  • Slow Services:慢响应服务,单位ms
  • Un-Health services(Apdex):Apdex性能指标,1为满分。
  • Global Response Latency:百分比响应延时,不同百分比的延时时间,单位ms
  • Global Heatmap:服务响应时间热力分布图,根据时间段内不同响应时间的数量显示颜色深度
  • 底部栏:展示数据的时间区间,点击可以调整。
2.1.2 Service实例维度
  • Service Apdex(数字):当前服务的评分
  • Service Apdex(折线图):不同时间的Apdex评分
  • Successful Rate(数字):请求成功率
  • Successful Rate(折线图):不同时间的请求成功率
  • Servce Load(数字):每分钟请求数
  • Servce Load(折线图):不同时间的每分钟请求数
  • Service Avg Response Times:平均响应延时,单位ms
  • Global Response Time Percentile:百分比响应延时
  • Servce Instances Load:每个服务实例的每分钟请求数
  • Show Service Instance:每个服务实例的最大延时
  • Service Instance Successful Rate:每个服务实例的请求成功率
2.1.3 Instance实例维度
  • Service Instance Load:当前实例的每分钟请求数
  • Service Instance Successful Rate:当前实例的请求成功率
  • Service Instance Latency:当前实例的响应延时
  • JVM CPU:jvm占用CPU的百分比
  • JVM Memory(Java Service):JVM内存占用大小,单位MB
  • JVM GC Time:JVM垃圾回收时间,包含YGC和OGC
  • JVM GC Count:JVM垃圾回收次数,包含YGC和OGC
  • JVM Thread Count(Java Service):JVM生成的线程数
  • CLR XX:类似JVM虚拟机参数
2.1.4 Endpoint端点维度
  • Endpoint Load in Current Service:每个端点的每分钟请求数
  • Slow Endpoints in Current Service:每个端点的最慢请求时间,单位ms
  • Successful Rate in Current Service:每个端点的请求成功率
  • Endpoint Load:当前端点每个时间段的请求数据
  • Endpoint Avg Response Time:当前端点每个时间段的请求行响应时间
  • Endpoint Response Time Percentile:当前端点每个时间段的响应时间占比
  • Endpoint Successful Rate:当前端点每个时间段的请求成功率

3、拓扑图

SkyWalking能够根据获取的数据自动绘制服务之间的调用关系图,并能识别常见的服务显示在图标上。每条连线的颜色 反应了服务之间的调用延迟 情况,可以非常直观的看到服务与服务之间的调用状态,连线中间的点能点击,可显示两个服务之间链路的平均响应时间、吞吐率以及SLA等信息。

  • 1:选择不同的服务关联拓扑
  • 2:查看单个服务相关内容
  • 3:服务间连接情况
  • 4:分组展示服务拓扑

4、追踪

显示请求的响应内部执行情况,一个完整的请求都经过了哪些服务、执行了哪些代码方法、每个方法的执行时间、执行状态等详细信息,快速定位代码问题。

可通过选择服务、实例、状态和端点名称来搜索调用链路,

可以点击标记红色的端点,查看异常信息

5、性能剖析

新建需要分析的端点,在左侧列表显示任务及对应的采样请求,右侧显示端点链路及每个端点的堆栈信息。

6、告警

不同维度告警列表,可分为服务、端点和实例。



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。

谢谢支持哟 (*^__^*)

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
一文看懂分布式链路监控系统丧心病狂!美国警方公开现场监控:地铁站内随机袭击乘客推下站台Sharding JDBC 实战:分布式事务处理我家老邻居是汪精卫家的佣人——爸爸和我一起写我们的旧家(我的版本)沉浸式追剧是种什么体验??啊啊啊代入感极强...嘉实基金吴悠:用均衡方式追求投资的可持续性懒洋洋的夏日午后一个轻量级的分布式日志标记追踪神器,十分钟接入,非常好用!10月28日9:00,H. Vincent Poor教授分享当无线网络边缘“遇上”分布式机器学习若是当真的话.....分布式定时调度:xxl-job 万字详解支撑千亿级日交易额,平安科技分布式数据库架构设计聊一聊分布式锁的设计模型文末送书 | 从0到1全面探讨分布式人工智能:理论、算法与实践干货:分布式数据库技术路线及方案分类惨案!老板要求单体架构转型分布式踩坑!保利联手碧桂园,为什么要做分布式光伏?VLDB 2023 | 北大河图发布分布式训练神器Galvatron, 一键实现大模型高效自动并行最小可行架构注意事项:必须考虑分布式处理和数据的位置Go基础会了怎么进阶?可以动手搞下这个分布式实战 | 极客时间相会在枇杷树下——爸爸和我一起写我们的旧家(爸爸的版本)活动回顾 | H. Vincent Poor 教授:当无线网络边缘“遇上”分布式机器学习隆基HPBC电池“横空出世” 光伏大厂逐鹿分布式香港中文大学(深圳)数据科学学院招聘博士后 - 分布式优化和机器学习方向MySQL 分布式事务的“路”与“坑”[电脑] 广覆盖高速率——华硕灵耀 Pro AX11000 分布式路由开箱简测单体架构服务转型至分布式的踩坑经历性能爆表:SpringBoot利用ThreadPoolTaskExecutor批量插入百万级数据实测!大规模GNN如何学习?北邮最新《分布式图神经网络训练》综述,35页pdf阐述分布式GNN训练算法和系统MLPerf排名榜刷新:相同GPU配置训练BERT,飞桨用分布式技术拿下世界第一分布式存储:三种主流形态及主要场景研发分布式储能与智能电网系统,「云能魔方」完成数千万元天使轮融资丨36氪首发FFIE法拉第,一路发二进宫Redis分布式锁真的安全吗?开源如何构建分布式信任 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。