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

告警规则

夜莺监控系统不仅提供了强大的数据采集和可视化功能,还提供了灵活的告警配置能力,帮助我们实时掌握系统的运行状况,快速响应和解决潜在问题。在本节中,将详细介绍如何在夜莺监控系统中设置告警规则。

告警规则

夜莺的告警规则提供了人性化的配置能力,可以满足各种场景下的配置需求。夜莺的告警规则主要分为四部分,基础配置、规则配置、生效配置和通知配置,下面详细介绍下夜莺告警规则的配置参数。

基础配置

image-20230428002814817

  • 规则名称:告警规则的名称,可以表明这个规则是对什么进行的监控,支持配置变量,例如 内存告警 {{$labels.busigroup}} 机器:{{$labels.ident}},如果告警事件中的标签包含了 busigroup 和 ident,最终告警事件中规则的标题会被替换为真实的 busigroup 和 ident, 内存告警 defaultbusigroup 机器:ningdeMacBook-Pro.local
  • 附加标签:在这里配置的附加标签,会追加到生成的告警事件的标签中,可以用来做后续的筛选条件
  • 备注:对告警规则更加详细的描述,也支持配置变量

规则配置

夜莺告警规则支持两种类型的告警,metric 时序数据的告警和 host 类型的告警,下面分别进行介绍

Metric类型告警

image-20230428003619695

  • 关联数据源:夜莺可以在一条规则中,关联多个数据源进行告警,可以有效降低规则的维护成本。
  • 告警条件:本质上就是一条 promql,所以可以做一些条件筛选和四则运算,比如下面的告警规则:http_api_request_success{region="beijing"} / http_api_request_total{region="beijing"} < 0.995 表示:求取beijing这个region的所有http请求的成功率,如果成功率小于 99.5% 就告警。如果告警引擎通过此 promql 查到了数据,说明有有异常点产生,如果满足的持续时间,就会产生一个告警事件。
  • 级别抑制:这里夜莺也有支持配置多个告警条件,如果打开了级别抑制开关,两个条件同时产生告警的话,只会发送高级别的告警,会对低级别的告警进行抑制,降低对大家的打扰。
  • 执行频率 :告警规则执行检查的频率
  • 持续时长 :通常持续时长大于执行频率,在持续时长内按照执行频率多次执行 promql 查询,每次都触发才生成告警;如果持续时长置为0,表示只要有一次 promql 查询触发阈值,就生成告警

Host 类型告警

image-20230428003721789

  • 机器筛选:支持全部机器、业务组、标签、机器标识多种维度的筛选,筛选之后,可以点击机器预览
  • 告警条件:host 类型告警支持三种告警能力
    • 机器失联 机器失联告警是一种常见的监控告警场景,用于检测服务器在一定时间内无法正常连接或通信。服务器失联可能是由于硬件故障、网络问题、电源中断等原因导致的。通过设置失联告警,我们可以在第一时间得知服务器失联情况,迅速排查故障原因,并采取恢复措施。
    • 机器集群比例失联 在微服务架构中,一个服务通常由多个实例组成,以实现负载均衡和容错。当一台机器失联的时候,一般服务不受影响,但当超过一定比例的服务实例失联时,可能导致服务性能下降、延迟增加或部分功能失效。因此,夜莺告警提供了机器集群比例失联告警的能力,设置集群比例失联告警可以帮助运维团队及时发现问题,扩展服务实例或解决失联原因,确保服务正常运行。
    • 机器时间偏移 分布式系统通常有很多节点,各个节点之间需要保持时间同步,这样才能确保数据一致和处理事务。如果节点之间的时间出现偏差,那可能会导致一大堆麻烦,比如数据混乱、事务失败或性能下降。设置一个时间偏移告警,可以让我们快速发现和修复时间同步问题,保证系统顺利运行。

