夜莺-Nightingale
夜莺V7
项目介绍 功能概览
部署升级 部署升级
数据接入 数据接入
告警管理 告警管理
数据查看 数据查看
功能介绍 功能介绍
API FAQ
夜莺V6
项目介绍 架构介绍
快速开始 快速开始
黄埔营
安装部署 安装部署
升级
采集器 采集器
使用手册 使用手册
API API
数据库表结构 数据库表结构
FAQ FAQ
开源生态
Prometheus
版权声明
第1章:天降奇兵 第1章:天降奇兵
第2章:探索PromQL 第2章:探索PromQL
第3章:Prometheus告警处理 第3章:Prometheus告警处理
第4章:Exporter详解 第4章:Exporter详解
第5章:数据与可视化 第5章:数据与可视化
第6章:集群与高可用 第6章:集群与高可用
第7章:Prometheus服务发现 第7章:Prometheus服务发现
第8章:监控Kubernetes 第8章:监控Kubernetes
第9章:Prometheus Operator 第9章:Prometheus Operator
参考资料

夜莺告警常见问题排查思路

本文将为大家介绍夜莺监控产生告警和通知的原理,并提供常见问题的排查思路。解决问题最有效的方式是了解其中的原理和收集足够多的现场信息。通过本文,你将了解夜莺的告警事件从产生到通知用户的整个处理流程,从而快速定位告警相关的常见问题。

正文

首先看下夜莺告警的整个数据处理流程,如下图

夜莺告警

通过上图我们可以了解到,夜莺的告警处理流程主要分三部分

  • 定期同步告警规则和查询数据

  • 对查到的异常数据做分析处理

  • 将告警事件通知给第三方(电话、短信、IM、平台)

根据上面的流程图,我们可以按部就班地收集信息,一步步定位问题,下面我们看下常见的问题

常见问题1:满足条件了,但没有生成告警,如何排查

遇到问题我们可以 **先问是不是,再问怎么解决。**所以我们可以先确认告警是否真的没产生,从数据流程图可以看到,如果有告警产生,在第8步会记录到数据库,我们可以在告警历史列表页看到,所以可以先确认下告警历史列页是否已经有告警记录了,如果有了,那可能你的问题应该是告警没有通知成功,可以看第二个常见问题。

如果告警事件确实没产生,我们可以根据数据流,从前往后收集信息。

第一步

在第一步中,负责告警的模块,会定期同步告警启用状态下的告警规则,然后检查告警规则是否归自己纳管,告警模块如何知道规则是否归自己纳管呢?夜莺的告警规则会配置对哪个数据源进行告警,每个数据源都可以关联一个告警引擎集群,如下图,这样每个告警引擎就会知道自己需要纳管哪个告警规则。

txRAWA

所以我们在第一步我们要确认三个事情

  1. 确认告警规则是否是启用的,查看告警规则,生效配置部分来确认

CNAlOo

  1. 告警规则是否配置了我们想要告警的数据源,如下图

tO3X6s

  1. 数据源是否关联了告警引擎集群,在数据源列表页,点击数据源名称,来确认

rYsRy8

如果第一步有哪一点没对上,那问题就定位了,如果发现没问题,我们继续从第二步收集信息

第二步

确认数据是否通过告警规则中配置的 promql 可以查到异常值,先打开告警规则详情页,复制 promql

xtMHC0

如果是非 promethues 普通模式(v1)的数据源,检查下是否配置了辅助配置

3Y8j3X

然后到即时查询页面,选择对应的数据源,输入上面的 promql 在及时查询查下数据,然后使用 table 视图查询下原始数据(其他数据源同理),确认是否能查到预期的数据,另外需要注意数据是否延迟上报了,如果查不到,可能是数据延迟导致的没触发告警。

Fcvkzm

qcgKUY

如果查不到,说明没有满足产生告警的条件,问题定位。

第三步

如果能查到数据,说明确实出现异常点了,我们继续往下走,根据 告警事件生成流程,我们可以从告警规则的配置以及是否配置了屏蔽规则找线索,先看告警规则配置

PFnLtn

