SkyWalking生产实战

时间:2022-12-05 18:02:15

本文基于java agent(8.7.0),服务端(9.2.0),不同版本之间可能会有差异。

SkyWalking是什么

SkyWalking是一个开源的可观测性平台,对服务和云原生基础设施数据收集、分析、聚合和可视化。它是现代的APM,专门为云原生设计。

基础术语

  • Service:提供共同行为的一组工作负载,对应cmdb里的应用名。
  • Service Instance:同一个Service下的一个工作负载,比如某个java应用的一个实例进程。
  • Endpoint:服务的接口或者方法名,或者是http uri。

架构

SkyWalking生产实战

  • Agent:收集观测性数据,这些数据包含metrics,traces,logs,events,支持多种语言的数据上报,可通过grpc,kafka,http协议将数据收集上来。
  • Webapp:前端,用于查看数据和排障。
  • OAP-Recevier:数据接收和解析,并进行当前OAP节点内的L1数据聚合
  • OAP-Aggregator:分布式聚合,根据路由规则将经过Receiver聚合后的数据路由到指定节点进行L2聚合,并写入数据库。
  • 存储:支持多种存储方式,生产采样elasticsearch。
  • Exporter:将数据导出到其他系统,比如TSDB,结合grafana进行展示。
  • Alarm:自带的报警工具,会在前端展示alarm信息。

生产部署架构图

SkyWalking生产实战

需要注意的配置

Agent需要注意的配置

agent.namespace

隔离trace数据,非必要不设置

agent.service_name

服务名,通过环境变量注入

collector.backend_service

Receiver的地址,通过环境变量注入

plugin.kafka.bootstrap_servers

kafka地址,通过环境变量注入

plugin.kafka.namespace

使用同一个kafka时用于隔离数据,非必要不设置

plugin.kafka.producer_config

kafka的producer配置,可以把retries设置为3

Server需要注意的配置

cluster

集群管理,通过nacos管理

core

定义OAP角色和数据保存时间,当拆分角色时,一定要注意restHost和gRPCHost不能是0.0.0.0

storage

数据存储,使用ES

kafka-fetcher

从kafka获取数据,可以优化consumerconfig

问题及优化

问题:启动变慢

部分服务接入后,服务启动明显变慢,原先健康检查超时10s,接入后健康检查超时20s才行。

优化:

  • 排查定位到kafka reporter会导致服务启动变慢,优化reporter
  • 优化类匹配和增强环节后,应用启动耗时在预期内
问题:UI首页Topolopy打开慢

打开首页时,点击Topolopy时,响应很慢,会直接导致不可用。

优化:

  • 通过页面编辑功能把这个页面删除了。
问题:trace不串联

在实际使用过程中,java sdk设置了agent namespace。当其他语言接入时,发现并不支持namespace设置,比如nodejs,这样导致nodejs调用java时链路串联不起来。

优化:

  • 取消java sdk的namespace设置,使用默认配置。
问题:kafka积压

随着服务接入越来多,OAP消费kafka明显变慢,导致kafka堆积很多数据。

优化:

  • 将OAP集群拆分成双集群,即把Mixed角色的集群拆分为Receiver角色和Aggregator角色。
  • 优化kafka ConsumerConfig配置

UI使用

首页

左边的菜单栏显示支持的仪表盘类型,我们目前只需要关注General Service,在其下面有两个子仪表盘,分别是Services和Database,目前只会用到这两个仪表盘。打开地址时默认显示的服务级别的概要数据。

SkyWalking生产实战

服务详情数据

如果要查看某个服务的详情数据,可以搜索某个服务,然后点击进去查看详情

  • Overview:显示服务各个维度的详情数据,各种指标含义如下
  • Apdex:应用性能满意度指数,取值范围是[0,1],值越高应用性能满意度越好
  • Successful Rate:请求成功率,对于http请求,默认返回200代表成功
  • Load服务或者方法分钟级调用量
  • Response Time Percentile:百分位响应时间,包含p99, p95, p90, p75, and p50
  • Message Queue Consuming:服务使用MQ的指标统计
  • Message Queue Avg Consuming Latency:消息消费延迟
  • Instance:实例级的分钟调用量,请求成功率,响应延时概要数据
  • Endpoint:接口或者方法级的分钟调用量,请求成功率,响应延时概要数据
  • Topology:服务的依赖拓扑图
  • Trace:服务的调用链路详情,可以快速地定位问题

SkyWalking生产实战

Trace

链路追踪是SkyWalking关键的功能,通过trace可以定位问题出在哪里。SkyWalking通过一个全局ID串联各个分布式服务调用来形成一个追踪链路,这个全局ID是TraceID。

  • 上游服务:被调用者是上游服务,最上游服务是数据库,比如A--->B,A依赖B服务,B是上游服务。
  • 数据采样:采样针对的是trace采样,并不会对metric进行采样,设置采样率只会影响trace的数据,一般只在服务端设置采样率。
  • Trace Segment List:一个Trace包含多个Trace Segment,一个Segment包含多个Span,每个Segment属于不同的服务. 通过traceid查询会显示多个Segment
  • Segment:它是Skywalking中提出的概念,表示一次请求在某个应用内的执行链路片段合集,一个请求在多个服务中先后产生的Segment串联起来构成一个完整的Trace
  • Span:调用链使用树型结构,每个树节点称为span,代表一次调用,所有span都会根据trace id和父span id串联成一个调用链。
  • EntrySpan:代表服务提供方(server,MQ-consumer)
  • LocalSpan:代表本地方法调用
  • ExitSpan:代表服务调用方(client,MQ-producer)
  • Trace Views:提供了trace不同的可视化格式
  • TotalDuration = SelfDuration + Duration(s) of child spans
  • Query Conditions:通过Status可以过滤有问题的请求

SkyWalking生产实战

Topology

点击服务出现以下展示

  • Inspect:点击显示该服务的对应拓扑图
  • Alarm:点击显示服务对应的报警
  • Service Dashboard:点击显示服务详情数据
  • Service Instance Dashboard:点击显示实例级数据
  • Endpoint Dashboard:点击显示接口或者方法级数据
  • Service Relationship Metrics:点击图中圆点,显示2个服务的指标交互关系,这个可以定位到网络是否有延迟,当client段延迟明显高于server端,说明网络延迟高

SkyWalking生产实战

参考