Tоп PromQL запросов для мониторинга Kubernetes
1. Количество pods в каждом namespace
Информация о количестве pod в каждом namespace может быть полезна для обнаружения аномалий в кластере, например, слишком большого количества pods в отдельном namespace:
sum by (namespace) (kube_pod_info)
2. Количество контейнеров без CPU limits в каждом namespace
Важно правильно задавать лимиты для оптимизации производительности приложений и кластера. Этот запрос находит контейнеры без CPU limits:
count by (namespace)(sum by (namespace,pod,container)(kube_pod_container_info{container!=""}) unless sum by (namespace,pod,container)(kube_pod_container_resource_limits{resource="cpu"}))
3. Количество перезагрузок pods в каждом namespace
С помощью этого запроса вы получите список pods, которые перезапускались. Это важный показатель, поскольку большое количество перезагрузок pod обычно означает CrashLoopBackOff:
sum by (namespace)(changes(kube_pod_status_ready{condition="true"}[5m]))
4. Pods в статусе Not Ready в каждом namespace
Запрос выводит все pods, при работе которых возникла проблема. Это может быть первым шагом к её локализации и устранению:
sum by (namespace)(kube_pod_status_ready{condition="false"})
5. Превышение ресурсов кластера — ЦП
Необходимо избегать ситуации, когда CPU limits превышают ресурсы кластера. В противном случае вы можете столкнуться с проблемой троттлинга процессора. Обнаружить превышение лимитами ресурсов кластера можно с помощью запроса:
sum(kube_pod_container_resource_limits{resource="cpu"}) - sum(kube_node_status_capacity_cpu_cores)
6. Превышение ресурсов кластера — Память
Если все Memory limits суммарно превышают ёмкость кластера, то это может привести к PodEviction, если на узле не будет хватать памяти. Для проверки используйте запрос PromQL:
sum(kube_pod_container_resource_limits{resource="memory"}) - sum(kube_node_status_capacity_memory_bytes)
7. Количество исправных узлов кластера
Запрос выведет количество исправных узлов кластера:
sum(kube_node_status_condition{condition="Ready", status="true"}==1)
8. Количество узлов кластера, которые могут работать некорректно
Найти узлы кластера, которые периодически меняют состояние с Ready на Not Ready:
sum(changes(kube_node_status_condition{status="true",condition="Ready"}[15m])) by (node) > 2
9. Обнаружение простаивающих ядер ЦП
Планировании ресурсов кластера Kubernetes — не самая простая задача. Этот запрос поможет вам определить, сколько ядер ЦП простаивают:
sum((rate(container_cpu_usage_seconds_total{container!="POD",container!=""}[30m]) - on (namespace,pod,container) group_left avg by (namespace,pod,container)(kube_pod_container_resource_requests{resource="cpu"})) * -1 >0)
10. Обнаружение неиспользуемой памяти
Этот запрос поможет снизить ваши затраты, предоставив информацию о неиспользуемой памяти:
sum((container_memory_usage_bytes{container!="POD",container!=""} - on (namespace,pod,container) avg by (namespace,pod,container)(kube_pod_container_resource_requests{resource="memory"})) * -1 >0 ) / (1024*1024*1024)