我们分别检查下

  • 我们希望告警的时间是否在生效时间内(4);

  • 如果是机器相关的告警,是否开始了仅在本业务组生效,且机器是属于告警规则关联的业务组(5);

  • 出现异常点的持续时长是否满足条件,这个在即时查询可以确认异常点出现的时长(6);

  • 距离上次发出的告警,是否满足的通知间隔**(如果有恢复事件,间隔会重新开始从0统计)**,可以在告警历史查看上次告警的时间,然后对比下(7);

  • 是否已经达到最大通知次数(如果有恢复事件,次数会重新开始从0统计,在告警历史列表搜索下告警规则标题,把时间范围拉长到一个月,查看之前产生告警的次数;

如果上面有哪一点没有满足,问题定位。如果都满足条件了。

我们可以确认下是否配置了相关的屏蔽规则,可以到和告警规则相同的业务组下,看下是否配置了告警屏蔽,如果有配置,确认下告警屏蔽中配置的匹配条件,是否和告警事件中的标签匹配,告警事件中的标签由三部分组成,时序数据的标签、告警规则中配置的附加标签、告警规则名称。可以依次和匹配条件做对比,确认是否命中,如果命中,问题定位。

DO1MS8

如果你收集并验证了上面所有的信息,仍然没发现问题,此时很可能夜莺的告警引擎进程没有正常工作,此时可以查看 系统配置-告警引擎 页面,检查下:

  1. 有几个实例在工作,是否有旧的实例忘记升级了

  2. 实例是否关联的想要告警的数据源

  3. 实例的心跳是否在更新,如果没有更新,说明实例进程挂了,需要重新启动下进程

9nbotV

如果以上都正常,可以登录服务器,查看下实例的日志,将日志级别调整为 DEBUG,过滤关键字 rule_eval + 告警规则 id,例如告警规则 id 为 123,则执行

tail -f *.log|grep "rule_eval"|grep 123

观察每次执行规则判断,是否有错误日志,或者是否能查到数据

这类是查询数据报错了

5m2lsX

这种是没查到数据,即使查询能看到,这里查不到,说明是数据上报有延迟

yxENuZ

如果日志也没有发现异常,可以整理好已经排查的截图,找下相关研发同学

常见问题2:有告警事件了,没有收到通知

此种情况,v7.2.1 以及之后的版本,可以直接查看告警详情页都通知记录按钮,可以看到通知结果,如果是较低的版本,可以参考下面思路排查

这种情况,根据上面的流程图,我们可以收集告警事件通知部分的信息,排查哪里出了问题。

告警通知一共有五种方式,我们逐个看下

  • 方式1:通过接收组+通知媒介,发送给用户

  • 方式2:在告警规则配置回调地址,通过 api 调用发给第三方系统

  • 方式3:在全局回调的地方,配置回调地址,通过 api 调用发给第三方系统

  • 方式4:配置通过脚本,使用脚本配置自定义通知逻辑

  • 方式5:配置订阅规则,通过接收组+通知媒介,发送给用户

方式1 通过接收组+通知媒介,发送给用户

关于通过通知媒介通知给用户的方式,我们需要先确认下,告警规则中是否配置了相关的通知媒介,已经配置了相关接收组

YLEmsx

如果上面两者都有配置,拿钉钉通知举例,可以再挨个检查下,接收组关联的中人,是否有配置钉钉群中的机器人token,如果没有配置,问题定位。如果有配置,就需要登录机器看日志排查,是否调用钉钉通知接口出错了。登录夜莺所在服务器,执行下面命令,查询是否有日志输出,如果有日志输出,根据错误提示,进行响应修改即可

grep “_sender” |more

方式2、3、4

如果告警通知使用的是方式2、3、4,告警规则中的callback、全局 webhook、通知脚本的方式。首先确认下这三方式已经配置了。如果有配置,我们可以登录夜莺部署的服务器,过滤下夜莺的日志文件,找下是否有以下关键字 event_webhook_fail、event_notify、event_callback_fail,如果有,则更加日志提示可以定位问题,按照日志提问修复问题即可。

如果没有搜到相关日志,再查找下 INFO 日志中的如下关键字

全局回调,查看 webhook 关键字

规则回调,查看 callback 关键字

通知脚本,查看 script 关键字

根据日志,可以看到通知结果的详情

方式5 配置订阅规则,通过接收组+通知媒介,发送给用户

首先确认订阅规则配置的匹配规则是否能匹配上告警事件,如果能匹配上,排查思路采集方式1

目前夜莺告警详情最常见的问题有上面提到的2个,如果你还有其他问题也经常遇到,不知道排查思路,可以文章下面评论下,我后面补充进来

常见问题3:告警触发了,查看曲线数据没对上

  1. 即时查询选择的时间范围太长,会对数据做降采样,可以将时间范围筛选到告警触发的时间,查询数据的原始值

  2. 日志类数据由于可能上报延迟,导致告警时刻的值和即时查询的值不同,此时可以登录记录查看当时查到的值,日志关键字如下

最后手段

如果上面的步骤都没有发现问题,可以登录下夜莺部署的机器,根据告警规则的 id,过滤下下面的关键字,确认下当时查到的数据是否满足告警条件 比如告警规则 id 为 11,则执行下面命令

grep "eval" *.log |grep 11|more
快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat