Vinograd WAN (Ростелеком): ICMP-мониторинг канала Винный город — шлюз 83.239.50.145 + оборудование 83.239.50.146, scrape 30s, RTT графики, алерт VinogradRostelecomDown, дашборд Vinograd WAN

This commit is contained in:
estorozhenko
2026-09-08 06:01:01 +00:00
parent 66ff07c52a
commit b4f4493961
6 changed files with 391 additions and 3 deletions
+77
View File
@@ -4,6 +4,83 @@
> Ситуация: кластер Garage v2.1 (RF=3) на vps01 + bigbox + vps02, WireGuard 10.8.0.0/24.
> Задача: вывести статус кластера в браузер (Grafana + Prometheus + Loki).
## Опыт: Vinograd WAN (Ростелеком) — ICMP-мониторинг внешнего канала (2026-09-08)
> Ситуация: UptimeKuma алертил про 100% потерю пингов на шлюз 83.239.50.145
> (канал «Винный город», РТК). Задача — мониторить ОБА адреса канала (шлюз +
> наше оборудование) в нашем стеке с графиками RTT каждые 30с.
### 18. ICMP-пробы через blackbox-exporter — модуль `icmp`
blackbox-exporter поддерживает ICMP-пробы (prober: icmp). Метрики:
- `probe_success` — 1/0 (успех пробы)
- `probe_icmp_duration_seconds{phase="rtt"}` — RTT в секундах
- `probe_icmp_reply_hop_limit` — TTL ответа
Нюансы:
- В контейнере (host-network, root) ICMP работает без доп. настроек — проверил
`docker exec blackbox-exporter id` → root. В не-root окружении нужен
`setcap cap_net_raw+ep` или `net.ipv4.ping_group_range`.
- **Важно про YAML:** в `static_configs` таргеты — это список, `labels` относится
к списку целиком, а НЕ к каждому элементу отдельно. Ошибка синтаксиса ловится
`promtool check config`.
### 19. Scrape job с интервалом 30s и relabel instance
```yaml
- job_name: vinograd_wan
scrape_interval: 30s
metrics_path: /probe
params:
module: [icmp]
static_configs:
- targets: [83.239.50.145, 83.239.50.146]
relabel_configs:
# __address__ → instance: человекочитаемые имена для легенд Grafana
- source_labels: [__address__]
regex: '83\.239\.50\.145.*'
target_label: instance
replacement: vinograd-gw-83.239.50.145
...
# __address__ → реальный адрес blackbox (multi-target exporter pattern)
- target_label: __address__
replacement: 127.0.0.1:9115
```
- `scrape_interval: 30s` на уровне job — работает (проверено: точки каждые 30с).
- Regex с точками надо экранировать (`\.`), иначе 83.239.50.145 совпадёт с .146.
- relabel применяется по-порядку; сначала маппим instance, потом __address__ → blackbox.
- Проверка таргетов: `curl http://127.0.0.1:9090/api/v1/targets` → vinograd_wan 2 targets UP.
### 20. Алерт на probe_success
```yaml
- name: vinograd
rules:
- alert: VinogradRostelecomDown
expr: probe_success{job="vinograd_wan"} == 0
for: 2m
labels: {severity: critical}
```
- `for: 2m` при scrape 30s ≈ 4 пробы подряд. `promtool check config` → 7 rules found.
### 21. Grafana dashboard provisioning и ретеншн
- Дашборд кладём в `grafana/dashboards/vinograd-wan.json` — provisioner
(updateIntervalSeconds: 30) сам импортирует в фолдере Garage; рестарт не нужен.
Проверка: в grafana.db появился dashboard с uid=vinograd-wan.
- **Ретеншн «неделя»:** retention в Prometheus глобальный (--storage.tsdb.retention.time=30d
в этом стеке). Для 7 дней ровно нужен отдельный инстанс — здесь оставили 30d
(перекрывает неделю с запасом). Не пытаться задать retention per-job — его нет.
### 22. Наблюдение: шлюз РТК не пингуется, но оборудование пингуется
- 83.239.50.146 (наше оборудование) — probe_success=1, RTT ~13ms.
- 83.239.50.145 (шлюз) — probe_success=0 (не отвечает на ICMP). Совпадает с
алертом UptimeKuma. Это реальная авария, а не ошибка конфига: blackbox
корректно видит недоступность шлюза.
## Ключевые находки / грабли
### 1. Admin API Garage v2.1 слушает ОТДЕЛЬНЫЙ порт (`[admin] api_bind_addr`)