微服务-7 分布式链路追踪SkyWalking性能监控,告警 拓扑图

微服务之SkyWalking中链路追踪,告警机制
为什么需要SkyWalking?
    在微服务架构当中,一定避免不了服务与服务之间的通信,那么在很多个微服务节点同时协助工作的情况下,一个请求可能调用A服务 在A服务中又去调用B服务,在B服务中去调用C服务,如果中途的某个服务出错了,我们只能在最初的A服务中 收到请求异常失败了,具体不知道是那个服务节点出的错,每个节点有可能是一个团队负责,这也给我们排查异常增加了难度,这个时候SkyWalking出现了
SkyWalking能帮我们做些什么?
    监控每一次请求,所涉及到的微服务节点,并且会把当前请求 串成一条链,而且还自带UI集成提供了拓扑图的形式展示,还有微服务的节点调用频率,健康指数,等等 以及高版本新增加的告警机制,路由匹配机制,例如:请求达到80%异常就会调用异步通知,我们可以编写一个告警项目专门接收接口异常回调通知,然后推送到企业微信或者钉钉上,更方便了我们查看异常提醒功能,
 
概念
    探针:Agent
    表示需要集成到目标系统中的代理,或者是sdk,它负责收集遥测测试数据,包括目标系统的链路追踪和性能指标,并发送到管控后端,通俗的讲就是需要给你的每一个微服务节点都加入SkyWalking的探针,就是一个小jar包
    后台:  
    就是探针收集的数据最后推送的服务,看一下官网的解释:OAP 观测分析平台(Observability Analysis Platform)
        OAP 后端 接入Agent数据并进行分析,Agent和OAP通信走的是gRPC,端口号是11800
  1. 在 SkyWalking 5.x 中传统的方式. 以 SkyWalking 的 segment 和 span 来格式化追踪数据,甚至包括 Zipkin 数据格式化。OAP 通过分析数据段获得度量指标, 并将度量数据推送到聚合流。
  2. 考虑仅仅将追踪视为某种日志, 只提供存储和可视化能力.
    UI:
     对 SkyWalking 的用户界面进行简短介绍。
    服务追踪原理:
    spanId 服务id同一线程中唯一 ,从0开始,按照调用链从0递增
    parentSpanId 服务父级id 从哪来的 ,用来链接span
    segmentId 同一个链路中,这个值都是相同的,不同线程中,这个值不同
    traneId 在一个链路中,tranceId 都是唯一的 
 
SkyWalking初步认识(不忙操作,你先和它有个简单的照面)
    下载SkyWakling 地址:https://skywalking.apache.org/downloads/ 
下载到本地并且解压后出现如下目录:我们着重关注一下 agent目录,因为这个就是SkyWalking的探针,我们需要把这个探针copy到每个服务的节点中,并且微服务节点启动的时候还要读取这个目录里面的东西
agent内部结构
我们进入bin目录,先把skywalking启动起来,双击 startup.bat
启动成功后 然后访问页面地址 http://127.0.0.1:8080/  你可以去修改 文件 设置自己的端口,我的是8085
查看SkyWalking页面
全局控制栏:
服务:
实例信息:
端点:
拓扑图:
追踪:
SkyWalking快速集成
    本次项目在微服务的基础上做集成,我们把 skywalking的解压文件夹中的agent目录 copy到每一个微服务的项目当中,我这里copy到和src评级目录中了
copy之后的项目
在确保我们的SkyWalking已经启动成功,并且管理页面可以正常访问 如下图:
然后准备启动我们的微服务项目,这里在启动项目的同时需要给每一个微服务节点配置 启动参数:指定 SkyWalking的探针地址也就是Agent目录中的jar包
参数如下:
 
-javaagent:D:\gitcoding\nacos-parent-gateway\nacos-gateway\agent\skywalking-agent.jar
-DSW_AGENT_NAME=nacos-gateway
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
启动网关并且集成探针
 
启动服务nacos-xxxx1.2 并且集成探针
启动nacos-yyyy1.2 省略截图:三个项目都启动成功后 如下图,都被skywalking管理了
我们测试一下 请求
 
查看skywalking的追踪   可以看到本次请求的 全局id 和 左侧边栏的请求接口,如果请求成功则是蓝色, 出错 就会变成红色
拓扑图查看
 
SkyWalking 错误日志与告警机制
    skywalking 还提供了告警机制,例如请求达到了超时,或者是内部报异常 都会记录 而且只要在某个时间段 请求错误超过了百分之80 那么skywalking就会发起通知,至于通知地址我们需要单独启动一个接收错误告警通知的项目,接收错误或警告,项目内部可以集成企业微信  钉钉 直接把消息推送到 App上 更方便查看
错误日志
第一步 手动在 nacos-xxxx的服务节点上添加一个bug,如下图:这样我们从网关调用nacos-xxxx服务的时候 内部就会报错
第二步 启动nacos-xxxx 项目 并且访问 我们的网关 转发到nacos-xxxx服务上,可以看到内部报错了,
第三步 查看skywalking 里面的错误日志
告警机制:
需要修改skywalking目录中的配置文件  配置我们需要通知的地址: 我们修改 config/alarm-settings.yml文件
打开文件并且修改 最后一行  增加一个 通知的地址,这个地址需要重新启动一个web项目或者是网络通畅的项目接收,我这里是http://127.0.0.1:8999/warning/call
如果你想了解alarm-setting.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.
 
注意:修改完了skywalking的配置文件 必须重启所有项目,而且 skywalking 要第一个启动起来
http://127.0.0.1:8999/warning/call 地址对应的项目是
启动call-warning 项目 并且提供 打断点调试
然后我们 多请求几次 网关服务并转发到nacos-xxxx ,这样xxxx服务就会抛出很多异常,然后skywalking就会调用告警参数给我们http://127.0.0.1:8999/warning/call  由call-warning项目来接收
成功收到告警通知:
 
线上环境中还要设置过滤,只让SkyWalking监控当前服务的接口,本次时间有限 后续补充,网上也有很多其他案例
 
 
posted @ 2022-02-24 13:49  郎小乐  阅读(772)  评论(0)    收藏  举报