SkyWalking原理及实践

目录

概况

应用场景

架构分析

目录结构

部署应用

服务端

配置

部署

客户端

部署配置

本地idea配置

linux接入

使用Console

look Strong appearance!


概况

国产开源,Apache孵化器产品。支持非侵入式埋点,是一款基于分布式跟踪的应用程序性能监控系统。

官网:https://skywalking.apache.org/

官方文档:https://github.com/apache/skywalking/tree/master/docs

下载:https://skywalking.apache.org/downloads/https://archive.apache.org/dist/skywalking/

应用场景

  • 请求链路追踪,故障快速定位:可以通过调用链结合业务日志快速定位错误信息。
  • 可视化:各个阶段耗时,进行性能分析。
  • 依赖优化:各个调用环节的可用性、梳理服务依赖关系以及优化。
  • 数据分析,优化链路:可以得到用户的行为路径,汇总分析应用在很多业务场景。

架构分析

image

  • Skywalking Agent: 采集tracing(调用链数据)和metric(指标)信息并上报,上报通过HTTP或者gRPC方式发送数据到Skywalking Collector
  • Skywalking Collector : 链路数据收集器,对agent传过来的tracing和metric数据进行整合分析通过Analysis Core模块处理并落入相关的数据存储中,同时会通过Query Core模块进行二次统计和监控告警
  • Storage: Skywalking的存储,支持以ElasticSearch、Mysql、TiDB、H2等作为存储介质进行数据存储
  • UI: Web可视化平台,用来展示落地的数据,目前官方采纳了RocketBot作为SkyWalking的主UI

 

目录结构

image.png

Skywalking整体分为 3 个部分:

  • agent 代理,应用启动的时候后,通过该agent收集数据并上报backend。
  • backend 数据收集器,agent收集的数据会发送给backend,然后数据处理后入库。
  • bin目录下的oapService.sh,它就是 backend 的启动脚本
  • config目录下的application.yml,它是backend的配置信息
  • oap-libs是backend启动需要的所有jar包
  • logs目录下的skywalking-oap-server.log是启动后的日志文件。
  • ui也就是提供可视化服务的界面。一般在webapp目录下

部署应用

服务端

配置

  1. 修改配置文件conf/appliction.yml。支持mysql、es等,日志量大,生产推荐es。
  2. 当选择mysql时,由于少myql驱动,需下载mysql-connector-java.jar至oap-libs。配置数据库信息,表结构在启动后会自动同步。
  3. 修改webapp/webapp.yml。修改端口及IP信息
#8.2版本  spring2.3版本
server:
  port: 9029

collector:
  path: /graphql
  ribbon:
    ReadTimeout: 10000
    # Point to all backend's restHost:restPort, split by ,
    listOfServers: xxxx:12800

部署

  1. 启动/bin下,startup.sh:全量启动;oapService.sh后端;webappService.sh前端。启动生成日志在logs下。
  2. 访问:http://xxxx:9029/

image.png

客户端

部署配置

1.修改 agent/config/agent.config 文件

# 在UI上显示的服务名称
agent.service_name=${SW_AGENT_NAME:cp3-cloud}
#采集端地址,注意端口11800是默认暴露出来的,不用修改
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:xxxx:11800}

2. 将 agent/optional-plugins/ 中的如下插件移动到 agent/plugins/ 里面去

apm-quartz-scheduler-2.x-plugin-8.2.0.jar # 定时任务
apm-spring-annotation-plugin-8.2.0.jar
# spring注解
apm-spring-tx-plugin-8.2.0.jar # spring事务
apm-trace-ignore-plugin-8.2.0.jar
# 自定义忽略追踪某些请求 (如nacos、eureka等定时请求)
apm-spring-cloud-gateway-2.1.x-plugin-8.2.0.jar
# 解决微服务项目 gateway 转发的问题
apm-spring-webflux-5.x-plugin-8.2.0.jar #

3.下载apm-trace-ignore-plugin插件的配置文件放到 agent/config/ 目录,取名为: apm-trace-ignoreplugin.config

# 需要被注入的地址
# /path/? 匹配任意单个字符
# /path/* 匹配任意数量的字符
# /path/** 匹配任意数量的字符并支持多级目录
# 多个路径使用逗号分隔, 比如: trace.ignore_path=/eureka/**,/consul/**
trace.ignore_path=${SW_AGENT_TRACE_IGNORE_PATH:/eureka/**}

4.若是分布式部署, 将agent文件夹移动到跟spring-boot的jar同一台服务器上的任意目录.

配置每个服务的启动参数.

/xxx/agent/skywalking-agent.jar 要改成你自己的skywalking-agent.jar 存放路经

# VM Options: (虚拟机参数)
-Xms128M -Xmx192M -XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=128M -javaagent:/xxx/agent/skywalking-agent.jar
# Environment variables (环境变量)
SW_AGENT_NAME=xxx-server

本地idea配置

image.png

linux接入

java -javaagent:/xxxx/agent/skywalking-agent.jar -Dskywalking.agent.service_name=xxx-server -jar xx-server.jar

使用Console

  1. 访问UI页面: http://localhost:12080 查看结果 

look Strong appearance!

Service Dashboard

Service Dashboard内分别有Global、Service、Endpoint、Instance面板,展示了全局以及服务、端点、实例的详细信息

  • global
    • Services load:服务每分钟请求数
    • Slow Services:慢响应服务,单位ms
    • Un-Health services(Apdex):Apdex性能指标,1为满分。
    • Global Response Latency:百分比响应延时,不同百分比的延时时间,单位ms
    • Global Heatmap:服务响应时间热力分布图,根据时间段内不同响应时间的数量显示颜色深度
    • 底部栏:展示数据的时间区间,点击可以调整。

image.png

  • 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:每个服务实例的请求成功率

image.png

  • instance
    • Service Instance Load:当前实例的每分钟请求数
    • Service Instance Successful Rate:当前实例的请求成功率
    • Service Instance Latency:当前实例的响应延时
    • JVM CPU:jvm占用CPU的百分比
    • JVM Memory:JVM内存占用大小,单位m
    • JVM GC Time:JVM垃圾回收时间,包含YGC和OGC
    • JVM GC Count:JVM垃圾回收次数,包含YGC和OGC
    • CLR XX:类似JVM虚拟机

image.png

  • endpoint 端点(API)维度
    •  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:当前端点每个时间段的请求成功率

image.png

Database Dashboard

Database Dashboard内可以展示数据库的响应时间、响应时间分布、吞吐量、SLA、慢SQL等详细信息,便于直观展示数据库状态

image.png

拓扑图

每条连线的颜色反应了服务之间的调用延迟情况,可以非常直观的看到服务与服务之间的调用状态,连线中间的点能点击,可显示两个服务之间链路的平均响应时间、吞吐率以及SLA等信息。

  • image:服务告警信息
  • image:服务端点追踪信息
  • image:服务实例性能信息
  • image:api信息面板

image.png

接口追踪

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

  • 左侧:api接口列表,红色-异常请求,蓝色-正常请求
  •  右侧:api追踪列表,api请求连接各端点的先后顺序和时间

image.png

性能分析

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

image.png

告警

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

image.png

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值