mirror of
https://gitverse.ru/kpa39l/monitoring.git
synced 2026-09-29 09:55:09 +00:00
Vinograd WAN (Ростелеком): ICMP-мониторинг канала Винный город — шлюз 83.239.50.145 + оборудование 83.239.50.146, scrape 30s, RTT графики, алерт VinogradRostelecomDown, дашборд Vinograd WAN
This commit is contained in:
@@ -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`)
|
||||
|
||||
Reference in New Issue
Block a user