Количество предупреждений, запущенных прометеем

У меня есть Prometheus с некоторыми правилами оповещения, и я хочу получить статистику о количестве оповещений, запущенных Prometheus.

Я пытался посчитать, сколько раз сработало оповещение с графаной, но оно не работает:

SUM(ALERTS{alertname="XXX", alertstate="firing"})

Есть способ подсчитать, сколько раз срабатывает оповещение?

3 ответа

Решение

Ваш запрос возвращает количество предупреждений, а не количество срабатываний каждого предупреждения.

Я нашел этот запрос для (в основном) работы с Prometheus 2.4.0 и более поздними версиями:

changes(ALERTS_FOR_STATE[24h])

Он будет возвращать количество раз, когда каждое оповещение переходило из состояния "ожидание" в состояние "срабатывание" в течение последних 24 часов, что означает, что оно будет работать только для оповещений, которые в первую очередь находятся в состоянии ожидания (то есть оповещения с for: <some_duration> уточняются).

ALERTS_FOR_STATE является новой добавленной внутренней метрикой Prometheus, которая используется для восстановления предупреждений после перезапуска Prometheus. Это не все, что хорошо документировано (на самом деле совсем нет), но, похоже, это работает.

Да, и если вы хотите, чтобы результаты были сгруппированы по оповещениям (или среде, или заданию, или что-то еще), вы можете суммировать результаты по этой метке или набору меток:

sum by(alertname) (changes(ALERTS_FOR_STATE[24h]))

даст вам, сколько раз каждое оповещение срабатывало на рабочих местах, в разных средах

Вдохновленный «Алин Синпалян», я считаю оповещения firingсостояние и игнорировать pendingгосударство.

  • Подсчет текущих оповещений:

            count(ALERTS{alertstate="firing"}) by(alertname)
    
  • Подсчитайте, сколько раз сработало каждое оповещение:

            # Add a rule
    groups:
    - name: recording_rules
      rules:
      - record: ALERTS_FOR_STATE:firing
        expr: ALERTS_FOR_STATE and ignoring(alertstate) ALERTS{alertstate="firing"}
    
            sum(changes(ALERTS_FOR_STATE:firing[1w]) + 1) by(alertname)
    

Ваш PromQL правильный. Имейте в виду, что ярлыки (включая имя оповещения) чувствительны к регистру: возможно, это проблема?

Другие вопросы по тегам