告别低效繁琐的Prometheus告警管理,Nightingale助你快速响应故障!

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
云拨测,每月3000次拨测额度
简介: Prometheus的告警规则、记录规则都是采用配置文件管理,适合奉行Infrastructure as Code的公司或团队内部使用。但如果要把监控能力开放给全公司,就要支持协同操作的 UI,让各个团队互不干扰的同时共享成果

Prometheus的告警规则、记录规则都是采用配置文件管理,适合奉行Infrastructure as Code的公司或团队内部使用。但如果要把监控能力开放给全公司,就要支持协同操作的 UI,让各个团队互不干扰的同时共享成果。


开源方案:


Grafana


擅长可视化,监控绘图领域的事实标准


夜莺(Nightingale)


侧重告警管理,可通过夜莺搭建公司级的监控系统,把监控告警能力赋予公司所有团队。


1 夜莺简介

最初滴滴开源,之后捐给中国计算机学会开源发展委员会(CCF ODC),整合云原生开源生态的众多能力,为用户提供开箱即用、一体化全方位的云原生监控解决方案。


夜莺GitHub

文档

1.1 夜莺架构


4.png

Agents

监控数据采集器,夜莺可对接多种 Agent,如 Categraf、Telegraf、Grafana-Agent、Datadog-Agent。这些 Agent 都是 PUSH 模型,周期性采集监控数据,推给 Server 的 HTTP 接口。


Server

接收到数据后,通过 Remote Write 协议把数据转发给时序库,这里时序库使用Prometheus,Prometheus 要想接收 Remote Write 协议的数据,需在启动参数开启 --enable-feature=remote-write-receiver。也可使用M3DB、VictoriaMetrics、Thanos等作为时序库。


Server相当于Pushgateway,也是告警引擎,周期性从 MySQL 中同步告警规则,做规则判断生成告警事件并发送,对标Prometheus的告警引擎和Alertmanager模块。Server 还会往 Redis 发送心跳信息,不过后面的版本有计划下掉 Redis,直接使用 MySQL 处理心跳。


Webapi 模块

提供 HTTP 接口,与前端 JavaScript 交互:


响应管理请求,比如告警规则、屏蔽规则、监控大盘的增删改查

响应时序数据查询,作为一个 Proxy 把请求转发给后面的时序库,等时序库返回结果之后再转发给前端

若有些监控数据使用 Exporter 采集,就需 PULL 模型的采集支持。通常有3种做法:


直接使用 Prometheus 本身,配置 Scrape 规则

单独部署一个 agent mode 模式的 Prometheus 作为抓取器,和时序库的职能做进程级别的拆分

使用其他支持 PULL 模式的抓取器,如 Categraf、Grafana-Agent

2 部署夜莺

最简单方式 Docker compose:


git clone https://github.com/ccfos/nightingale.git

cd docker

docker-compose up -d


浏览器访问 nwebapi 提供的 18000 端口就能看到登录页面,默认用户是root,密码 root.2020。


对Kubernetes和Helm熟悉,可采用 Helm 的方式部署。最常用还是 二进制的方式部署。


服务端部署完成之后,可采集一些监控数据看看真实效果,推荐 安装 Categraf。也可使用其他熟悉的采集器。


3 告警管理

Prometheus告警管理在prometheus.yml配置告警规则,在alertmanager.yml中配置发送规则,都是需要修改配置文件的,上百人使用的话不好协同管理。而夜莺提供UI配置能力(也有API),并在一些方面增强,如更丰富的告警规则配置、历史事件存档、活跃事件聚合查看、对接告警自愈等。


3.1 规则管理

一个公司可能会有几十上百团队配置成千上万条告警规则,显然不能用一个扁平化的表格来罗列管理,夜莺引入了一个 业务组 的概念,每一条规则都要归属于某一个业务组,只有这个业务组的人可以管理组内的规则。


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-31KuFYnD-1682925334603)(null)]


当然,业务组下面不仅有告警规则,还有监控大盘、监控对象、屏蔽规则、订阅规则、告警自愈脚本等等。业务组是夜莺里最重要的一个管理概念。


3.2 规则配置

核心还是 PromQL和持续时长。增强配置,如规则生效时间段、是否仅在本业务组生效、是否启用恢复通知、留观时长、最大发送次数等。

