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)

Другие вопросы по тегам