2026-08-30 13:38:29 +00:00
2026-08-30 13:38:29 +00:00
2026-08-30 13:38:29 +00:00
2026-08-30 13:38:29 +00:00
2026-08-30 13:38:29 +00:00
2026-08-30 13:38:29 +00:00
2026-08-30 13:38:29 +00:00
2026-08-30 13:38:29 +00:00
2026-08-30 13:38:29 +00:00

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. На всех трёх нодах прописано:

[admin]
api_bind_addr = "<WG-IP>: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 <token>" 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.

S
Description
Pull-mirror of gitverse.ru:kpa39l/monitoring — Garage cluster monitoring stack (katastrofoustoychivost)
Readme 317 KiB
Languages
Python 100%