Мониторинг и предупреждение аномалии прометея в количестве метрик - PullRequest
0 голосов
/ 13 января 2019

У нас есть несколько серверов prometheus, каждый из которых контролирует свой собственный регион (фактически 2 на регион), также есть серверы thanos, которые могут запрашивать несколько регионов, и мы также используем alertmanager для оповещения.

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

Буду рад вашему совету.

1 Ответ

0 голосов
/ 16 января 2019

Вы можете подсчитать количество временных рядов в головном блоке (последние 0-2 часа) или скорость, с которой вы принимаете образцы:

prometheus_tsdb_head_series

или

rate(prometheus_tsdb_head_samples_appended_total[5m])

Затем вы сравниваете указанное значение с самим собой несколько минут / часов назад, например,

prometheus_tsdb_head_series / prometheus_tsdb_head_series offset 5m

и посмотрите, соответствует ли он ожидаемому диапазону (скажем, 90-110%), и предупредите в противном случае.

Или вы можете посмотреть на показатели с наивысшей кардинальностью:

topk(100, count({__name__=~".+"}) by (__name__))

Обратите внимание, что это последнее выражение может быть довольно дорогим для вычисления, поэтому вы можете его избежать. Плюс сравнение с 5 минутами назад не будет таким простым:

label_replace(topk(100, count({__name__=~".+"}) by (__name__)), "metric", "$1", "__name__", "(.*)")
  /
label_replace(count({__name__=~".+"} offset 5m) by (__name__), "metric", "$1", "__name__", "(.*)")

Вам нужен label_replace, потому что совпадение для деления выполняется на метках, отличных от __name__. Вычисление этого последнего выражения занимает ~ 10 секунд на моем экземпляре Prometheus с серией 150k, так что это совсем не быстро.

И, наконец, какой бы подход вы ни выбрали, вы, скорее всего, получите много ложных срабатываний (всякий раз, когда большая работа запускается или снимается), вплоть до того, что она не будет настолько полезной. Лично я бы не стал пытаться.

...