问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Prometheus自定义时间区间告警的实现方法

创作时间:
作者:
@小白创作中心

Prometheus自定义时间区间告警的实现方法

引用
CSDN
1.
https://blog.csdn.net/easylife206/article/details/139944041

在Prometheus中实现自定义时间区间的告警功能是一个常见的需求。本文将详细介绍如何通过record规则来实现这一功能,包括具体的配置步骤和验证方法。

背景概述

在实际应用中,我们常常需要在特定时间段内触发告警,而在其他时间段则不需要告警。例如,我们可能希望在工作日的8:00到22:00之间触发告警,而在其他时间则不触发。这种需求可以通过多种方式实现,包括使用定时任务、time内置函数、record规则等。本文将重点介绍使用record规则的实现方式。

自定义告警时间区间实现

在实现自定义时间区间的告警功能时,有以下几种常见的方法:

  1. 使用定时任务的方式,在不同时间加载不同配置文件
  • 缺点:不够友好,需要额外的定时任务管理
  1. 使用time内置函数
  • 缺点:更改告警时间后,需要修改很多告警规则
  1. 使用record
  • 优点:相当于优化了time的方案,可以选择性地应用告警规则
  1. 继续告警,通过发送告警时判断
  • 优点:可以通过配置template来自定义可以发送告警的时间

本次我们选择使用record的方式来进行案例的演示。

最佳实践

前期准备

  1. Kubernetes集群
  2. kube-prometheus

修改yaml文件

我们需要在Prometheus的配置文件中添加record规则,以实现自定义时间区间的告警功能。以下是具体的配置示例:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  labels:
    app.kubernetes.io/name: kube-prometheus
    app.kubernetes.io/part-of: kube-prometheus
    prometheus: k8s
    role: alert-rules
  name: kubernetes-monitoring-rules
  namespace: monitoring
spec:
  groups:
- name: timezones
    rules:
- record: cst_timezones
      expr: |
        hour() + 8
- name: alertTime
    rules:
- record: alert_time
      expr: |
        cst_timezones >= 8 and cst_timezones <= 22

在这个配置中,我们首先使用hour内置函数计算当前时间,并加上8小时(假设时区为CST)。然后,我们定义了一个alert_time规则,规定了告警的时间区间为8:00到22:00。

接下来,我们需要在具体的告警规则中应用这个时间区间:

- name: kubernetes-system-scheduler
  rules:
- alert: KubeSchedulerDown
    annotations:
      description: KubeScheduler has disappeared from Prometheus target discovery.
      runbook_url: https://runbooks.prometheus-operator.dev/runbooks/kubernetes/kubeschedulerdown
      summary: Target disappeared from Prometheus target discovery.
    expr: |
      (absent(up{job="kube-scheduler"} == 1)) and (alert_time)
    for: 15m
    labels:
      severity: critical

在这个告警规则中,我们通过and操作符将alert_time规则与具体的告警条件结合起来,实现了在指定时间区间内触发告警的功能。

验证

为了验证配置是否正确,我们需要在不同的时间点检查告警是否触发。以下是两个验证示例:

  1. 当前时间为2024年5月6号 22:32:

从上图可以看出,告警已经触发。

  1. 将告警时间调整为8~21点:
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  labels:
    app.kubernetes.io/name: kube-prometheus
    app.kubernetes.io/part-of: kube-prometheus
    prometheus: k8s
    role: alert-rules
  name: kubernetes-monitoring-rules
  namespace: monitoring
spec:
  groups:
- name: timezones
    rules:
- record: cst_timezones
      expr: |
        hour() + 8
- name: alertTime
    rules:
- record: alert_time
      expr: |
        cst_timezones >= 8 and cst_timezones <= 21

更新配置后,我们需要重新加载Prometheus的配置:

从上图可以看出,告警没有触发,说明配置生效。

总结

通过上述步骤,我们成功实现了在Prometheus中自定义时间区间的告警功能。这种方法不仅灵活,而且易于维护,推荐在实际生产环境中使用。如果你有更加优雅的实现方式,欢迎分享交流。

本文原文来自「蜀道运维」,原文链接:https://url.hi-linux.com/eNGVf,版权归原作者所有。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号