用 Prometheus 碰到个奇怪的问题,百思不得其解

2020-10-19 11:30:08 +08:00
 HaroldChen

--问题:告警是正常的,恢复告警的发送不正常。

举例:以下面的 cpu 规则为例,如果 cpu 超过所设的阈值 90,是能接到告警的。如下:

·Status: firing

·StartsAt: 2020-10-18T10:44:22.718516222Z

·Discription: 命名空间 xx 的 pod xx-xx-testpod 当前的 CPU 使用率已达到 99.89.

但接到告警恢复的通知时,数值往往大于 90%...(也有正常的恢复)

·Status: resolved

·StartsAt: 2020-10-18T10:44:22.718516222Z

·Discription: 命名空间 xx 的 pod xx-xx-testpod 当前的 CPU 使用率已达到 98.11.

按我的理解 恢复通知只有 cpu < 90 持续 resolve_timeout 的值 之后才能触发,现在是哪里配置有问题吗?

  1. 相关组件都是通过 kubernetes operator 部署在 k8s 集群中的。

  2. PrometheusRule:

    • alert: PodCPUOvercommit

      description: 命名空间 {{ $labels.namespace }} 的 pod {{ $labels.pod }} 当前的 CPU 使用率已达到 {{ printf "%.2f" $value }}.

      expr: | 100 * (sum(rate(container_cpu_usage_seconds_total{namespace!~"monitoring",container!=""}[1m])) by (pod,namespace) / sum(kube_pod_container_resource_limits_cpu_cores{namespace!~"monitoring",container!=""}) by (pod,namespace)) > 90

      for: 3m

  3. alertmanager

global:

resolve_timeout: 1m

route:

group_by: ['alertname']

group_wait: 10s

group_interval: 1m

repeat_interval: 12h

receiver: 'webhook'

receivers:

2960 次点击
所在节点    程序员
11 条回复
cdlixucd
2020-10-19 11:32:45 +08:00
https://aleiwu.com/post/prometheus-alert-why/
研究下 无意看到的 虽然还没开始玩儿微服务
HaroldChen
2020-10-19 15:03:08 +08:00
@cdlixucd 嗯,好文。这里有提到 scrape 和 evaluation 不一致产生的问题,但 send resolve 通知应该不受这个影响。既然发出通知来,一定是判定至少 2 个周期(我这边 scrape 和 evaluation 都是 30s )值低于 90 。恢复通知上的值肯定低于 90 才对。
scarletass
2020-10-19 15:27:28 +08:00
表达式很清楚,统计的是 1min cpu 的平均值,你拿峰值去比较,肯定不对~
Maco
2020-10-19 17:09:13 +08:00
可以参考下这篇文章,讲的很清楚:
https://www.robustperception.io/why-do-resolved-notifications-contain-old-values
当指标正常时,告警表达式不在返回值,Prometheus 自然就不知道当前的值是多少。
文章中的建议是告警消息中链接到仪表盘。
HaroldChen
2020-10-19 17:10:03 +08:00
@scarletass 峰值? 这个{{ printf "%.2f" $value }} 也是 expr 算出来的值啊。
Maco
2020-10-19 17:15:35 +08:00
告警恢复中的值,是最后一次根据你的告警表达式计算出来的值。也就是最后的一个异常值。
HaroldChen
2020-10-19 19:09:47 +08:00
@Maco 谢了,终于明白为啥出现这种情况了-.-。 告警和恢复只能用同一个 description 的消息模板吗,有方法区分开吗。告警时显示当前 cpu 值,恢复了就显示 cpu 已恢复,加个 grafana link 。
marcolin
2020-10-19 19:20:27 +08:00
@HaroldChen 自己在 webhook 接口里面判断一下就行了吧
wangritian
2020-10-20 09:25:47 +08:00
借楼请教一下,想学习 Prometheus,有哪些推荐的入门文章 /书籍 /课程?
Maco
2020-10-21 11:42:47 +08:00
wangritian
2020-10-21 12:17:48 +08:00
@Maco 灰常感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/716319

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX