#prometheus #prometheus-blackbox-exporter
#prometheus #prometheus-черный ящик-экспортер
Вопрос:
на одной из моих панелей мониторинга Grafana я бы хотел показать все показатели экземпляров, у которых были некоторые простои в течение проверенного периода времени (последние 12 часов). Но отфильтруйте все остальные без простоев.
Я использую данные, предоставленные экспортером prometheus blackbox, и мне бы хотелось получить avg_over_time для всех экземпляров, которые не доступны на 100% в течение рассматриваемого мной периода времени (например, 12 часов).
Мой базовый запрос выглядит следующим образом:
avg_over_time(probe_success{job="blackbox"}[15m])
Чтобы отфильтровать все, что вело себя не так, как ожидалось, я попробовал sth. вот так (пытался сохранить его читаемым):
_base_qery_ unless on(instance) _base_qery_ < 0.95
Но это также будет включать в себя серии с метками экземпляров, которые не отображаются в _base_qery_ < 0.95
.
Из официальной документации я ожидал такого типа фильтрации
vector1, если vector2 не приводит к вектору, состоящему из элементов vector1, для которых в vector2 нет элементов с точно совпадающими наборами меток. Все совпадающие элементы в обоих векторах удаляются.
Моим обходным решением на данный момент является этот запрос (где 12 часов — это полный временной диапазон, который я наблюдаю с помощью Grafana):
avg_over_time(probe_success{job="blackbox"}[15m]) and avg_over_time(probe_success{job="blackbox"}[12h]) < 1
Но я бы хотел, чтобы версия с 15-минутным диапазоном работала.
Комментарии:
1. Мне действительно трудно разобрать ваш вопрос. Вы говорите, что хотите «все показатели, у которых было некоторое время простоя» (я полагаю, вы имеете в виду «экземпляры», а не «метрики»). Но тогда ваш запрос AFAICT возвращает все экземпляры, у которых было время безотказной работы более 95%, то есть те, у которых не было простоев. (
unless
делает именно то, что написано на tin, просто вы можете использовать его неправильно.) И, наконец, я не понимаю, что с15m
и12h
: вы хотите, чтобы среднее время безотказной работы измерялось в течение 15 минут или 12 часов? И что мешает вам использоватьavg_over_time(probe_success{job="blackbox"}[15m]) < 1
?2.
avg_over_time(probe_success{job="blackbox"}[15m]) < 0.95
отфильтровывает все, что выше 0,95… это то, на что я хочу обратить внимание. Но я хочу, чтобы все измерения для них проводились в более длительные сроки. Вы правы, я мог бы использовать<1
— но это не отвечает, почемуunless
работает по-другому.3. Я все еще не понимаю вашего вопроса. AFAICT
avg_over_time(probe_success{job="blackbox"}[15m]) < .95
(или1
, или что-то еще) должен дать вам именно то, что вы хотите. Замените на15m
,12h
и вы получите цели, у которых было менее 95% (или 100%) простоев за последние 12 часов.foo unless foo < .95
точно такой же, какfoo >=.95
, т. Е. Он даст вам цели со временем безотказной работы выше 95%. Что (я догадываюсь, не уверен) — это не то, что вы хотите.4. Например, вы говорите: «Но это также будет включать ряды с
instance
метками, которые не отображаются в_base_qery_ < 0.95
.» В вашем конкретном случаеunless
будут возвращены толькоinstance
метки, которые не отображаются в запросе с правой стороны (т.Е. Ряд с_base_qery_ >= 0.95
). Это именно то, что он должен делать.5. Спасибо, что держитесь. Да, вы правы — это то, что происходит, НО в документации говорится:
with exactly matching label sets
… и это заставило меня задуматься, что значения меток имеют значение, но они этого не делают