Этап 6: починка NO DATA в Grafana (3 причины)+relabel instance→hostname; исправлены имена garage-метрик в панелях и алертах; опыт в EXPERIENCE.md

This commit is contained in:
kpa39l
2026-09-03 08:39:53 +00:00
parent 7437864b50
commit 66ff07c52a
8 changed files with 927 additions and 189 deletions
+35 -40
View File
@@ -24,14 +24,14 @@
**Результат:** все 3 ноды отдают метрики, кластер HEALTHY.
## Этап 2. Стек мониторинга на bigbox (в работе 🔄)
## Этап 2. Стек мониторинга на bigbox (выполнено ✅)
- [x] Создать `/opt/monitoring/` с docker-compose.yml, prometheus.yml, alerts.yml
- [x] Prometheus: таргеты garage x3 (:3903), health x3, node-exporters, self
- [ ] Node-exporter на 3 хостах (10.8.0.x:9100)
- [ ] Запустить `docker compose up -d`
- [ ] Проверить Prometheus :9090 (`up{job="garage"}`, targets)
- [ ] Grafana :3001: datasource Prometheus, дашборд Garage, alerts
- [x] Node-exporter на 3 хостах (10.8.0.x:9100)
- [x] Запустить `docker compose up -d`
- [x] Проверить Prometheus :9090 (`up{job="garage"}`, targets)
- [x] Grafana :3001: datasource Prometheus, дашборд Garage, alerts
## Этап 3. Логи (после метрик 🔄)
@@ -78,41 +78,36 @@ Caddy → tproxy-server:8080 → MTProxy:2398. Admin-эндпоинты:
Задача:
- [ ] Обеспечить доступ Prometheus (bigbox) к `:8081` на vps03.
vps03 НЕ в WG-сети (10.8.0.0/24 = vps01/bigbox/vps02).
Варианты:
a) открыть 8081 на vps03 для IP bigbox в nft (правило в
`/etc/tproxy-server/firewall.nft` или отдельный файл) — самый простой;
b) добавить vps03 в WG (если хочется закрытый контур);
c) node-exporter + textfile-коллектор — не наш случай (метрики уже в HTTP).
Рекомендация: (a).
**Конкретные шаги (рекомендуемый вариант a):**
- [ ] На vps03 (77.67.89.154) добавить nft-правило, разрешающее TCP 8081
с публичного IP bigbox **178.176.197.2** (проверить актуальный IP
bigbox перед выполнением: `curl -s https://api.ipify.org`):
```
nft add rule inet filter input ip saddr 178.176.197.2 tcp dport 8081 accept
```
(или внести в `/etc/tproxy-server/firewall.nft`, если он в авто-загрузке)
- [ ] Проверить с bigbox:
`curl -s http://77.67.89.154:8081/metrics | head`
→ должен вернуть метрики tproxy (не timeout/refused).
- [ ] Добавить job 'tproxy' в `/opt/monitoring/prometheus.yml`:
```yaml
- job_name: 'tproxy'
static_configs:
- targets: ['77.67.89.154:8081']
labels:
host: vps03
service: tproxy
```
- [ ] `docker compose restart prometheus` в /opt/monitoring,
проверить `up{job="tproxy"}` на 127.0.0.1:9090 = 1.
- [ ] (Опционально) blackbox-job для внешнего HTTPS-чека vps03.nixg.ru:
`probe_success` — контролирует Caddy+сайт снаружи.
- [ ] Дашборд в Grafana: сессии, трафик (bytes_up/down rate), ошибки бэкенда.
- [ ] Алерт: `tproxy_backend_dial_failures_total` растёт, или `/readyz` 503
(можно ч/з blackbox по HTTP :8081, если открыт).
- [x] **РЕШЕНО через SSH-туннель (не nft!)** — tproxy-server слушает `admin_listen: 127.0.0.1:8081`
только на loopback (осознанно), простое nft-правило из плана НЕ сработало бы:
соединение с bigbox упёрлось бы в `Connection refused` (проверено).
Поэтому добавлен systemd-сервис `tproxy-tunnel.service` на bigbox:
```
ssh -i /home/estorozhenko/.ssh/hostkeyVPS \
-L 127.0.0.1:18081:127.0.0.1:8081 -N \
root@77.67.89.154
```
Порт 18081 (а НЕ 8081 — 8081 на bigbox занят ICQ-веб-чатом!).
Prometheus скрейпит `127.0.0.1:18081`.
- [x] Job 'tproxy' в prometheus.yml: `targets: ['127.0.0.1:18081']` → up=1, метрики скрейпятся.
- [x] Дашборд Garage Cluster дополнен 3 панелями tproxy: live sessions/streams, traffic /sec,
backend errors.
- [x] Алерты TProxyDown (critical) и TProxyBackendErrors (warning) в alerts.yml.
- [x] **Починен существующий баг: alerts.yml не был смонтирован в Prometheus** — garage-алерты
не работали (0 групп правил). Добавлен volume `./alerts.yml:/etc/prometheus/alerts.yml:ro`
в docker-compose.yml. Теперь загружено 6 правил (garage + tproxy).
- [x] **Починены пустые панели (NO DATA, 2026-09-02)**: три причины подряд —
(1) у datasource не был задан `uid` (Grafana генерила случайный), добавлен
`uid: Prometheus` в datasources.yml; (2) URL `http://prometheus:9090` не
резолвился из Grafana (Prometheus на host-сети), заменён на `http://172.28.0.1:9090`
(шлюз bridge-сети Grafana = адрес хоста); (3) панели и алерты ссылались
на несуществующие метрики (`garage_block_count`, `garage_rpc_node_health_is_up`,
`garage_api_s3_request_counter`) — переписаны на реальные (`block_resync_*`,
`cluster_layout_node_connected`, `rate(api_s3_request_counter[5m])`). Подробности —
EXPERIENCE.md п.12-17.
- [x] Relabel `instance` → hostname в prometheus.yml (garage/node/tproxy):
`10.8.0.x` → `vps01|bigbox|vps02`, `127.0.0.1:18081` → `vps03:8081`.
Легенды в Grafana — hostname, а не IP.
Заметки:
- `/metrics` и admin-эндпоинты слушают ТОЛЬКО loopback (127.0.0.1:8081). При