Files
monitoring/WALKTHROUGH.md
T

4.7 KiB
Raw Blame History

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

  1. Сгенерировать ключ vps03 на bigbox: wg genkey | tee priv | wg pubkey | tee pub (получили HBTzrS86SZ+...).
  2. На 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/24
    
    systemctl enable --now wg-quick@wg0. ⚠️ Грабль: printf "PrivateKey = ..." в heredoc съел пробел (PrivateKey=...) → wg-quick падал. Исправлять прямой перезаписью файла.
  3. На vps01 (hub): wg set wg0 peer <pub vps03> allowed-ips 10.8.0.3/32
    • добавить блок [Peer] в /etc/wireguard/wg0.conf (навсегда, cp .bak сначала).
  4. На bigbox/vps02: тот же wg set ... allowed-ips 10.8.0.3/32 + в файл.
  5. Грабль-звезда: 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 (runtime wg set + файл). После этого ping OK (vps03→bigbox 113ms, vps03→vps02 86ms).

Шаг 2. node-exporter vps03

  1. apt install prometheus-node-exporter, /etc/default/prometheus-node-exporter: ARGS="--web.listen-address=10.8.0.3:9100" (не 127.0.0.1 — иначе по WG не достать; не *: — наружу светится).
  2. Проверка: ss -tlnp | grep 9100 → 10.8.0.3:9100; curl http://77.67.89.154:9100 → refused.
  3. 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 дашборды

  1. Обнаружение: в node-exporter 1.9 (apt/Debian 13) метрики сети называются node_network_receive_bytes_total{device=...} / node_network_transmit_bytes_total, скорость линка — node_network_speed_bytes (Б/с).
  2. Генератор /tmp/gen_nodes_dash.py (Python) → grafana/dashboards/node-<host>.json (uid node-<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.
  3. Физические интерфейсы: vps01=eth0, vps02=enp3s0, vps03=ens1, bigbox=eno1. Контейнерные (docker0/veth*/br-*) исключены.
  4. Грабль скорости: на виртуалках vps01/vps02 node_network_speed_bytes = -125000 (sysfs speed=-1 → exporter умножает на 125000). На физических (vps03/bigbox) = 1.25e+08. Решение: для vps01/vps02 в формуле утилизации константа 125000000 Б/с (1 Гбит), для vps03/bigbox — сама метрика.
  5. Provisioning подхватывает дашборды автоматом (~30с, перечитывает папку). Проверка: docker cp grafana:/var/lib/grafana/grafana.db /tmp/gf.db, SELECT uid,title FROM dashboard WHERE uid LIKE 'node-%' → 4 строки.
  6. Общий 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 — в БД Графаны