Запрос PromQL для определения продолжительности каждого предупреждения о срабатывании

#prometheus #grafana #promql #grafana-variable

#prometheus #графана #promql #графана-переменная

Вопрос:

Я создаю панель управления Grafana, чтобы увидеть общее количество предупреждений для каждого предупреждения о срабатывании и продолжительность (означает, что она должна фиксировать, как долго оповещения находились в состоянии срабатывания).

Запрос PromQL, используемый для сбора общего количества предупреждений, выглядит следующим образом,

count by (alertname,customerName) (changes(customer_ALERTS[24h]))

Идея состоит в том, чтобы добавить еще два столбца в панель таблицы Grafana, содержащую alert count и duration

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

Ответ №1:

Если вы знаете интервал оценки для предупреждений, то следующий запрос PromQL можно использовать для вычисления продолжительности в секундах для предупреждений в состоянии срабатывания за последние 24 часа:

 count_over_time(customer_ALERTS[24h]) * <evaluation_interval_in_seconds>
  

Предполагается, что запрос customer_ALERTS содержит непустые значения при срабатывании предупреждения и не имеет никаких значений, когда предупреждение не срабатывает. Если customer_ALERTS содержит zero значения, когда предупреждение не срабатывает, и one значения, когда срабатывает предупреждение, то вместо этого следует использовать следующий запрос для определения продолжительности предупреждений в состоянии срабатывания в секундах:

 avg_over_time(customer_ALERTS[24h]) * 24 * 3600
  

Если customer_ALERTS содержит другие значения для состояния запуска / не запуска, то подзапросы PromQL могут использоваться для подсчета выборок в состоянии запуска. Взгляните также на функции MetricsQL, такие как lifetime(m[d]) , share_gt_over_time(m[d], gt) или count_gt_over_time(m[d], gt) .

Комментарии:

1. Спасибо. Я использовал второй запрос и вижу, что значение для всех предупреждений равно 8600. (avg_over_time(customer_ALERTS{alertstate="firing",severity="critical"}[24h])) *24 * 3600 есть ли причина, по которой значение одинаково?

2. не могли бы вы взглянуть на график customer_ALERTS{alertstate="firing",severity="critical"} за последний день? avg_over_time() Запрос ожидает, что график не имеет пробелов и содержит 0 значений, когда предупреждение не срабатывало, и 1 значения, когда срабатывало предупреждение, как указано в ответе.