Apache Skywalking操作指南

Apache Skywalking操作指南

  • 一、简介
  • 二、安装与配置
  • 三、概念说明
  • 四、仪表盘说明
  • 五、链路追踪
  • 六、告警配置
  • 七、插件

一、简介

SkyWalking 是针对分布式系统的APM(应用性能监控)系统,特别针对微服务、cloud native 和容器化(Docker, Kubernetes, Mesos)架构, 其核心是个分布式追踪系统。它通过探针自动收集所需的指标,且基于探针技术对应用零侵入零耦合。主要提供以下功能:

  • 服务、服务实例和端点(如:单个HTTP URI)的性能指标分析
  • 根本原因分析
  • 服务拓扑图分析
  • 服务和端点依赖分析
  • 慢服务和慢端点检测
  • 分布式追踪和上下文传播
  • 告警

总体架构

  1. collector:链路数据归集器,数据可以落地MySQL、ElasticSearch、TiDB、H2等
  2. agent:探针,使用Javaagent做字节码植入,无侵入式的收集,并通过HTTP或者gRPC方式发送数据collector
  3. web:web可视化平台,用来展示落地的数据

二、安装与配置

SkyWalking官网下载 (安装教程很简单,自行度娘,不赘述)

SkyWalking 项目集成指南

  1. 将skywalking 的agent包拷贝到任意目录(如:/data)
  2. 启动java进程时增加-javaagent:/data/agent/skywalking-agent.jar -Dskywalking.agent.service_name=项目名称加载agent
  3. 可以修改配置忽略对eureka、redisson等的心跳检查链路追踪
    a.从 /agent/optional-plugins/apm-trace-ignore-plugin-7.0.0.jar 复制到 /agent/plugins
    b.在agent/config目录添加文件 apm-trace-ignore-plugin.config
    trace.ignore_path=Redisson/CLUSTER, /eureka/apps/**, Mysql/JDBI/PreparedStatement/**
    

agent目录结构

image

三、概念说明

skywalking各项指标说明

全局指标

  • all_p99, 所有服务响应时间的 p99 值
  • all_p95
  • all_p90
  • all_p75
  • all_p70
  • all_heatmap, 所有服务响应时间的热点图

服务指标

  • service_resp_time, 服务的平均响应时间
  • service_sla, 服务的成功率
  • service_cpm, 服务每分钟调用次数
  • service_p99, 服务响应时间的 p99 值
  • service_p95
  • service_p90
  • service_p75
  • service_p50

服务实例指标

  • service_instance_sla, 服务实例的成功率
  • service_instance_resp_time, 服务实例的平均响应时间
  • service_instance_cpm, 服务实例每分钟调用次数

端点指标

  • endpoint_cpm, 端点每分钟调用次数
  • endpoint_avg, 端点平均响应时间
  • endpoint_sla, 端点成功率
  • endpoint_p99, 端点响应时间的 p99 值
  • endpoint_p95
  • endpoint_p90
  • endpoint_p75
  • endpoint_p50

JVM指标

  • instance_jvm_cpu
  • instance_jvm_memory_heap
  • instance_jvm_memory_noheap
  • instance_jvm_memory_heap_max
  • instance_jvm_memory_noheap_max
  • instance_jvm_young_gc_time
  • instance_jvm_old_gc_time
  • instance_jvm_young_gc_count
  • instance_jvm_old_gc_count

服务关系指标

  • service_relation_client_cpm, 在客户端每分钟检测到的调用次数
  • service_relation_server_cpm, 在服务端每分钟检测到的调用次数
  • service_relation_client_call_sla, 在客户端检测到的成功率
  • service_relation_server_call_sla, 在服务端检测到的成功率
  • service_relation_client_resp_time, 在客户端检测到的平均响应时间
  • service_relation_server_resp_time, 在服务端检测到的平均响应时间

端点关系指标

  • endpoint_relation_cpm
  • endpoint_relation_resp_time

其他关键指标

CPM:每分钟请求调用的次数

SLA:网站服务可用性(主要是通过请求成功与失败次数来计算),9越多代表全年服务可用时间越长服务更可靠,停机时间越短
1年 = 365天 = 8760小时
99.9 = 8760 * 0.1% = 8760 * 0.001 = 8.76小时
99.99 = 8760 * 0.0001 = 0.876小时 = 0.876 * 60 = 52.6分钟
99.999 = 8760 * 0.00001 = 0.0876小时 = 0.0876 * 60 = 5.26分钟
从以上看来,全年停机5.26分钟才能做到99.999%,即5个9

CLR:(公共语言运行库)在运行期管理程序的执行:主要包含:内存管理、代码安全验证、代码执行、垃圾收集。CLR有一项服务称为GC(Garbage Collector,垃圾收集),它能为你自动管理内存。GC自动从内存中删除程序不再访问的对象,GC是程序员不再操心许多以前必须执行的任务,比如释放内存和检查内存泄漏。

百分位数:skywalking中有P50,P90,P95这种统计口径,就是百分位数的概念。

如下图,表示7月22日,14:56分这个时间点探针反馈的统计结果来看,有50%的请求响应时间低于60ms,有75%的请求响应时间低于60ms,有90%的请求响应时间低于550ms,有95%的请求响应时间低于550ms,有99%的请求响应时间低于550ms
image.png

四、仪表盘说明

  • Global(全局)


    image.png
  • Service(服务)


    image.png
  • Endpoint(端点)


    image.png
  • Instance(实例)


    image.png
  • Database(数据库)


    image.png

五、链路追踪

image.png

六、告警配置

  • 告警规则参数说明


    告警规则配置
  • 告警通知

告警消息将按通过HTTP按application/json内容类型推送。JSON格式基于List
消息格式
  • 动态配置与组件告警接入

skywalking使用的是动态配置(如apollo),如果需要变动的话,直接修改apollo的相关配置就行。同时通过webhooks自定义提示方式等等个性化功能。
自定义服务实现告警方式等配置

告警日志
企微告警通知示例

七、插件

Java Agent是插件化、可插拔的。Skywalking的插件分为三种:

  1. 引导插件:在agent的 bootstrap-plugins 目录下
  2. 内置插件:在agent的 plugins 目录下
  3. 可选插件:在agent的 optional-plugins 目录下

Java Agent只会启用 plugins 目录下的所有插件,bootstrap-plugins 目录以及 optional-plugins 目录下的插件不会启用。如需启用引导插件或可选插件,只需将JAR包移到 plugins 目录下,如需禁用某款插件,只需从 plugins 目录中移除即可。

  • 引导插件

目前只有两款引导插件:
apm-jdk-http-plugin 用来是监测HttpURLConnection;
apm-jdk-threading-plugin 用来监测Callable以及Runnable;

有关引导插件的功能描述,可详见:
[https://github.com/apache/skywalking/blob/v6.6.0/docs/en/setup/service-agent/java-agent/README.md#bootstrap-class-plugins]{.underline}

例如:项目中不少功能都用到了线程池来提高执行效率,因此就引入了apm-jdk-threading-plugin 用来实现跨线程链路监控。

使用方法:

修改 skywalking-agent.jar所在目录的 config/agent.config文件,在里面修改/添加配置
plugin.jdkthreading.threading_class_prefixes=cn.com.mybackage
然后在plugins文件夹里加入插件apm-jdk-threading-plugin.jar即可。

实现效果:
多线程链路监控
  • 内置插件

内置插件主要用来为业界主流的技术与框架提供支持。所支持的技术&框架,详见:

https://github.com/apache/skywalking/blob/v6.6.0/docs/en/setup/service-agent/java-agent/Supported-list.md

  • 可选插件

关于可选插件的功能描述,可详见:

https://github.com/apache/skywalking/blob/v6.6.0/docs/en/setup/service-agent/java-agent/README.md

  • 插件开发

插件开发指南,可详见:

Plugin Development Guide
SkyWalking插件开发指南

场景示例:我们项目中采用了xxljob分布式任务调度,且都是采用ben模式开发方式(Skywalking官方并没有对xxljob做相关支持),所以开发xxljob监控插件。


切入点

拦截器的实现:org.apache.skywalking.apm.plugin.xxljob.XxlJobHandlerInterceptor


拦截器

将插件定义添加到skywalking-plugin.def文件中
skywalking-plugin.def

org.apache.skywalking.apm.network.trace.component.ComponentsDefine中定义变量:


定义变量

插件效果:
插件效果

插件效果

你可能感兴趣的:(Apache Skywalking操作指南)