基于SkyWalking的分布式跟踪系统 - 异常告警

简介: 基于SkyWalking的分布式跟踪系统 - 异常告警

通过前面2篇文章我们搭建了SW的基础环境,监控了微服务,能了解所有服务的运行情况。但是当出现服务响应慢,接口耗时严重时我们需要立即定位到问题,这就需要我们今天的主角--监控告警,同时此篇也是SW系列的最后一篇。


UI参数


首先我们认识一下SW DashBoard上的几个关键参数,如下图所示


告警配置


告警流程

skywalking发送告警的基本原理是每隔一段时间轮询skywalking-collector收集到的链路追踪的数据,再根据所配置的告警规则(如服务响应时间、服务响应时间百分比)等,如果达到阈值则发送响应的告警信息。发送告警信息是以线程池异步的方式调用webhook接口完成,(具体的webhook接口可以使用者自行定义),从而开发者可以在指定的webhook接口中自行编写各种告警方式,钉钉告警、邮件告警等等。

规则配置

告警的核心由一组规则驱动,这些规则定义在 config/alarm-settings.yml,打开之后如下所示:

告警规则的定义分为两部分。

  • 告警规则。它们定义了应该如何触发度量警报,应该考虑什么条件。
  • [网络钩子](#Webhook}。当警告触发时,哪些服务终端需要被告知。

告警规则主要有以下几点

  • Rule name。 在告警信息中显示的唯一名称。必须以_rule结尾。
  • Metrics name。  也是oal脚本中的度量名。
  • Include names。 其下的实体名称都在此规则中。比如服务名,终端名。
  • Threshold。 阈值。
  • OP。  操作符, 支持 >, <, =。
  • Period.。  多久检查一次当前的指标数据是否符合告警规则这是一个时间窗口,与后端部署环境时间相匹配。
  • Count。  在一个Period窗口中,如果values超过Threshold值(按op),达到Count值,需要发送警报。
  • Silence period。 在时间N中触发报警后,在TN -> TN + period这个阶段不告警。默认情况下,它和Period一样,这意味着相同的告警(在同一个Metrics name拥有相同的Id)在同一个Period内只会触发一次

Webhook

SkyWalking 的告警 Webhook 要求对等方是一个 Web 容器. 告警的消息会通过 HTTP 请求进行发送, 请求方法为 POST, Content-Type 为 application/json, JSON 格式基于 List<org.apache.skywalking.oap.server.core.alarm.AlarmMessage, 包含以下信息.

  • scopeId. 所有可用的 Scope 请查阅 org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.
  • name. 目标 Scope 的实体名称.
  • id0. Scope 实体的 ID.
  • id1. 未使用.alarmMessage. 报警消息内容.
  • startTime. 告警时间, 位于当前时间与 UTC 1920/1/1 之间.
[{
  "scopeId": 1,
        "name": "serviceA",
  "id0": 12,
  "id1": 0,
  "alarmMessage": "alarmMessage xxxx",
  "startTime": 1560524171000
}, {
  "scopeId": 1,
        "name": "serviceB",
  "id0": 23,
  "id1": 0,
  "alarmMessage": "alarmMessage yyy",
  "startTime": 1560524171000
}]


代码实战


  • 编写实体类用于接收sw告警消息
@Data
publicclass SwAlarmVO {
    privateint scopeId;
    private String name;
    privateint id0;
    privateint id1;
    private String alarmMessage;
    privatelong startTime;
}
  • 编写webhook接口
@RestController
@RequestMapping("sw")
@Log4j2
public class AlarmController {
    @PostMapping("/alarm")
    public void alarm(@RequestBody List<SwAlarmVO> alarmList){
        log.info("skywalking alarm message:{}",alarmList);
        //todo doalarm
    }
}
  • 修改告警配置,开放webhook接口
  • 为了模拟请求调用慢,我们在代码中使用Thread.sleep(1000)增加接口耗时,然后等待webhoook接口告警响

告警详细信息如下:

[SwAlarmVO(scopeId = 2, name = dubbo - consumer - pid: 13812 @ jianzhang11, id0 = 28, id1 = 0, alarmMessage = Response time of service instance dubbo - consumer - pid: 13812 @ jianzhang11 is more than 1000ms in 2 minutes of last 10 minutes, startTime = 1573122018755), SwAlarmVO(scopeId = 2, name = dubbo - provider2 - pid: 14108 @ jianzhang11, id0 = 25, id1 = 0, alarmMessage = Response time of service instance dubbo - provider2 - pid: 14108 @ jianzhang11 is more than 1000ms in 2 minutes of last 10 minutes, startTime = 1573122018755)]

说明webhook能正常接收到sw的告警信息,后续的消息通知直接定制开发即可。

目录
相关文章
|
17天前
|
存储 运维 负载均衡
构建高可用性GraphRAG系统:分布式部署与容错机制
【10月更文挑战第28天】作为一名数据科学家和系统架构师,我在构建和维护大规模分布式系统方面有着丰富的经验。最近,我负责了一个基于GraphRAG(Graph Retrieval-Augmented Generation)模型的项目,该模型用于构建一个高可用性的问答系统。在这个过程中,我深刻体会到分布式部署和容错机制的重要性。本文将详细介绍如何在生产环境中构建一个高可用性的GraphRAG系统,包括分布式部署方案、负载均衡、故障检测与恢复机制等方面的内容。
69 4
构建高可用性GraphRAG系统:分布式部署与容错机制
|
1月前
|
消息中间件 中间件 数据库
NServiceBus:打造企业级服务总线的利器——深度解析这一面向消息中间件如何革新分布式应用开发与提升系统可靠性
【10月更文挑战第9天】NServiceBus 是一个面向消息的中间件,专为构建分布式应用程序设计,特别适用于企业级服务总线(ESB)。它通过消息队列实现服务间的解耦,提高系统的可扩展性和容错性。在 .NET 生态中,NServiceBus 提供了强大的功能,支持多种传输方式如 RabbitMQ 和 Azure Service Bus。通过异步消息传递模式,各组件可以独立运作,即使某部分出现故障也不会影响整体系统。 示例代码展示了如何使用 NServiceBus 发送和接收消息,简化了系统的设计和维护。
48 3
|
1月前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现
消息队列系统中的确认机制在分布式系统中如何实现
|
1月前
|
消息中间件 存储 监控
【10月更文挑战第2天】消息队列系统中的确认机制在分布式系统中如何实现
【10月更文挑战第2天】消息队列系统中的确认机制在分布式系统中如何实现
|
1月前
|
存储 开发框架 .NET
C#语言如何搭建分布式文件存储系统
C#语言如何搭建分布式文件存储系统
70 2
|
1月前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现?
消息队列系统中的确认机制在分布式系统中如何实现?
|
2月前
|
存储 块存储
ceph分布式存储系统常见术语篇
关于Ceph分布式存储系统的常见术语解释和概述。
111 1
ceph分布式存储系统常见术语篇
|
1月前
|
存储 分布式计算 监控
C# 创建一个分布式文件存储系统需要怎么设计??
C# 创建一个分布式文件存储系统需要怎么设计??
35 0
|
3月前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现?
消息队列系统中的确认机制在分布式系统中如何实现?
|
3月前
|
机器学习/深度学习 分布式计算 PyTorch
构建可扩展的深度学习系统:PyTorch 与分布式计算
【8月更文第29天】随着数据量和模型复杂度的增加,单个GPU或CPU已无法满足大规模深度学习模型的训练需求。分布式计算提供了一种解决方案,能够有效地利用多台机器上的多个GPU进行并行训练,显著加快训练速度。本文将探讨如何使用PyTorch框架实现深度学习模型的分布式训练,并通过一个具体的示例展示整个过程。
155 0

热门文章

最新文章