PromQL для графического отображения количества Kubernetes POD, созданных за час
Я использую Kubernetes с kube-state-metrics и Prometheus/grafana для построения графиков различных метрик кластера Kubernetes.
Теперь я хотел бы изобразить, сколько новых POD было создано за час с течением времени.
Метрика kube_pod_created
содержит отметку времени создания как значение, но поскольку в каждом временном интервале есть значение, следующий запрос также возвращает результаты>0 для временных интервалов, в которых не было создано новых POD:
count(rate(kube_pod_created[1h])) by(namespace)
Могу ли я использовать значение в каких-то критериях для подсчета, только если значение находится в пределах "текущего" временного интервала?
3 ответа
Следующий запрос возвращает количество подов, созданных за последний час:
count(last_over_time(kube_pod_created[1h]) > time() - 3600)
Как это работает?
В
last_over_time(kube_pod_created[1h])
возвращает метки времени создания для модулей, которые были активны в течение последнего часа (см . документацию last_over_time() ). Сюда входят модули, которые могли быть запущены давно и все еще активны вместе с модулями, которые были созданы в течение последнего часа.
Нам нужно отфильтровать поды, созданные более часа назад. Это выполняется путем сравнения временных меток создания модуля с
time() - 3600
(см. документы time() ). Такое сравнение удаляет временные ряды для модулей, созданных более часа назад. См. эти документы для получения подробной информации о том, как операторы сравнения работают в PromQL.
Затем внешний count() возвращает количество временных рядов, равное количеству модулей, созданных за последний час.
POD, созданные за последний час
count ( (time() - sum by (pod) (kube_pod_created)) < 60*60 )
Согласно документам https://prometheus.io/docs/prometheus/latest/querying/functions/ rate()
следует использовать только со счетчиками. Я предлагаю вам использоватьchanges()
функция, поскольку значение времени создания должно измениться в пределах вашего временного интервала в случае создания пода, и, возможно, сумма лучше, чем подсчет.
изменения ()
Для каждого входного временного ряда changes(v range-vector) возвращает количество раз, когда его значение изменялось в пределах предоставленного временного диапазона, как мгновенный вектор.
sum(changes(kube_pod_created[1h])) by(namespace)