← Назад к вопросам

Какие метрики снимаешь с контейнеров

2.0 Middle🔥 192 комментариев
#Docker и контейнеризация#Мониторинг и логирование

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Мониторинг контейнеров: ключевые метрики и подходы

Снимаемые метрики с контейнеров делятся на несколько уровней: метрики контейнерной инфраструктуры (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()
    

Практика сбора метрик

На практике используется комбинация инструментов:

  1. cAdvisor (встроен в kubelet): сбор метрик ресурсов контейнеров и узлов.
  2. kube-state-metrics: генератор метрик о состоянии объектов Kubernetes (Pods, Deployments, Nodes).
  3. Prometheus Node Exporter: сбор системных метрик узлов.
  4. Приложение с экспортером метрик (Prometheus client library, OpenTelemetry): сбор бизнес-метрик.

Метрики агрегируются в центральную систему мониторинга (Prometheus, Datadog, Grafana Cloud), где настраиваются алерты на ключевые индикаторы: высокий CPU throttling, рост количества рестартов, недоступность Pod, превышение лимитов памяти, падение бизнес-throughput. Визуализация обычно выполняется в Grafana, где dashboards объединяют метрики всех уровней для полного представления о здоровье системы.

Какие метрики снимаешь с контейнеров | PrepBro