如何实现 Prometheus 自定义时间区间告警

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

d4d5aed42f235f9a8de7a5b68b9e381c.png

背景概述

在模拟面试时,一个星球用户问到一个问题,也是面试的时候被问到的一个问题。prometheus如何在设置的时间告警,其他时间不告警呢?

前一段时间在群里交流时也有人提到过这个问题。根据其他群友的方案一个是使用定时任务,在不同 的时间使用不同的告警,一个是使用time内置函数。总的来说感觉不是很完美,为此写一个方案分享一下。

自定义告警时间区间实现

  1. 使用定时任务的方式,在不同时间加载不同配置文件

    缺点很明显,不够友好

  2. 使用time内置函数

    确定也有,更改告警时间后,需要修改很多告警规则

  3. 使用record

    相当于优化了time的方案,可以选择。这也是本次要讲解的一个案例

  4. 继续告警,通过发送告警时判断

    这种也是很友好的,我们可以配置template来自定义可以发送告警的时间,下次有机会分享。

最佳实践

本次我们使用record的方式来进行一个案例的演示,那么什么时record呢,可以自行百度一下哦。

前期准备

  1. kubernetes集群

  2. kube-prometheus

发送告警这里就不赘述了,我们可以根据prometheus中的Alerts或者PromQL来判断是否告警。

修改yaml文件

kubernetesControlPlane-prometheusRule.yaml

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
### 下面的内容省略了哦

首先timezones使用了hour内置函数加8小时,更加友好一点而已。然后alert_time我们规定了告警的区间8~22点告警,其余时间不告警

kubernetesControlPlane-prometheusRule.yaml

- 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

这里我们修改告警规则,也就是那个告警规则应用告警时间。

至于如何部署kube-prometheus我们就不做过多的赘述了,不会的可以加最下方二维码一起交流

验证

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

c3dc9e88246e70645ce5bffd8fc169be.png
image-20240506223219347
d5597e79f7d6f26e596a7d75fda4ec04.png
image-20240506223808845

很明显这个告警以及触发了。

再次修改告警时间

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
### 下面的内容省略了哦

这次我们将时间调整为8~21点告警

更新kube-prometheus别忘记哦,或者重新reload

验证

b3cbed8ebb919ce772b34231b00556d2.png
image-20240506224115299
7077dc01db599b84eb0cb5fd93497e77.png
image-20240506224140310

很明显告警没有触发

总结

到此我们就实现了如何在指定的时间区间告警的方法,如果你有更加优雅的方法,欢迎入群一起交流。下次我们继续讲解如何在发送告警的时候进行时间区间的判断

本文转载自:「蜀道运维」,原文:https://url.hi-linux.com/eNGVf,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

6623401403883e2a38ca61f16fb86dc7.gif

🚀 最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

📕 关注『奇妙的 Linux 世界』公众号,带你开启有趣新生活!更多好用好玩的软件资源,可访问 https://666666.dev 免费获取。

1e4456818704c702f4412a7b8ff2ad3e.png

你可能还喜欢

点击下方图片即可阅读

2f3c30236699c49c6589b7e64402cb8f.jpeg

Github 星标 12.5K,一款开源 Rust 语言编写的现代化端口扫描工具

254923153df6c09ca9af9244e07bccd8.png
点击上方图片,『美团|饿了么』外卖红包天天免费领

dfe23089b01968690136ea25cd287759.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值