首页 > 其他分享 >【云原生•监控】夜莺可观测性之告警系统设计 - 2​

【云原生•监控】夜莺可观测性之告警系统设计 - 2​

时间:2023-05-24 13:00:45浏览次数:46  
标签:原生 触发 业务组 夜莺 PromQL 事件 规则 告警

【云原生•监控】夜莺可观测性之告警系统设计 - 2

前言

「笔者已经在公有云上搭建了一套临时环境,可以先登录体验下:」

http://124.222.45.207:17000/login
账号:root/root.2020

告警功能

内置规则

【内置规则】菜单主要提供系统中内置的一些告警规则,按照组件类型进行分类分组:

【云原生•监控】夜莺可观测性之告警系统设计 - 2​_AlertManager

内置规则仅仅只是提供告警规则模板文件,是不会生效触发告警的,用户需要将使用的告警模板克隆到业务组下,才能使用这些告警模板。

告警规则

【告警规则】菜单用于管理每个业务组的告警规则,这些告警规则一方面是从【内置规则】克隆方式导入的,另一方面也可以【新增】方式创建:

【云原生•监控】夜莺可观测性之告警系统设计 - 2​_夜莺监控_02

【启用】开关用于控制告警是否生效。

下面我们来看下告警规则配置:

【云原生•监控】夜莺可观测性之告警系统设计 - 2​_prometheus_03

主要功能说明:

  • 规则名称:简明扼要的说明当前告警内容,比如"磁盘IO高告警";
  • 规则配置:
  1. 告警分为:MetricHostMetric当前只支持Prometheus,即基于指标使用PromQL表达式进行告警;Host告警是内置实现对Categraf采集点相关的告警。
  2. Host告警主要基于Categraf采集点告警,可定制能力比较弱,主要使用内置实现的:机器失联、机器机器失联和机器时间偏移,这块告警主要依赖Categrafheartbeat功能,同时该告警只能中心服务器,对于边缘部署的n9e-alert组件没法使用。
  3. 可定制强的主要使用的Metric告警:
  1. 关联数据源:PromQL执行查询数据源。
  2. PromQL:填写告警规则的PromQL语句,这里可以填写多条,主要场景比如"CPU% > 80%"触发三级告警,"CPU% > 90%"触发二级告警,基于不同阈值触发不同告警等级的告警,这里有个【级别抑制】开关,打开级别抑制,则高等级告警抑制低等级告警,比如"当前CPU% > 95%",上面配置的二级告警和三级告警都会触发,但是用户肯定希望收到更高等级的二级告警,就可以打开【级别抑制】开关,避免过多告警干扰。
  3. 执行频率:PromQL执行周期间隔,单位:秒。
  4. 持续时长:告警持续多久才会触发该告警,比如"CPU% > 80%"告警,执行频率15秒,持续时长60s,则连续抓取4个点CPU使用率都高于80%才会触发告警,如果对灵敏度要求比较高,可以设置持续时长=0,则只要检测到CPU使用率>80%,会立即触发告警。
  • 生效规则:用于配置告警规则生效时间
  • 系统提供的生效时间还是比较灵活,比如可以细化到星期几的哪个时间区间告警;
  • 尽在本业务组生效:依赖告警事件中必须存在"ident"标签,查询告警"ident"标识机器所属的业务组和告警规则所属的业务组是否匹配,不匹配则过滤掉,这个主要用来实现告警隔离,比如业务A组配置的告警规则更可能作用于业务组A管理下的机器告警,对业务组B机器告警也没用,告警出来没法处理,注意:该告警依赖"ident"标签识别是代码写死不能调整。

【云原生•监控】夜莺可观测性之告警系统设计 - 2​_夜莺监控_04

  • 通知配置:该部分主要配置告警触发后通过不同媒介通知到相关人员。
  • 三个核心参数:
  • 留观时长:该参数主要预防告警波动,比如告警恢复后几十后又触发,
  • 重复通知间隔:避免告警风暴,告警触发通知后,后面还在源源不断的触发告警,也必须等到"重复通知间隔"时间后才能再次触发告警通知,如果"重复通知间隔=0"则同一告警事件在一个触发周期内只会发送一次告警。
  • 最大发送次数:同一告警事件最多发送几次告警。

【云原生•监控】夜莺可观测性之告警系统设计 - 2​_AlertManager_05

活跃告警

【活跃告警】菜单展示当前触发中的告警,可以从业务组和告警等级维度展示:

【云原生•监控】夜莺可观测性之告警系统设计 - 2​_AlertManager_06

还可以基于告警规则维度展示:

【云原生•监控】夜莺可观测性之告警系统设计 - 2​_AlertManager_07

历史告警

【历史告警】菜单展示全量告警信息,包括所有历史触发过的告警:

【云原生•监控】夜莺可观测性之告警系统设计 - 2​_夜莺监控_08

告警屏蔽

【告警屏蔽】菜单实现告警屏蔽规则或者说告警静默规则,支持固定时间和周期时间,比较灵活,可以根据事件源屏蔽,也可以根据事件标签屏蔽:

【云原生•监控】夜莺可观测性之告警系统设计 - 2​_监控告警_09

告警系统如何设计实现

夜莺监控系统在告警引擎的建设上,提供了诸多灵活配置能力,而且具备多样的告警策略,下面我们来看一下告警系统是如何设计实现的。

【云原生•监控】夜莺可观测性之告警系统设计 - 2​_夜莺监控_10

「核心流程解读:」

1、对告警系统整个核心流程梳理,可以分为三个主要阶段(「注意图中红色方块重要节点」):第一个阶段完成基于异常点构建告警事件;第二个阶段基于告警事件计算告警是否触发;第三个阶段则是告警触发后置处理,包括持久化、告警发送等处理。

