В этой статье приведены примеры популярных запросов Prometheus для мониторинга Kubernetes.
Если вы только начинаете работать с Prometheus и у вас возникают сложности при создании запросов PromQL, советуем обратиться к руководству по началу работы с PromQL (перевод). Здесь мы пропустим теорию и сразу перейдём к практике.
Рейтинг основан на опыте компании Sysdig, ежедневно оказывающей сотням клиентов помощь в настройке мониторинга их кластеров:
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)
Хотите узнать больше?
Рекомендуем изучить нашу шпаргалку по PromQL, чтобы узнать, как писать более сложные запросы PromQL.
Также воспользуйтесь отличной коллекцией Awesome Prometheus alerts collection. Она включает несколько сотен Prometheus alert rules, вы можете изучить их, чтобы узнать больше о PromQL и Prometheus.