# Monitoring stack — Garage cluster (vps01 + bigbox + vps02) Стек мониторинга для S3-кластера Garage (репликация RF=3, WireGuard 10.8.0.0/24). Расположен на **bigbox** в `/opt/monitoring`. ## Архитектура ``` bigbox (10.8.0.2) ┌─────────────────────────────────────────────────┐ │ prometheus :9090 ── scrape ──► garage x3 :3903 │ │ │ (WG admin API) │ │ ├──► node-exporter :9100 (bigbox) │ │ └──► 10.8.0.1:3903 (vps01) │ │ 10.8.0.4:3903 (vps02) │ │ │ │ grafana :3001 (dashboards, alerts) │ │ loki :3100 (logs) │ │ promtail ── docker.sock ──► docker logs garage │ └─────────────────────────────────────────────────┘ │ ▼ WireGuard 10.8.0.0/24 vps01 (10.8.0.1) vps02 (10.8.0.4) ``` ## Сервисы и порты | Сервис | Порт | Доступ | Примечание | |-----------|-----------|--------------------|--------------------------------| | Prometheus| 9090 | локально/WG | retention 30d (TSDB) | | Grafana | 3001 | браузер bigbox | 3000 занят gitea → 3001 | | Loki | 3100 | локально | сбор логов | | Promtail | — | docker.sock | docker logs garage | | node-exp | 9100 | WG | на каждой ноде (системные метрики) | ## Garage admin API (метрики) В Garage v2.1 admin API (включая `/metrics` в Prometheus-формате) слушает **отдельный порт** `[admin] api_bind_addr`. На всех трёх нодах прописано: ```toml [admin] api_bind_addr = ":3903" # bigbox 10.8.0.2, vps01 10.8.0.1, vps02 10.8.0.4 admin_token = "c213de..." metrics_token = "c213de..." ``` Проверка метрик: ``` curl -H "Authorization: Bearer c213de..." http://10.8.0.2:3903/metrics ``` `/health` возвращает 200 при кворуме (≥2 нод), 503 иначе. Порты 3903 открыты только для WG-подсети: - vps01: `ufw allow from 10.8.0.0/24 to any port 3903` - vps02/bigbox: файрвол не блокирует (policy ACCEPT) ## Запуск ``` cd /opt/monitoring docker compose up -d ``` Пароль Grafana — переменная `GRAFANA_ADMIN_PASSWORD` в `.env` (по умолчанию `admin`). ## Полезные команды ``` # статус кластера docker run --rm -v /opt/garage/garage.toml:/etc/garage.toml:ro \ -v /opt/garage/meta:/var/lib/garage/meta \ --entrypoint /garage dxflrs/garage:v2.1.0 status # метрики одной ноды (Prometheus-формат) curl -s -H "Authorization: Bearer " http://10.8.0.2:3903/metrics | head # health curl -s -o /dev/null -w "%{http_code}" http://10.8.0.2:3903/health ``` ## Алерты (prometheus/alerts.yml) | Алерт | Условие | Severity | |--------------------|--------------------------------|----------| | GarageNodeDown | `up{job="garage"} == 0` (2м) | critical | | GarageNoQuorum | `<2` нод up (2м) | critical | | GarageResyncErrors | `garage_block_resync_error_count > 0` (10м) | warning | | GarageNodeUnstable | RPC health down (5м) | warning | ## Катастрофоустойчивость Проект хранится в **двух** git-репозиториях (см. ниже) — на случай поломки bigbox.