Какие метрики вы используете для оценки загрузки системы?

«Какие метрики вы используете для оценки загрузки системы?» — вопрос из категории Мониторинг и логирование, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для комплексной оценки загрузки системы я отслеживаю метрики на четырех уровнях: инфраструктура, контейнеры, приложение и бизнес.

1. Инфраструктура (Node Level, собираются node_exporter):

  • CPU: node_cpu_seconds_total (разбивка по режимам). Рассчитываю (1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m]))) * 100 для получения % утилизации. Также смотрю node_load1, node_load5, node_load15.
  • Память: node_memory_MemTotal_bytes, node_memory_MemAvailable_bytes. Ключевой показатель — процент доступной памяти.
  • Диск: node_disk_io_time_seconds_total (загрузка), node_disk_io_time_weighted_seconds_total (взвешенное время IO), node_filesystem_avail_bytes (свободное место).
  • Сеть: node_network_receive_bytes_total, node_network_transmit_bytes_total (трафик).

2. Контейнеры (Kubernetes, собираются cAdvisor / kube-state-metrics):

  • По подам/контейнерам: container_cpu_usage_seconds_total, container_memory_working_set_bytes. Эти метрики позволяют найти "шумных соседей".
  • По деплойментам: kube_deployment_status_replicas_available, kube_deployment_spec_replicas (соответствие желаемого и доступного).

3. Приложение (Application Level):

  • Запросы: RPS (Requests Per Second), собираемый через счетчики в Nginx Ingress (nginx_ingress_controller_requests) или самим приложением.
  • Задержки: Гистограмма времени ответа, обычно разбиваю на перцентили p50, p90, p99.
  • Ошибки: Rate HTTP-кодов 5xx и 4xx.

4. Бизнес-метрики: Например, количество активных пользователей или успешных транзакций в минуту, которые напрямую коррелируют с нагрузкой.

Пример алерта в Prometheus на высокую загрузку CPU в неймспейсе:

groups:
- name: node_alerts
  rules:
  - alert: HighNodeCPU
    expr: (1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)) * 100 > 80
    for: 10m
    labels:
      severity: warning
    annotations:
      summary: "High CPU usage on {{ $labels.instance }}"