Какие метрики снимаешь с контейнеров
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Мониторинг контейнеров: ключевые метрики и подходы
Снимаемые метрики с контейнеров делятся на несколько уровней: метрики контейнерной инфраструктуры (Docker/Kubernetes runtime), метрики ресурсов (аналогичные системным), метрики приложения и специфические метрики orchestration-системы. Мониторинг должен быть многоуровневым, чтобы охватить состояние всей цепочки: от физического хоста до бизнес-логики внутри контейнера.
1. Метрики ресурсов контейнера (Container Resource Metrics)
Это базовые метрики, аналогичные системным, но собранные для каждого контейнера или Pod в Kubernetes.
- CPU:
* **Usage (использование)**: абсолютное использование CPU в ядрах или процентах. Ключевой показатель для анализа производительности.
* **Throttling (ограничение)**: количество времени, которое CPU был ограничен (throttled) из-за превышения лимитов (`cpu.cfs_throttled_seconds_total`). Это критично для диагностики проблем производительности при жестких лимитах в Kubernetes.
```promql
# Пример запроса Prometheus для CPU throttling в Kubernetes
rate(container_cpu_cfs_throttled_seconds_total{container_name!="POD", pod_name="my-app"}[5m])
```
- Memory:
* **Usage (использование)**: текущее использование памяти.
* **Working Set**: часть памяти, которая активно используется и не может быть освобождена. Часто более показательный метрик, чем общее использование.
* **Limit & Request**: отслеживание соотношения фактического использования и установленных в Kubernetes `limits`/`requests`. Превышение лимита приводит к OOMKill.
- Disk I/O (если приложение интенсивно работает с диском):
* Read/Write operations per second, throughput (байты/сек).
- Network:
* **Bytes/Packets received & transmitted**: объем сетевого трафика.
* **Error rates**: количество ошибок (например, `tx_errors`, `rx_errors`) на интерфейсе контейнера.
2. Метрики состояния и здоровья контейнера (Container Lifecycle & Health)
Эти метрики позволяют оценивать жизненный цикл и готовность контейнеров, особенно важны в Kubernetes.
- Restarts (перезапуски): количество перезапусков контейнера (
kube_pod_container_status_restarts_total). Высокое значение сигнализирует о постоянных сбоях приложения или проблемах с конфигурацией. - Status (состояние): текущий статус (
running,waiting,terminated). В Kubernetes отслеживаются статусы Pod и каждого контейнера внутри (container_state). - Ready (готовность): для сервисов с readiness probes — метрика, показывающая, готов ли контейнер принимать трафик (
kube_pod_container_status_ready). - Uptime (время работы): продолжительность работы контейнера без перезапуска.
3. Метрики orchestration-системы (Kubernetes/Docker Runtime)
При использовании Kubernetes сбор метрик расширяется на уровень кластера.
- Node (узлы):
* Доступность и состояние узлов (`kube_node_status_ready`, `kube_node_status_condition`).
* Использование ресурсов на узле (CPU, Memory, Disk) с разбивкой по системным и пользовательским процессам.
- Pod/Deployment/StatefulSet:
* **Desired vs. Current vs. Ready replicas**: соотношение желаемого, текущего и готового количества реплик для любого workload ресурса (`kube_deployment_status_replicas_ready`). Разница между `desired` и `ready` — прямой индикатор проблем.
* **Pod phases**: количество Pod в каждой фазе (`Pending`, `Running`, `Failed`, etc.).
- Control Plane:
* Метрики состояния ключевых компонентов кластера: **API Server** (latency, request rate, error rate), **etcd** (latency, wal sync duration), **Controller Manager** и **Scheduler** (queue depth, scheduling latency).
4. Метрики приложения внутри контейнера (Application Metrics)
Контейнер — лишь оболочка. Самые важные метрики — это бизнес-метрики приложения, которые экспортируются из самого контейнера.
- Бизнес-метрики: запросы в секунду, ошибки, длительность транзакций, количество активных пользователей.
- Лативи (latency): время ответа приложения на запросы (p95, p99).
- Трафик (throughput): количество успешно обработанных запросов/сообщений.
- Ошибки (errors): количество и тип ошибок (5xx HTTP статусы, исключения в логах).
# Пример экспорта метрики приложения с помощью Prometheus клиента для Python from prometheus_client import Counter, generate_latest REQUEST_COUNT = Counter('http_requests_total', 'Total HTTP Requests') @app.route('/metrics') def metrics(): return generate_latest()
Практика сбора метрик
На практике используется комбинация инструментов:
- cAdvisor (встроен в kubelet): сбор метрик ресурсов контейнеров и узлов.
- kube-state-metrics: генератор метрик о состоянии объектов Kubernetes (Pods, Deployments, Nodes).
- Prometheus Node Exporter: сбор системных метрик узлов.
- Приложение с экспортером метрик (Prometheus client library, OpenTelemetry): сбор бизнес-метрик.
Метрики агрегируются в центральную систему мониторинга (Prometheus, Datadog, Grafana Cloud), где настраиваются алерты на ключевые индикаторы: высокий CPU throttling, рост количества рестартов, недоступность Pod, превышение лимитов памяти, падение бизнес-throughput. Визуализация обычно выполняется в Grafana, где dashboards объединяют метрики всех уровней для полного представления о здоровье системы.