3.png



夜莺告警规则是把PromQL和发送方式整合到一条规则,这和Alertmanager不同,Prometheus告警规则只有PromQL、持续时长、附加标签、注解这些基本信息,至于发给谁、怎么发都在 Alertmanager 配置。


Prometheus+Alertmanager,可看做订阅式,告警规则中不指定接收者,在 Alertmanager 的配置中统一设置过滤条件和对应的接收者。非常灵活,但灵活东西需定规范,否则易乱,如大家统一按照业务线标签做订阅:


就要求时序数据都要打上业务线的标签

或把业务线的标签放到告警规则的附加标签

Alertmanager适合场景

所有告警都统一由某团队负责时,Prometheus+Alertmanager算最佳实践。


Borgmon集群和Borg集群一一对应,Borgmon要处理对应Borg集群上的所有应用的告警,不知道在 Borgmon 中是怎么处理告警规则的?在 Borgmon 中,告警规则是通过配置文件定义的。Borgmon 的配置文件通常包括:


告警规则:定义监控指标的阈值和告警策略,例如当 CPU 使用率超过 80% 时触发告警,发送邮件通知运维人员。


数据源:定义监控数据的来源,如 Prometheus、Graphite。


数据转换:定义监控数据的转换方式,如将监控数据进行聚合、过滤、计算。


告警通知:定义告警通知的方式和接收人,如发送邮件、短信、微信。


在 Borgmon 中,每个 Borg 集群都对应一个 Borgmon 集群,Borgmon 集群负责处理该 Borg 集群上所有应用的告警。当监控指标的值超过阈值时,Borgmon 会根据告警策略触发告警,并将告警信息发送给指定的接收人。


Borgmon的配置文件是动态加载,可通过 API 接口或命令行工具修改配置文件,实现灵活的告警规则管理。


夜莺处理方式像Datadog,每个团队配置自己的告警规则,发给自己这个团队,即自己管自己的,不需要把告警规则和接收规则拆到两个地方分别配置,我个人觉得更加直观一些,而且夜莺也支持订阅方式。


告警屏蔽

对一些告警事件做静默处理。对于那些预期内的告警,处理人不希望被打扰就会短时间做一下屏蔽,通常是根据标签对事件做过滤。


夜莺目前只能按时间段屏蔽,比如屏蔽凌晨0点到早上7点的所有告警。


告警订阅

像Alertmanager,可根据告警规则或标签做事件订阅,类似邮件抄送。


比如我是业务方,我的业务跑在Kubernetes,Kubernetes平台发生重大故障,我希望及时知道,可订阅Kubernetes所有严重告警。虽然我希望得知Kubernetes的严重告警,但我毕竟不是Kubernetes的运维人员,所以我在订阅这类事件时,不希望用电话这种方式接收告警,只希望用邮件之类轻量级方式,所以订阅规则中通常可以重新定义发送媒介、重新定义事件级别。


历史告警存档

夜莺依赖MySQL做数据持久化,所以告警事件可直接存入数据库,所有的历史告警都可以追踪查询。虽然这个功能很简单,但很多企业都需要,自证清白时很重要。


所有历史告警存档也可用于后续分析,从这些数据易知哪些业务线的告警发送得最多,消耗电话、短信费用最多,哪些业务线的告警解决得最快,哪些人是接收告警的劳模。从侧面反映出这个团队的告警策略需要优化,或者业务稳定性需优化。


活跃告警聚合

所谓活跃告警就是未恢复的告警,活跃告警功能很重要,应该作为日常巡检必须要关注的页面。


为减少查看的心理负担,便于给告警事件分类,夜莺支持聚合卡片视图,而且聚合规则是可以自定义的,比如当前有300条未恢复的告警,我们可以根据告警规则聚合查看,也可以根据地域、业务线、服务、机器等维度聚合查看。


2.png


告警自愈

当告警事件触发之后,能自动触发一个恢复动作来止损,这就是所谓的告警自愈。一般监控系统都会支持Webhook,告警触发之后自动回调某个接口,我们就可以在这个接口里写一些自动化逻辑,但是这种方式还是要写个HTTP Server的,成本略高。夜莺除了支持Webhook之外,还可以在告警时自动执行某个脚本,用户就可以直接在脚本里写逻辑了。


