skywalking使用
初识
Skywalking是一个可观测性分析平台(Observability Analysis Platform简称OAP) 和应用性能管理系统(Application Performance Management简称APM)。
- 提供分布式链路追踪、服务网格(Service Mesh)遥测分析、度量(Metric)聚合和可视化一体化解决方案
特点
多语言自动探针,Java,.NET Core和Node.JS。
多种监控手段,语言探针和service mesh。
轻量高效。不需要额外搭建大数据平台。
模块化架构。UI、存储、集群管理多种机制可选。
支持告警。
优秀的可视化效果。
架构
- 探针(agent)负责进行数据的收集,包含了Tracing和Metrics的数据,agent会被安装到服务所在的 服务器上,以方便数据的获取。
- 可观测性分析平台OAP(Observability Analysis Platform),接收探针发送的数据,并在内存中使用分析引擎(Analysis Core)进行数据的整合运算,然后将数据存储到对应的存储介质上,比如 Elasticsearch、MySQL数据库、H2数据库等。同时OAP还使用查询引擎(Query Core)提供HTTP查 询接口。
- Skywalking提供单独的UI进行数据的查看,此时UI会调用OAP提供的接口,获取对应的数据然后进行展示
概念
- 端点就是对外提供的接口,例如用户服务对外提供的HTTP接口/usr/queryAll就是一个端点
一、skywalking在kubesphere上的部署
1、oap-server部署
使用镜像 core.harbor.domain:32388/library/skywalking-oap-server:8.6.0-es7
在kubesphere上创建配置文件 application.yml
-
修改config/application.yml
- 将storage:中selector:设置为elasticsearch7
-
在elasticsearch7:中,根据实际情况,修改clusterNodes等信息
-
创建elasticsearch服务
- 在kubesphere上创建配置文件 elasticsearch.yml
- elasticsearch.yml修改clusterNodes等信息(对应上文)
创建oap-server服务和工作负载,配置上application.yml
2、ui 界面部署
- 使用镜像 core.harbor.domain:32388/library/skywalking-ui:8.6.0
- 创建oap-server服务和工作负载,配置环境变量
collector.ribbon.listOfServers: skywalking-oap-server.nobody:12800 //指向前面部署的oap-server
3、项目集成agent Jar包
将skywalking拷贝到kubesphere的宿主机上, skywalking/agent/skywalking-agent.jar
-
在服务上挂载使用主机地址 hostPath: path: /var/local/skywalking(即skywalking文件夹地址)
-
环境变量添加
name: JAVA_TOOL_OPTIONS
value: ' -javaagent:/maven/skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=zuul //服务名称,在ui界面显示 -Dskywalking.collector.backend_service=skywalking-oap-server.nobody:11800' //server地址
二、skywalking界面功能介绍
-
仪表盘:查看被监控服务的运行状态
-
服务维度
- 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:每个服务实例的请求成功率
-
服务实例维度
- 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
- Service Instance Load:当前实例的每分钟请求数
-
端点维度
- 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:当前端点每个时间段的请求成功率
- Endpoint Load in Current Service:每个端点的每分钟请求数
-
拓扑图:以拓扑图的方式展现服务关系
-
追踪:追踪接口内部调用过程
- 左侧:api接口列表,红色-异常请求,蓝色-正常请求
- 右侧:api追踪列表,api请求连接各端点的先后顺序和时间
性能剖析:单独端点进行采样分析,并可查看堆栈信息
告警:触发告警的告警列表,包括实例,请求超时等
界面介绍 参考链接
三、skywalking告警
- 在kubesphere上创建配置文件 alarm-settings.yml
- 编辑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
exclude-names:
- service_c
# 阈值,对于多种指标值的如percentile可以配置P50、P75、P90、P95、P99的阈值
threshold: 75
# 操作符
op: <
# 评估度量标准的时间长度
period: 10
# 度量有多少次符合告警条件后,才会触发告警
count: 3
# 检查多少次,告警触发后保持沉默,默认周期相同
silence-period: 10
# 该规则触发时,发送的通知消息
message: Response time of service {name} is more than 50ms in 1 minutes of last 1 minutes.
- 配置webhook接口(将告警信息传出)
webhooks:
- http://ip:port/skyWalking/alarm
- oap-service配置上alarm-settings.yml,并重启
四、skywalking日志集成
- 在kubesphere上创建配置文件 agent.config
- 编辑agent.config(aop-server和agent在同一主机不需要改动配置)
plugin.toolkit.log.grpc.reporter.server_host=skywalking-oap-server.nobody
plugin.toolkit.log.grpc.reporter.server_port=11800
- 项目代码修改
- pom文件添加 jar依赖(注意和agent的版本一致)
<!-- 引入skywalking 日志依赖 -->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>8.6.0</version>
</dependency>
- logback-spring.xml 修改
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<!--加上skywalking的追踪id-->
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</encoder>
</appender>
<!-- skywalking grpc 日志收集 8.4.0版本开始支持 -->
<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} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</encoder>
</appender>
- 项目部署
- 项目上配置应用上 agent.config
-
ui页面显示
附录
- [SkyWalking 8 官方文档 ]
- [SkyWalking 8 参考博客 ]