Использовать дату сегодня в значениях меток в правилах оповещения Прометея - PullRequest
1 голос
/ 06 ноября 2019

Я новичок в Prometheus и предупреждаю, и я не мог точно ответить, просмотрев документацию.

У меня есть некоторые данные, которые поступают в кластер эластичного поиска. Каждый день этот процесс создает новый индекс эластичного поиска и записывает данные этого дня в этот индекс (например, my_index-2019-10-06, my_index-2019-10-05, ...). Я хочу следить за размером сегодняшнего индекса и видеть, что он растет, и, если он не растет в течение определенного интервала (например, 15 минут), я хочу включить оповещение в Прометее. Для этого я думал о таком expr в правиле оповещения:

expr: delta(elasticsearch_index_primary_store_size{index_name="my_index-TODAY-DATE"}[15m] <= 0)

TODAY-DATE должно быть динамическим и генерироваться каждый день. Но, насколько я понимаю, у вас не может быть динамического значения в значениях метки и функции для получения даты. Тогда я думал о том, чтобы сравнить дельту суммы размера всех индексов, начинающихся с my_index, но проблема с этим подходом - время удержания, и если индекс удален, дельта суммы может быть отрицательной, в то время как новые данные поступают в индекс сегодня. Есть ли у вас решение этой проблемы?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

Псевдонимы Elasticsearch можно использовать, чтобы избежать проблемы указания (динамического) имени индекса в день, см. https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html

То есть вы можете использовать псевдоним для текущего текущего имени индекса. Например, my_favourite_today_index может указывать на my_favourite_index_2019-11-07 и обновляться каждый день (cronjob или другой метод). Этот подход позволит вам указать предопределенное имя индекса в Prometheus.

1 голос
/ 07 ноября 2019

Проблема возникает из вашего предположения, что вы будете получать оповещения на основе delta() из sum() временных рядов, что является одной из первых вещей, о которых предупреждает документация Prometheus. (И что до введения подзапросов было невозможно сделать с помощью одного запроса; для этого нужно было установить правила записи.)

Если вместо этого вы используете sum() из delta()Значения (и ваш экспортер не выдает нулевую или быстро уменьшающуюся метрику размера индекса во время удаления) - все готово. При удалении индекса его дельта просто бесшумно исчезает из результатов, полученных с помощью delta(), и никак не влияет на полученную сумму. Индексы предыдущих дней, вероятно, не изменят размер и, следовательно, также не повлияют на сумму. И если, например, происходит сжатие, приводящее к внезапному уменьшению размеров индекса, вы можете просто отфильтровать эти значения:

expr: sum(delta(elasticsearch_index_primary_store_size{index_name=~"my_index-.*"}[15m]) > 0)) <= 0

При этом можно сгенерировать метку с сегодняшней датой в качестве значения, используя count_values without() ("year", year(vector(time())))month() и day_of_month()) плюс label_join() / label_replace() но вы, вероятно, не хотите туда идти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...