mirror of
https://gitverse.ru/kpa39l/monitoring.git
synced 2026-09-29 09:55:09 +00:00
6.0 KiB
6.0 KiB
WALKTHROUGH — Мониторинг кластера (капитанский журнал)
Хронология. Цель — воспроизводимость с нуля. Подробные грабли — в EXPERIENCE.md.
2026-09-08 — vps03 в WG + per-node дашборды (сессия @session:default/20260908_142639_b2d5b4)
Задача
Мониторинг vps03 (77.67.89.154, Debian 13) без публикации порта наружу; на каждую ноду отдельный дашборд с сетью по интерфейсам (RX/TX + утилизация).
Шаг 1. WireGuard vps03
- Сгенерировать ключ vps03 на bigbox:
wg genkey | tee priv | wg pubkey | tee pub(получилиHBTzrS86SZ+...). - На vps03:
apt install wireguard-tools,/etc/wireguard/wg0.conf:[Interface] Address = 10.8.0.3/24 PrivateKey = <priv vps03> [Peer] PublicKey = <pubkey hub vps01: ZAvz4xCE...> Endpoint = 5.129.217.146:51820 AllowedIPs = 10.8.0.0/24systemctl enable --now wg-quick@wg0. ⚠️ Грабль:printf "PrivateKey = ..."в heredoc съел пробел (PrivateKey=...) → wg-quick падал. Исправлять прямой перезаписью файла. - На vps01 (hub):
wg set wg0 peer <pub vps03> allowed-ips 10.8.0.3/32- добавить блок [Peer] в /etc/wireguard/wg0.conf (навсегда, cp .bak сначала).
- На bigbox/vps02: тот же
wg set ... allowed-ips 10.8.0.3/32+ в файл. - Грабль-звезда: ping vps03→vps01 работает, а vps03→bigbox/vps02 — нет.
Причина: WireGuard дропает пакеты, чей src НЕ в AllowedIPs пира. У bigbox/vps02
в AllowedIPs пира vps01 было только
10.8.0.1/32. Решение: расширить до10.8.0.1/32, 10.8.0.3/32(runtimewg set+ файл). После этого ping OK (vps03→bigbox 113ms, vps03→vps02 86ms).
Шаг 2. node-exporter vps03
apt install prometheus-node-exporter,/etc/default/prometheus-node-exporter:ARGS="--web.listen-address=10.8.0.3:9100"(не 127.0.0.1 — иначе по WG не достать; не*:— наружу светится).- Проверка:
ss -tlnp | grep 9100→ 10.8.0.3:9100;curl http://77.67.89.154:9100→ refused. - prometheus.yml: в job
nodeдобавлен таргет10.8.0.3:9100(relabel host=vps03).docker compose restart prometheus, проверитьapi/v1/targets→ node ×4 up.
Шаг 3. Per-node дашборды
- Обнаружение: в node-exporter 1.9 (apt/Debian 13) метрики сети называются
node_network_receive_bytes_total{device=...}/node_network_transmit_bytes_total, скорость линка —node_network_speed_bytes(Б/с). - Генератор
/tmp/gen_nodes_dash.py(Python) →grafana/dashboards/node-<host>.json(uidnode-<host>, title "Node "): панели Availability (stat up), Disk free GB (node_filesystem_avail_bytes{fstype!~"tmpfs|overlay|squashfs"}), Memory (node_memory_MemAvailable_bytes), Load (load1/5/15), Net RX/TX (rate(...[5m])), Net utilization(rx+tx)*8/speed*100. - Физические интерфейсы: vps01=eth0, vps02=enp3s0, vps03=ens1, bigbox=eno1. Контейнерные (docker0/veth*/br-*) исключены.
- Грабль скорости: на виртуалках vps01/vps02
node_network_speed_bytes= -125000 (sysfs speed=-1 → exporter умножает на 125000). На физических (vps03/bigbox) = 1.25e+08. Решение: для vps01/vps02 в формуле утилизации константа125000000Б/с (1 Гбит), для vps03/bigbox — сама метрика. - Provisioning подхватывает дашборды автоматом (~30с, перечитывает папку).
Проверка:
docker cp grafana:/var/lib/grafana/grafana.db /tmp/gf.db,SELECT uid,title FROM dashboard WHERE uid LIKE 'node-%'→ 4 строки. - Общий nodes.json удалён — заменён на 4 per-node дашборда.
Шаг 4. Git
git add -A && git commit(2 коммита: WG+дашборды; EXPERIENCE-грабли)git push origin master→ gitverse (6e48fd8,eaafb1f)- gitea mirror-sync:
curl -X POST -H "Authorization: token <GITEA_TOK>" http://127.0.0.1:3000/api/v1/repos/estorozhenko/monitoring/mirror-sync→ 200
Итог проверки
api/v1/targets?state=any→ node ×4 up (10.8.0.1/2/3/4)- grafana.nixg.ru/api/health → 200
- Дашборды node-vps01/02/03/bigbox — в БД Графаны
2026-09-08 (вечер) — подпапки дашбордов (сессия @session:default/20260908_180858_730d1b)
Пользователь создал папки в UI Grafana (nodes, vinogorod) и попросил разложить дашборды по ним (в файловой системе + в интерфейсе).
- Перемещение на диске (git mv, история сохранена):
grafana/dashboards/nodes/node-{bigbox,vps01,vps02,vps03}.json grafana/dashboards/vinogorod/vinograd-wan.json garage-cluster.json — остался в корне grafana/provisioning/dashboards/dashboards.yml— 3 провайдера:- garage-dashboards → path /var/lib/grafana/dashboards (корень), folder: Garage
- node-dashboards → path .../dashboards/nodes, folder: nodes
- vinogorod-dashboards → path .../dashboards/vinogorod, folder: vinogorod (Grafana type:file НЕ ходит рекурсивно — поэтому на подпапку свой provider.)
docker compose restart grafana— provisioning применил папки.- Проверка по БД: Node * → nodes, Vinograd WAN → vinogorod, Garage Cluster → Garage.
- Коммит
4b0539d→ gitverse + gitea mirror-sync.