Prometheus предупреждает о значении ниже порогового значения

Мы используем предупреждение Prometheus (и узел-экспортер), чтобы проверить, не заканчивается ли у нас память на узле.

Проблема: во многих случаях я получаю предупреждение со значением $, которое ниже порогового значения в выражении.

Выражение:

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%.

Почему я получаю это предупреждение, даже если значение $ ниже порогового значения?

Как я могу исправить это правило предупреждений Prometheus, чтобы получать предупреждения только тогда, когда значение $ превышает пороговое значение?


person tm1701    schedule 22.04.2020    source источник


Ответы (1)


Проблема возникнет из-за использования «макс».

Более точный запрос приведен ниже:

 - 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
person tm1701    schedule 25.04.2020