Ответ
Для комплексной оценки загрузки системы я отслеживаю метрики на четырех уровнях: инфраструктура, контейнеры, приложение и бизнес.
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 }}"