feat(monitoring): метрики CPU/RAM/диска хоста и контейнеров
Дашборд «Пайплайны пост-обработки» покрывал только прикладную логику — нехватка памяти/CPU на сервере была видна только косвенно, по латентности API. Добавлены node-exporter (метрики хоста) и cAdvisor (метрики по контейнерам, профиль monitoring) — оба без публикации портов наружу, Prometheus ходит к ним по внутренней сети compose. Новый дашборд host.json («Хост и контейнеры») и три алерта (HostMemoryLow/HostDiskLow/HostCpuHigh) с порогами под сервер 1gb (8 ГБ RAM, 4 CPU, 50 ГБ диска).
This commit is contained in:
@@ -704,6 +704,73 @@ services:
|
||||
profiles: ["monitoring"]
|
||||
logging: *default-logging
|
||||
|
||||
node-exporter:
|
||||
# Метрики железа хоста (CPU, память, диск, сеть, load average) — то,
|
||||
# чего нет ни в одном из приложенческих экспортеров выше. Без
|
||||
# `network_mode: host` (не нужен: читаем /proc,/sys,/ хоста через
|
||||
# bind-mount, а Prometheus достаёт их по имени сервиса во внутренней
|
||||
# сети compose — так безопаснее, не расширяет сетевой доступ контейнера).
|
||||
image: prom/node-exporter:v1.8.2
|
||||
restart: unless-stopped
|
||||
pid: host
|
||||
volumes:
|
||||
- /proc:/host/proc:ro
|
||||
- /sys:/host/sys:ro
|
||||
- /:/rootfs:ro
|
||||
command:
|
||||
- '--path.procfs=/host/proc'
|
||||
- '--path.sysfs=/host/sys'
|
||||
- '--path.rootfs=/rootfs'
|
||||
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
|
||||
# Не публикуем порт наружу вообще (не 127.0.0.1:9100, а совсем без
|
||||
# ports) — Prometheus ходит к нему по внутренней сети compose
|
||||
# (`node-exporter:9100`), публикация на хост для этого не нужна.
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "wget -q -O- http://127.0.0.1:9100/metrics >/dev/null || exit 1"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 10s
|
||||
profiles: ["monitoring"]
|
||||
logging: *default-logging
|
||||
|
||||
cadvisor:
|
||||
# Метрики по контейнерам (CPU/память каждого) — отвечает на вопрос
|
||||
# «какой из контейнеров ест ресурсы», в отличие от node-exporter
|
||||
# (только хост целиком). Дороже node-exporter по CPU/RAM (собственные
|
||||
# ~60-120 МБ RSS + периодический обход cgroups) — на сервере 8 ГБ/4 CPU
|
||||
# с ~13 контейнерами это приемлемо, но не бесплатно; `--docker_only`
|
||||
# и `--disable_metrics` ниже отключают часть коллекторов сверх дефолта
|
||||
# cAdvisor (который уже отключает cpu_topology/hugetlb/memory_numa/
|
||||
# process/sched/tcp/udp и т.п.) — здесь дополнительно per-core CPU,
|
||||
# perf_event и дисковые метрики (диск и так покрыт node-exporter'ом,
|
||||
# дублировать через cAdvisor незачем). Список допустимых значений —
|
||||
# `cadvisor -help` (в версии образа меняется, не все имена стабильны
|
||||
# между релизами — при апгрейде образа сверяться с `-help`).
|
||||
image: gcr.io/cadvisor/cadvisor:v0.49.2
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /:/rootfs:ro
|
||||
- /var/run:/var/run:ro
|
||||
- /sys:/sys:ro
|
||||
- /var/lib/docker/:/var/lib/docker:ro
|
||||
# Только чтение — cAdvisor не должен иметь возможность управлять
|
||||
# контейнерами, ему нужен только список и статистика.
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
command:
|
||||
- '--docker_only=true'
|
||||
- '--disable_metrics=percpu,perf_event,diskIO,disk,app'
|
||||
# Без ports вообще — тот же принцип, что и у node-exporter: Prometheus
|
||||
# достаёт метрики по имени сервиса (`cadvisor:8080`) внутри сети compose.
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "wget -q -O- http://127.0.0.1:8080/healthz >/dev/null || exit 1"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 15s
|
||||
profiles: ["monitoring"]
|
||||
logging: *default-logging
|
||||
|
||||
grafana:
|
||||
image: grafana/grafana:13.1.0
|
||||
restart: unless-stopped
|
||||
|
||||
Reference in New Issue
Block a user