3

SkyWalking生产实战

 1 year ago
source link: https://blog.51cto.com/liuping0906/5911887
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

SkyWalking是什么

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

  • Service:提供共同行为的一组工作负载,对应cmdb里的应用名。
  • Service Instance:同一个Service下的一个工作负载,比如某个java应用的一个实例进程。
  • Endpoint:服务的接口或者方法名,或者是http uri。
SkyWalking生产实战_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生产实战_skywalking_02

需要注意的配置

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管理

定义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配置

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

SkyWalking生产实战_skywalking_03
服务详情数据

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

  • 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生产实战_全链路监控_04
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生产实战_skywalking_05
Topology

点击服务出现以下展示

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK