公众号关注 「奇妙的 Linux 世界」
设为「星标」,每天带你玩转 Linux !
背景概述
在模拟面试时,一个星球用户问到一个问题,也是面试的时候被问到的一个问题。prometheus
如何在设置的时间告警,其他时间不告警呢?
前一段时间在群里交流时也有人提到过这个问题。根据其他群友的方案一个是使用定时任务,在不同 的时间使用不同的告警,一个是使用time
内置函数。总的来说感觉不是很完美,为此写一个方案分享一下。
自定义告警时间区间实现
使用定时任务的方式,在不同时间加载不同配置文件
❝
缺点很明显,不够友好
使用time内置函数
❝
确定也有,更改告警时间后,需要修改很多告警规则
使用record
❝
相当于优化了time的方案,可以选择。这也是本次要讲解的一个案例
继续告警,通过发送告警时判断
❝
这种也是很友好的,我们可以配置template来自定义可以发送告警的时间,下次有机会分享。
最佳实践
本次我们使用record的方式来进行一个案例的演示,那么什么时record呢,可以自行百度一下哦。
前期准备
kubernetes集群
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](https://img-blog.csdnimg.cn/img_convert/c3dc9e88246e70645ce5bffd8fc169be.png)
![d5597e79f7d6f26e596a7d75fda4ec04.png](https://img-blog.csdnimg.cn/img_convert/d5597e79f7d6f26e596a7d75fda4ec04.png)
❝很明显这个告警以及触发了。
再次修改告警时间
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](https://img-blog.csdnimg.cn/img_convert/b3cbed8ebb919ce772b34231b00556d2.png)
![7077dc01db599b84eb0cb5fd93497e77.png](https://img-blog.csdnimg.cn/img_convert/7077dc01db599b84eb0cb5fd93497e77.png)
❝很明显告警没有触发
总结
到此我们就实现了如何在指定的时间区间告警的方法,如果你有更加优雅的方法,欢迎入群一起交流。下次我们继续讲解如何在发送告警的时候进行时间区间的判断。
本文转载自:「蜀道运维」,原文:https://url.hi-linux.com/eNGVf,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。
🚀 最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。
📕 关注『奇妙的 Linux 世界』公众号,带你开启有趣新生活!更多好用好玩的软件资源,可访问 https://666666.dev 免费获取。
你可能还喜欢
点击下方图片即可阅读
Github 星标 12.5K,一款开源 Rust 语言编写的现代化端口扫描工具
点击上方图片,『美团|饿了么』外卖红包天天免费领
更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!