Как получить общее время безотказной работы сервера с помощью prometheus и node_exporter - PullRequest
0 голосов
/ 24 сентября 2019

Я ищу запрос, чтобы узнать среднее время работы сервера, на котором Prometheus работает за последнюю неделю.Это должно быть около 15 часов в неделю, то есть около 8-10%.

Я использую Prometheus 2.5.0 с node_exporter в CentOS 7.6.1810.Мои самые многообещающие эксперименты были бы:

1 - avg_over_time (up {job = "prometheus"} [7d])

Это то, что я нашел, когда искал способы получить среднее время простоя, но он дает мне ровно 1. (Я думаю, он игнорирует время, в которое не было царапин?)

2 - sum_over_time (up {job = "prometheus"} [7d]) * 15/604800

Это технически работает, но зависит от интервала очистки, который в моем случае составляет 15 с.Кажется, я не могу найти способ получить указанный интервал из конфигурации prometheus, поэтому мне нужно жестко закодировать его в запросе.

Я также пытался найти способы получить все время начала и окончанияработа, но пока безрезультатно.

1 Ответ

0 голосов
/ 24 сентября 2019

Вот, пожалуйста.Не спрашивай(o:

avg_over_time(
  (
    sum without() (up{job="prometheus"})
      or
    (0 * sum_over_time(up{job="prometheus"}[7d]))
  )[7d:5m]
)

Чтобы объяснить это побитно:

  1. sum without() (up{job="prometheus"}): возьмите метрику up (часть sum without() предназначена для избавления отимя метрики при сохранении всех других меток);
  2. 0 * sum_over_time(up{job="prometheus"}[7d]): создает вектор с нулевым значением для каждой из комбинаций меток up{job="prometheus"}, замеченных за последнюю неделю (например, если у вас есть несколько экземпляров Prometheus);
  3. or два вместе, так что вы получите фактическое значение там, где доступно, ноль, где отсутствует;
  4. [7d:5m]: Подзапрос PromQL , создает вектор диапазонаохватывающий 7 дней, с 5-минутным разрешением на основе предшествующего ему выражения;
  5. avg_over_time: принимает среднее значение по времени для метрики up с нулями, заполненными в качестве значений по умолчанию, где отсутствует.

Вы также можете добавить and sum_over_time(up{job="prometheus"}[7d] до конца этого выражения, чтобы получить результат только для комбинаций меток, которые существовали в какой-то момент в течение предыдущих 7 дней. Иначе, из-за комбинации 7диапазон дней и подзапрос 7 дней, вы получитерезультаты для всех комбинаций за предыдущие 14 дней.

Это не эффективный запрос, не требующий большого воображения, но он не требует жесткого кодирования интервала очистки в запросе.Как просили.(О:

...