Prometheus 发出低于阈值的警报
Prometheus alerts with a value that is below the threshold
我们使用 Prometheus 警报(和节点导出器)来检查我们是否 运行 节点内存不足。
问题:在许多情况下,我会收到 $value 低于表达式中阈值的警报。
表达式为:
alert: GettingOutOfMemory
expr: max(sum
by(instance) ((((node_memory_MemTotal_bytes) - (node_memory_MemFree_bytes + node_memory_Buffers_bytes
+ node_memory_Cached_bytes)) / (node_memory_MemTotal_bytes)) * 100)) >= 90
for: 5m
labels:
severity: warning
annotations:
description: Docker Swarm node {{ $labels.instance }} memory usage is at {{ humanize $value}}%.
summary: Memory is getting low for Swarm node '{{ $labels.node_name }}'
我收到消息说我们 运行 内存不足,例如83%。这就是 $value 的值。这显然低于 90% 的阈值。
为什么即使 $value 低于阈值我也会收到此警报?
如何修复此 Prometheus 警报规则,以便仅在 $value 高于阈值时才收到警报?
使用 'max' 会导致此问题。
更好的查询如下:
- alert: high_memory_load
expr: ((1-(node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes))*100) > 85
for: 30s
labels:
severity: warning
annotations:
summary: "Server memory is almost full"
description: "Docker host memory usage is {{ humanize $value}}%. Reported by instance {{ $labels.instance }} of job {{ $labels.job }}."
备选方案是:
expr: ((1-((node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes)/node_memory_MemTotal_bytes))*100)>85
我们使用 Prometheus 警报(和节点导出器)来检查我们是否 运行 节点内存不足。
问题:在许多情况下,我会收到 $value 低于表达式中阈值的警报。
表达式为:
alert: GettingOutOfMemory
expr: max(sum
by(instance) ((((node_memory_MemTotal_bytes) - (node_memory_MemFree_bytes + node_memory_Buffers_bytes
+ node_memory_Cached_bytes)) / (node_memory_MemTotal_bytes)) * 100)) >= 90
for: 5m
labels:
severity: warning
annotations:
description: Docker Swarm node {{ $labels.instance }} memory usage is at {{ humanize $value}}%.
summary: Memory is getting low for Swarm node '{{ $labels.node_name }}'
我收到消息说我们 运行 内存不足,例如83%。这就是 $value 的值。这显然低于 90% 的阈值。
为什么即使 $value 低于阈值我也会收到此警报?
如何修复此 Prometheus 警报规则,以便仅在 $value 高于阈值时才收到警报?
使用 'max' 会导致此问题。
更好的查询如下:
- alert: high_memory_load
expr: ((1-(node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes))*100) > 85
for: 30s
labels:
severity: warning
annotations:
summary: "Server memory is almost full"
description: "Docker host memory usage is {{ humanize $value}}%. Reported by instance {{ $labels.instance }} of job {{ $labels.job }}."
备选方案是:
expr: ((1-((node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes)/node_memory_MemTotal_bytes))*100)>85