普罗米修斯警报的值低于阈值

时间:2020-04-22 07:32:40

标签: prometheus prometheus-alertmanager

我们使用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高于阈值时才收到警报?

1 个答案:

答案 0 :(得分:0)

该问题将由使用'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