Prometheus - объединение двух предупреждений с и и векторизацией

у нас есть несколько предупреждений, и мы хотим объединить эти предупреждения в одно большое предупреждение для ЦП, памяти и ввода-вывода диска.

Например:

rules:
  - alert: OutOfMemory
    annotations:
      description: "Node memory is filling up (< 5% left)\n VALUE = {{ $value }}"
      summary: Out of memory (instance {{ $labels.instance }})
    expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 5
    for: 5m
    labels:
      severity: warning

и

  - alert: HighCpuLoad
    annotations:
      description: "CPU load is > 90%\n VALUE = {{ $value }}"
      summary: High CPU load (instance {{ $labels.instance }})
    expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
    for: 5m
    labels:
      severity: warning

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

С наилучшими пожеланиями


person JayBe    schedule 10.09.2020    source источник


Ответы (1)


Вам нужно будет использовать инструкцию по сопоставлению векторов, которая, вкратце и в простых случаях, таких как ваш, переводится как указывает, какие метки должны совпадать с обеих сторон оператора.

В случае экспортера узлов это будет:

(<OutOfMemory expression>) AND ON(instance) (<HighCpuLoad expression>)

С точки зрения удобства использования я бы предпочел иметь несколько предупреждений, которые не отправляются в вашу систему предупреждений (используйте черную дыру в диспетчере предупреждений), а затем использовать метрику ALERTS для запуска большого предупреждения. Это позволит вам иметь:

  • более простые и более богатые выражения (вы можете вызвать предупреждение, если срабатывает 4/5 или есть какое-то предложение OR)
  • глядя на панель инструментов, вы будете знать, какие именно проблемы вызывают
  • разные forstatements - возможно, вы не захотите иметь одинаковые for из-за большого количества ЦП и сбоев памяти.

Я не тестировал его, но он будет выглядеть следующим образом:

rules:
  - alert: NodeInTrouble
    expr: sum(ALERTS{alertname=~"OutOfMemory|HighCpuLoad"}) BY (instance) == 2
    for: 1m
    labels:
      severity: warning
person Michael Doubez    schedule 14.09.2020