Files

7.8 KiB
Raw Permalink Blame History

План работ: мониторинг Garage-кластера

Цель

Вывести статус кластера Garage (vps01, bigbox, vps02) в браузер через Grafana, с Prometheus-метриками и сбором логов (Loki). Без трейсов (до них «не доросли»).

Этап 1. Метрики Garage (выполнено ✅)

  1. Понять, как Garage v2.1 отдаёт метрики. → Найдено: admin API на отдельном порту [admin] api_bind_addr; /metrics в Prometheus-формате; metrics_token опционален.
  2. Добавить в /opt/garage/garage.toml на трёх нодах:
    [admin]
    api_bind_addr = "<WG-IP>:3903"
    metrics_token = "<token>"
    
    • bigbox: 10.8.0.2:3903 (файл — estorozhenko)
    • vps01: 10.8.0.1:3903 (файл — root, sudo)
    • vps02: 10.8.0.4:3903 (файл — root, sudo)
  3. Открыть порт 3903 для WG-подсети на vps01 (ufw); на vps02/bigbox не требуется.
  4. Перезапустить ноды по очереди: vps02 → vps01 → bigbox (пауза ~8с).
  5. Проверить: curl -H "Authorization: Bearer <token>" http://<ip>:3903/metrics → 200.

Результат: все 3 ноды отдают метрики, кластер HEALTHY.

Этап 2. Стек мониторинга на bigbox (выполнено ✅)

  • Создать /opt/monitoring/ с docker-compose.yml, prometheus.yml, alerts.yml
  • 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

Этап 3. Логи (после метрик 🔄)

  • Promtail (docker.sock) → Loki :3100 → Grafana
  • Логи garage со всех нод (сейчас promtail только на bigbox)

Этап 4. Git + катастрофоустойчивость (в работе 🔄)

  • MD-файлы: README.md, EXPERIENCE.md, PLAN.md
  • git init в /opt/monitoring, первый коммит
  • remote: git@gitverse.ru:kpa39l/monitoring.git (master)
  • git push -u origin master
  • В gitea: pull mirror репозитория из gitverse
  • В gitea: добавить estorozhenko с полными правами (на случай поломки bigbox)

Этап 5. Полировка (TODO)

  • Разные admin_token / metrics_token (openssl rand -base64 32)
  • Дашборд: статус нод, занятость диска, блоки, репликация
  • Уведомления алертов (например, в Telegram/почту)

Этап 6. Метрики tproxy-server (vps03) — TODO 🔄

WEB Proxy для Telegram Desktop развёрнут на vps03 (77.67.89.154, Debian 13): Caddy → tproxy-server:8080 → MTProxy:2398. Admin-эндпоинты:

  • http://127.0.0.1:8081/readyz → 200 ready / 503 backend unavailable (TCP-проба ко всем backend-профилям, у нас 127.0.0.1:2398)
  • http://127.0.0.1:8081/healthz → всегда ok (процесс жив)
  • http://127.0.0.1:8081/metrics → Prometheus-формат (текст, version 0.0.4)

Метрики tproxy (счётчики из internal/server/server.go serveMetrics):

Метрика Смысл
tproxy_sessions_live / streams_live активные сессии/потоки
tproxy_backend_dials_in_flight исходящие к MTProxy в полёте
tproxy_pending_bytes / _items очередь ожидающих данных
tproxy_sessions_created_total / closed_total создано/закрыто (суммарно)
tproxy_streams_opened_total / rejected_total открыто/отклонено потоков
tproxy_backend_dial_failures_total ошибки коннекта к MTProxy (рост = проблема)
tproxy_bytes_up_total / down_total трафик вверх/вниз (всего)
tproxy_limit_hits_total срабатывания лимитов

Задача:

  • РЕШЕНО через 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.
  • Job 'tproxy' в prometheus.yml: targets: ['127.0.0.1:18081'] → up=1, метрики скрейпятся.
  • Дашборд Garage Cluster дополнен 3 панелями tproxy: live sessions/streams, traffic /sec, backend errors.
  • Алерты TProxyDown (critical) и TProxyBackendErrors (warning) в alerts.yml.
  • Починен существующий баг: alerts.yml не был смонтирован в Prometheus — garage-алерты не работали (0 групп правил). Добавлен volume ./alerts.yml:/etc/prometheus/alerts.yml:ro в docker-compose.yml. Теперь загружено 6 правил (garage + tproxy).
  • Починены пустые панели (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.
  • 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). При открытии наружу — резать по источнику (IP bigbox) в nft, не публиковать всем.
  • readyz сделает TCP-пробу К КАЖДОМУ профилю — если добавить второй профиль с мёртвым бэкендом, readyz станет 503 (это фича).
  • Секреты WEB Proxy (profiles.json) к мониторингу отношения не имеют — в метрики не попадают.

Риски / заметки

  • Перезапуск нод кластера безопасен, но делать по очереди.
  • Scratch-образ garage → для CLI-команд нужен --entrypoint /garage + монтирование meta.
  • Интернет с bigbox частично ограничен; документация — через git.deuxfleurs.fr (ветка main-v1).
  • Port 3000 занят gitea → Grafana на 3001.