Files
monitoring/WALKTHROUGH.md
T

75 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 <host>"): панели Availability (stat up),
Disk free GB (`node_filesystem_avail_bytes{fstype!~"tmpfs|overlay|squashfs"}`),
Memory (`node_memory_MemAvailable_bytes`), Load (load1/5/15),
Net <iface> RX/TX (`rate(...[5m])`), Net <iface> 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 — в БД Графаны