# skywalking链路追踪
# 介绍
- Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(Docker,K8S,Mesos)架构而设计, 是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪,性能指标分析和服务依赖分析等。
- Skywalking是一个国产的开源框架,为Apache顶级项目
- 支持Java、.Net、NodeJs等探针,数据存储支持Mysql、Elasticsearch等
- 采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但性能表现优秀,且对云原生支持。
下面分别介绍skywalking UI中各项内容,分别为仪表盘、拓扑图、追踪、 性能剖析、日志、告警
# 仪表盘
仪表盘是我们进入skywalking的首页。他提供多个指示板来可视化指标,例如:服务(APM) 、数据库(Database)、istio等等。接下来,会着重介绍APM和Database面板。
# APM
APM面板总体分为四块:global(全局)、 service(服务)、 instance(实例)、 endpoint(端点),提供筛选功能。每块都包含一些指标。
# global(全局)指标
Services Load(CPM - calls per minute):服务每分钟请求数
Slow Services(ms):慢响应服务(响应时间排序top n)
Un-Health Services (Apdex):Apdex分数
Apdex是根据设定的阈值和响应时间结合考虑的衡量标准。它是满意响应时间和不满意响应时间相对于总响应时间的比率。 它衡量的是用户对你的服务的满意程度。
Slow Endpoints (ms):endpoint的平均响应耗时排序,单位ms
Global Response Latency(percentile in ms):响应时间百分比,不同百分比的延时时间,单位ms percentile标签含义(p99、p95、pxx等):例如p99为3500ms, 这意味着 99% 的请求应该比3500ms更快
Global Heatmap(ms):服务响应时间热力分布图,根据时间段内不同响应时间的数量显示颜色深度, 颜色越深,请求越多。
# Service(服务)指标
- Service Apdex 数字:Apdex分数(请参考上一章golbal的解释)
- Service Apdex 折线图:一段时间的Apdex分数
- Service Avg Response Time(ms):服务平均响应时间
- Service Response Time Percentile(ms):百分比响应延时(参考上一章golbal的解释)
- Successful Rate(%)数字:请求成功率
- Successful Rate(%)折线图:一段时间的请求成功率
- Service Load(CPM - calls per minute):每分钟调用数
- Service Load(CPM - calls per minute):一段时间的每分钟调用数
- Service Instances Load(CPM - calls per minute):每个实例每分钟请求数
- Slow Service Instance(ms):每个服务实例平均延时topN
- Service Instance Successful Rate(%):服务实例的请求成功率 topN
# Instance(实例)指标
- Service Instance Load(CPM - calls per minute): 实例每分钟调用数
- Service Instance Successful Rate(%):实例调用成功比率
- Service Instance Latency(ms):实例响应延时
- JVM CPU(java service)%:jvm占用cpu百分比
- JVM Memory (java service)(MB):jvm内存占用大小,包含四个指标instance_jvm_memory_heap(堆内存使用)、instance_jvm_memory_heap_max(最大堆内存)、instance_jvm_memory_noheap(直接内存当前使用)、instance_jvm_memory_noheap_max(最大直接内存)
- JVM GC Time(ms):jvm垃圾回收时间,包含young gc和old gc。
- JVM GC Count:jvm垃圾回收次数,包含young gc count和old gc count
- JVM Thread Count(java service)线程数 另外还有四个.net的指标,不涉及,暂不描述
# Endpoint(端点)指标
- Endpoint Load in Current Service(CPM / PPM):每个端点(API)每分钟请求数
- Slow Endpoints in Current Service(ms):每个端点(API)的平均响应时间最慢top n,单位ms
- Successful Rate in Current Service(%):每个端点(API)的请求成功率
- Endpoint Load:当前端点每个时间段的请求数据
- Endpoint Avg Response Time:当前端点每个时间段的平均请求响应时间
- Endpoint Response Time Percentile(ms):当前端点每个时间段的响应时间占比
- Endpoint Successful Rate(%):当前端点每个时间段的请求成功率
# Database
- Database Avg Response Time(ms):当前数据库平均响应时间,单位ms
- Database Access Successful Rate(%):当前数据库访问成功率
- Database Traffic(CPM: Calls Per Minute):当前数据库每分钟请求数
- Database Access Latency Percentile(ms):数据库不同比例的响应时间,单位ms
- Slow Statements(ms):前N个慢查询,单位ms
- All Database Loads(CPM: Calls Per Minute):所有数据库中请求量排序
- Un-Health Databases:所有数据库不健康排名,请求成功率排名,失败最多的请求在最上。
# 拓扑图
可以描述服务与服务直接的联系,例如下图,我们可以清晰的看到User服务依赖于consumer服务、messi服务两个服务
# 追踪
查看每个接口的调用链,每个链路耗时、状态。如果为失败,还会展示错误信息,如果是数据库,会展示查询语句。 另外可以根据追踪id(trace id)和标记(tag)筛选。 如下图:
点击查看详情:
# 性能剖析
性能剖析通过新建任务,对不同端点进行采样,提供更详细的报告。目前看起来,比追踪多了线程栈的信息、慢方法提示
# 1、新建任务
# 2、查看详细分析
# 日志
综合展示各个服务的日志信息,可通过时间、追踪ID、关键词等进行检索
# 日志配置
服务中先完成相关配置才可以将日志正常传输到skywalking中
# 引入maven依赖(pom.xml)
<!--skyWalking监控相关-->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>8.7.0</version>
</dependency>
<!--skyWalking日志相关-->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>8.7.0</version>
</dependency>
# logback.xml添加相关配置
<!-- skywalking日志配置 -->
<appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</encoder>
</appender>
<!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 -->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="info_log"/>
<appender-ref ref="error_log"/>
<!-- skywalking日志配置 -->
<appender-ref ref="grpc-log"/>
</root>
# 日志展示
完成上面配置之后,即可在日志页面查看到相关日志,如下图
点击之后查看详细信息
点击追踪ID跳转到追踪页面
# 告警
根据预设的告警规则,匹配信息并进行提示
# 告警配置
Apache SkyWalking 告警是由一组规则驱动,这些规则定义在 config/alarm-settings.yml
文件中,其位置如图所示:
告警规则有两种类型:单独规则、复合规则
# 单独规则
rules:
# 规则唯一名称,必须以'_rule'结尾.
service_resp_time_rule:
# 度量名称,也是OAL脚本中的度量名,目前Service, Service Instance, Endpoint的度量可以用于告警
metrics-name: service_resp_time
# [可选]默认,匹配此指标中的所有服务
include-names:
- service_a
- service_b
# 操作符
op: >
# 阈值,对于多种指标值的如percentile可以配置P50、P75、P90、P95、P99的阈值
threshold: 1000
# 评估度量标准的时间长度
period: 10
# 度量有多少次符合告警条件后,才会触发告警
count: 2
# 检查多少次,告警触发后保持沉默,默认周期相同
silence-period: 10
# 该规则触发时,发送的通知消息
message: 服务【{name}】的平均响应时间在最近10分钟内有2分钟超过1秒
# 复合规则
复合规则仅适用于针对相同实体级别的告警规则 例如都是服务级别的告警规则:service_percent_rule && service_resp_time_percentile_rule 不适用于编写不同实体级别的告警规则
## 单独规则
rules:
service_resp_time_rule:
metrics-name: service_resp_time
op: ">"
threshold: 1000
period: 10
count: 2
silence-period: 10
message: 服务【{name}】的平均响应时间在最近10分钟内有2分钟超过1秒
service_sla_rule:
metrics-name: service_sla
op: "<"
threshold: 8000
period: 10
count: 2
silence-period: 10
message: 服务【{name}】的成功率在最近10分钟内有2分钟低于80%
# 规则名称:在告警信息中显示的唯一名称,必须以_rule结尾
comp_rule:
# 指定如何组成规则,支持&&, ||, ()操作符
expression: service_resp_time_rule && service_sla_rule
message: 服务【{name}】在最近10分钟内有2分钟平均响应时间超过1秒并且成功率低于80%
# 告警信息查看
访问告警界面可以看到对应的告警信息,如下图
点击查看详情