日志类型告警(专业版功能

夜莺专业版提供了 ES日志告警和阿里云SLS日志的能力,如果你们有针对日志告警的需求,欢迎联系我们,沟通试用。

日志监控是一种很常见的监控手段,通过对日志进行监控,可以帮助团队检测和解决问题,优化性能。以下是一些常见的使用场景:

  1. 故障排除和问题解决: 当系统出现故障或其他问题时,日志往往是解决问题的关键。通过实时监控日志,我们可以在问题刚开始时就发现它,有时甚至可以在问题发生前预测到,从而采取预防措施。
  2. 性能监控:有的日志中包含了关于系统性能的信息,如处理时间,内存使用,网络延迟等。通过分析这些数据,我们可以了解系统的运行状况,并在需要的时候对系统进行优化。
ES 日志告警

image-20230724163832132 日志类型和常规的指标告警规则非常相似,其唯一的区别在于告警条件的设置。指标告警规则使用 PromQL 作为查询条件,而日志类型的告警规则则使用布尔表达式作为查询条件。这些告警条件(如 A、B 等)需要通过查询统计来获取。

在配置查询统计时,会发现它和 ES日志即时查询 类似,先选择索引和查询条件以及日期字段,还有两个额外的数据字段组:数值提取Group By20230720195249

为了获得数值类型的结果,需要使用数值提取,选择适当的统计函数。除了常见的 count、sum、avg、min、max 等函数外,还支持一些百分位值函数,如 p90、p95、p99。

此外,通过配置 Group By,可以根据特定字段对结果进行分组。这将生成多个时间序列,并在满足告警条件的情况下产生多个异常点,从而生成多条告警事件。

例子1:HTTP CODE 为4xx的告警条件

说明:在每10分钟的时间段内,检查日志中的 message 字段。如果4xx的日志数量超过2次,产生告警,并且按照 host.hostname 字段进行分组统计,配置方式如下 20230720195452

例子2:接口的请求耗时95分位值超过 1700ms 时触发告警

说明:在每2分钟的时间段内,使用p95函数统计日志中的 request_time 。按 remote_addr 维度进行分组,检查是否有超过1700ms 的请求耗时,配置方式如下 20230720201933

例子3:request_time 大于1900ms,匹配日志超过10条时触发告警

说明:在每2分钟的时间段内,筛选出 request_time 大于1900ms 的日志。按 request_uri 维度进行分组,检查日志数量是否超过10条,配置方式如下 20230720202030

在配置完成所需的数据字段后,还可以通过数据预览按钮来预览查询结果。 20230720195731

阿里云 SLS 日志告警

在阿里云的SLS中,查询统计的配置与对应的即时查询页面中配置的查询条件基本一致,需要提取日志的时序值。

为了进行查询统计,首先需要关联数据源,并选择项目和日志库。然后,设置查询区间、查询条件和辅助配置等参数。最后,可以通过数据预览来查看结果。关于上述配置的详细说明,请参考日志分析-即时查询相关文档

20230725203906

日志告警事件详情

日志类型的告警事件详情,除了能看到对应数值的曲线变化外,点击曲线上的时刻,还可以查看选中时刻的日志,方便更快的排查定位问题

image-20230724165008690

生效配置

夜莺的生效配置,可以帮助用户更加灵活地管理告警规则,避免不必要的告警干扰,这对于那些只在特定时间需要关注的告警场景非常有用。

image-20230503213147828

  • 立即启用:在系统维护期间,可能会出现一些预期的指标波动或异常情况。为避免这些情况触发大量不必要的告警,我们可以在维护开始前暂时关闭相关告警规则,维护完成后再重新启用。这样可以减少告警噪声,避免干扰我们关注真正重要的问题。
  • 生效时间:有的业务可能每隔一段时间会停机维护,在定期维护期间,可能会进行系统升级、备份或其他操作,这些操作可能会引起一些预期的指标波动。为避免在这段时间内触发大量不必要的告警,我们可以通过配置生效时间,设置规则在维护期间不生效,可以降低对我们不必要的打扰。
  • 仅在本业务生效:在企业中,不同业务线往往有独立的运维团队。通过开启这个开关,我们可以确保各个业务线的告警规则仅对其关联的业务组下的机器生效。这样,各业务线的运维团队只需关注与其业务相关的告警,避免了不必要的干扰,提高了告警处理的效率。

通知配置

通知配置功能是用于定义告警触发后的通知方式、通知对象以及通知的附加内容。

image-20230503215033561

  • 通知媒介:夜莺监控默认支持了发送钉钉、企微、飞书、邮件、Mattermost、Telegram 多种通知渠道,除了内置的通知媒介,我们还可以通过夜莺提供的通知脚本的能力,对接公司内部的通知渠道,比如公司内部的电话网关、短信网关、自己的IM等。如果我们只使用钉钉通知,没使用其他通知媒介,我们可以 在系统配置-通知配置-通知媒介 页面,把其他的通知媒介都隐藏,同理,如果我们想增加自己的通知媒介,也可以在这个页面添加。image-20230503223714915另外,夜莺还支持了对不同的通知媒介发送不同的内容和样式,这块可以在 系统配置-通知模板 页面进行管理。image-20230503223922155

  • 告警接收组:我们有一批人想接收我们配置的告警规则发出的通知、我们可以先在 “人员组织-团队管理” 页面,创建一个团队,把相关的人都加入到团队,然后在接收组的输入框填上我们创建的团队,这样在告警触发之后,团队中的人都会收到告警通知

  • 启用恢复通知:当告警事件恢复之后,夜莺会发出恢复通知,但有的业务团队有时会只关注异常通知,不关心恢复通知,此时发送恢复通知,对他们来说是一种打扰,这个时候我们可以关闭恢复通知,来降低打扰

  • 留观时长:这个功能和和病人在生病康复之后,医生有时让留院观察类似,有的时候,当异常恢复之后,可能立马又会触发异常,这样一会儿报异常,一会儿报恢复,对我们产出不必要的打扰,我们可以把留观时长调一个合适的时间,等恢复保持了一段时间之后,我们感觉真正恢复了,再报恢复,可以减少告警的打扰

  • 重复通知间隔:重复通知间隔是指在告警未解决的情况下,系统会根据设置的时间间隔反复发送告警通知。这种设置可以确保我们持续关注未解决的告警,避免因忽略告警而导致问题恶化。另外,通过将通知间隔设置一个比较大的数值,也可以降低我们在处理故障时,告警通知对我们频繁的打扰。

  • 最大发送次数:最大发送次数是用于限制在特定条件下,告警通知发送的最大次数。通过设置最大发送次数,可以有效避免我们被大量重复告警通知打扰

  • 回调地址:回调地址用于在告警触发时,将告警信息发送到指定的URL。该功能可以帮助我们实现告警信息与第三方服务或自定义应用的集成,提高告警处理的自动化程度和团队协作效率,回调地址主要有下面几个使用场景

    • 与第三方服务集成:回调地址可以将告警信息发送到第三方服务,如内部的事件平台、flashduty 等,实现告警的集成管理。
    • 自动化处理:回调地址允许自定义应用接收告警信息,并根据告警内容自动执行相应的操作,如自动扩容、故障切换等。
    • 自定义通知方式:通过回调地址,我们可以根据需求定制自己公司内部的告警通知发送方式,如发送到企业内部的IM。
      额外补充一点,夜莺除了可以在告警规则中配置回调地址,还支持配置全局的回调地址,在 系统配置-通知配置-全局回调 页面配置
  • 附加信息:附加信息用于在告警通知中添加一些额外的、有关告警的详细信息或解决方案。这有助于接收告警的团队成员更好地理解告警背景,快速定位问题并采取相应的解决措施。

视频号里也做了一个小视频,讲解如何发送钉钉通知,大家可以看看。飞书、企微也都是类似的。

开源版
Flashcat
Flashduty