告警自愈依赖 ibex 模块,这是一个批量执行脚本的小工具,你可以安装测试一下。不过有些公司会觉得有安全隐患,不敢开启这个功能,我觉得纯内网环境问题不大,如果开放到公网的话确实需要小心。


自愈脚本要能够在机器上运行,需要有较强的权限管控,这个权限也是依赖业务组的机制,只有这个业务组的管理人员,才能去这个组内的机器上跑脚本。夜莺里有个对象管理,主要就是管机器的,设计对象管理功能很重要的一个原因就是为了支持告警自愈。


失联告警

夜莺主用push模式接收监控数据,所以感知监控对象失联是问题。PromQL 有 absent 函数,但用起来麻烦,如果要为100台机器配置失联告警,就要配置100条告警规则。


夜莺在服务端加了个逻辑,接收到监控数据后,自动从数据中解析出 ident 标签当机器标识,然后为这机器生成 target_up 指标。这机器有监控数据上报,则 target_up 的值设置为 1;如果长时间收不到机器的指标上报,则 target_up 的值设置为 0。于是,只需配置一条告警规则就覆盖所有监控对象。


4 Prometheus Yaml迁移

老 Yaml 文件管理规则可不动,甚至如果 Prometheus 只是给自己团队使用的话也不太需要引入夜莺,只有那些想要 把监控能力开放给全公司用的场景 才需要引入夜莺,而且新规则可以用夜莺管理,老的规则不迁移或者慢慢迁移都是可以的。 技术是为解决现实问题,没有非黑即白。


5 总结

增强Prometheus告警管理能力,因为Prometheus的Yaml文件管理方式不方便公司级协同管理。Grafana和夜莺都可以解决这个问题:


Grafana更擅长看图

夜莺更擅长告警管理

夜莺告警管理能力:


规则管理,包括告警规则、屏蔽规则、订阅规则

事件管理,包括历史事件、活跃事件

告警自愈

11.png

目录
相关文章
|
3月前
|
Prometheus Cloud Native 机器人
Prometheus告警简介
Prometheus告警简介
|
2月前
|
Prometheus 监控 Cloud Native
使用 Prometheus 配置 SLO 监控和告警
使用 Prometheus 配置 SLO 监控和告警
|
5月前
|
Prometheus Kubernetes Cloud Native
Prometheus Operator创建告警规则文件
Prometheus Operator创建告警规则文件
39 0
|
6月前
|
Prometheus 监控 Kubernetes
k8s中部署prometheus监控告警系统-prometheus系列文章第一篇
k8s中部署prometheus监控告警系统-prometheus系列文章第一篇
|
9月前
|
Prometheus 运维 Cloud Native
【2023】Prometheus-接入Alertmanager并实现邮件告警通知
【2023】Prometheus-接入Alertmanager并实现邮件告警通知
285 0
|
10月前
|
Prometheus 运维 监控
基于Prometheus和Grafana的监控平台 - 运维告警
基于Prometheus和Grafana的监控平台 - 运维告警
199 0
|
11月前
|
弹性计算 Prometheus 监控
《2021 阿里云可观测技术峰会演讲实录合辑(下)》——一、基于OPLG从0到1构建统一可观测平台实践——场景实践2:如何基于Prometheus和Grafana做统一的监控和告警
《2021 阿里云可观测技术峰会演讲实录合辑(下)》——一、基于OPLG从0到1构建统一可观测平台实践——场景实践2:如何基于Prometheus和Grafana做统一的监控和告警
231 0
|
数据采集 Prometheus 运维
彻底搞懂监控系统,使用Prometheus和Grafana 如何实现运维告警?
之前我们搭建好了监控环境并且监控了服务器、应用,我们可以实时了解当前被应用平台的运行状态,但是我们不可能时时坐在电脑边上盯着DashBoard,这就需要一个告警功能,当服务器或应用指标异常时发送告警,通过邮件或者短信的形式告诉运维人员及时处理。所以,接下来就来介绍非常重要的功能——告警。
彻底搞懂监控系统,使用Prometheus和Grafana 如何实现运维告警?
|
存储 Prometheus Cloud Native
prometheus告警规则管理
prometheus告警规则管理