2、基于异常点构建告警事件阶段:异常点检索主要分为两种PromQLHost

a、Host告警主要基于target表中heartbeat数据计算,比如"机器失联"则判断target表中update_at最后更新时间距当前时间差超过配置阈值,则触发机器失联告警,heartbeat完整数据是存储到Redis中,见下图:

【云原生•监控】夜莺可观测性之告警系统设计 - 2​_AlertManager_11

b、检索出来的异常点构建成AleretCurEvent,然后通过静默筛选,不通过的会被丢弃,千万注意下这里对丢弃的数据是没有任何记录的,没有涉及屏蔽告警表。

c、然后依据告警规则中配置的持续时长参数,筛选满足要求的告警事件,进入到fireEvents集合中,即该集合中告警满足触发前置条件。

3、基于告警事件计算告警是否触发阶段:fireEvents集合中告警是否可以真正告警触发还要看这一阶段处理。

a、经过级别抑制筛选掉低级别告警事件;

b、然后根据重复通知间隔和最大发送次数又会筛选掉一部分告警事件;

c、将最后满足条件的告警事件更新到fires集合中,并进行日志记录这些告警事件,然后发送到EventQueue队列中,表示当前这些告警事件是满足触发条件的。

4、告警触发后置处理阶段:满足触发条件的告警事件进入到EventQueue,这里采用生产者/消费者模式实现,对应的存在一个消费者LoopConsume循环从EventQueue中提取告警事件进行后续处理。这里的后续处理主要包括:

a、持久化:将告警事件写入到数据库的全量告警表和活跃告警表中;

b、依据配置进行告警订阅和告警发送处理。



【云原生•监控】夜莺可观测性之告警系统设计 - 2​_AlertManager_12

                                                    [更多云原生监控运维,请关注微信公众号:Reactor2020]



标签:原生,触发,业务组,夜莺,PromQL,事件,规则,告警
From: https://blog.51cto.com/u_16014310/6338694

相关文章

  • 关于c#原生sql的封装
     //1将实体对象动态转换为原生sql语句(增,删,改,查),查暂时只有单表查询,多实体的动态生成暂时还没想出来usingMicrosoft.EntityFrameworkCore;usingMicrosoft.EntityFrameworkCore.Metadata.Internal;usingMicrosoft.Extensions.Hosting;usingMISSION.Entitys;usingMISSION......
  • dom、js原生常用api, 兼容ie等主流浏览器(持续更新)
    开发组件库必须知道的东西/***获取scrollTop*@param{HTMLElement|window}element-dom元素或者window对象*@returns{number}*/functiongetScrollTop(element){if(element===window){returnwindow.pageYOffset||document.documentElemen......
  • prometheus学习笔记-alertmanger告警配置
    以上是prometheus架构图,一个完整的监控流程是数据采集(exporter),采集到数据之后,做数据可视化(grafana),然后是监控告警部分。promethues的角色是数据的采集,存储,定制告警规则,数据的展示是grafna,告警则是借助alertmanger来实现。详细参考官方网站https://prometheus.io/docs/alertin......
  • 如何在EasyCVR视频融合平台通过接口获取告警的录像以及快照?
    EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。为了便于用户二次开发、集成与调用,我们也提供了丰富的API接......
  • 云原生周刊:2023 年可观测性状态报告发布 | 2023.5.22
    Splunk与EnterpriseStrategyGroup合作发布了StateofObservability2023,这是一份年度全球研究报告,探讨了可观测性在管理当今日益复杂的技术环境中的作用。该报告将可观测性领导者定义为具有至少24个月的可观察性经验的组织。此外,领导者在以下五个因素中排名最高:跨所有可......
  • 北京站丨云原生技术实践营邀请您参加!
    活动简介云原生(CloudNative)作为云计算的再升级,已经成为新的发展热点。随着新的技术发展,云原生的概念在不断的演化,各行各业的IT架构转型历程也是伴随云原生技术发展逐步演进,从探索云计算、分布式等新技术的规模化运用,到加速云原生布局,全面落地云原生技术,构建云原生生态。本期......
  • 原生IP是什么意思?对网络爬取有什么帮助?
    IP地址谁都懂,可是原生IP就未必了。2023年,会挂梯子真的已经不算啥稀奇事,但是通常免费梯子提供的IP地址都是共享的,早就不知道转经了多少手,很容易被系统判定为代理IP从而受限。而原生IP是一手的、纯净的,可谓是“出淤泥而不染”,它对网络爬取有莫大作用,用了原生IP,就好比变身成为鼓上蚤时......
  • 日本原生IP对于日本网站爬取的作用
    现在拓展国外业务非常热门,而日本作为隔壁“富得早”的邻居,坐拥了庞大的市场,自然而然受到了我国企业家的关注。而秉持着“不打无准备的仗”这一原则,大多数国内企业进军日本市场之前,都会用各种方式获取日本市场的各种讯息。而日本原生IP就是获得情报的保障。下面我们来聊一聊日本原生......
  • 云原生之使用Docker部署RabbitMQ消息中间件
    (云原生之使用Docker部署RabbitMQ消息中间件一、RabbitMQ介绍1.RabbitMQ简介RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。RabbitMQ是一个开源的消息代理的队列服务器,用来通过普通协议在完全不同的应用之间共享数据。2.RabbitMQ特点开源、性能优秀,稳定......
  • 【Swift开发】混合开发-React Native集成到原生iOS项目
    一、场景描述针对目前项目需求,部分功能需要动态热部署,因此考虑使用ReactNative。下面有个Demo介绍原生iOS项目是如何与ReactNative集成的。先贴下ReactNative中文网是官方教程:ReactNative嵌入到现有原生应用。对老项目来说,官方推荐使用第三方包管理器CoCoaPods来自动集成,但是考......