Вы можете либо подсчитать количество таймсерий в головном фрагменте (последние 0–2 часа), либо скорость, с которой вы загружаете образцы:
prometheus_tsdb_head_series
or
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, так что это совсем не быстро.
И, наконец, какой бы подход вы ни выбрали, вы, вероятно, получите много ложных срабатываний (всякий раз, когда начинается или прекращается большая работа), до такой степени, что это будет бесполезно. Я бы лично не стал пытаться.
person
Alin Sînpălean
schedule
16.01.2019