Единый observability-стек: Prometheus + Loki + Grafana + Caddy auth-гейт
Deploy Observability / Deploy Observability Stack (push) Failing after 20s
Deploy / Deploy to Data VPS (push) Failing after 19s

Отдельный от db+vaultwarden compose-файл (разный жизненный цикл, свой
deploy-workflow) — единственное место сбора для backend, лендинга и
каждой прокси-ноды, которые физически живут на других серверах.

Prometheus скрейпит наружу (сам ходит в /metrics на тех хостах — там
нужно только открыть порт метрик для IP этого VPS). Loki, наоборот,
принимает пуши логов ИЗВНЕ — порт 3100 публикуется наружу и обязательно
фильтруется firewall'ом по IP тех хостов.

Grafana не торчит в интернет напрямую (127.0.0.1-only) — единственный
вход через Caddy с forward_auth, гейтящим по cookie-сессии
netrunner-backend (GET /api/v1/admin/observability/check,
Owner/Moderator). 3 provisioned дашборда (backend/landing/прокси-ноды).

Список scrape-таргетов для прокси-нод (observability/targets/nodes.json)
генерится и заливается автоматически из netrunner-proxy при каждом
деплое нод — вручную ничего не поддерживается.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-09 23:22:11 +07:00
parent f373601025
commit 414667062c
14 changed files with 698 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
# Гейтит доступ к Grafana через уже существующую cookie-сессию
# netrunner-backend (владелец/модератор) — Grafana сама наружу НЕ торчит
# (см. docker-compose.observability.yml, порт 3030 только на 127.0.0.1),
# только через этот Caddy.
#
# Как это работает: cookie сессии backend'а (nrxp_token) ставится с
# Domain=.netrunner-vpn.com (см. COOKIE_DOMAIN в netrunner-backend/.env) —
# значит браузер сам приложит её и к запросам на grafana.netrunner-vpn.com
# (тот же родительский домен, другой сабдомен — это same-site, не
# cross-site, для куки без атрибута Partitioned браузер это разрешает даже
# из iframe). forward_auth здесь пересылает эту cookie на реальный бэкенд
# (уже на другом VPS) и либо пускает дальше в Grafana (200), либо блокирует
# (401) — сам Caddy решения не принимает, только проксирует запрос-проверку.
#
# ЗАМЕНИТЬ ПЕРЕД ПЕРВЫМ ЗАПУСКОМ:
# - CHANGE_ME_GRAFANA_DOMAIN — сабдомен для Grafana (например
# grafana.netrunner-vpn.com), DNS A-запись на IP этого VPS.
# - CHANGE_ME_BACKEND_PUBLIC_URL — публичный URL бэкенда (например
# https://account.netrunner-vpn.com), КОГДА backend будет арендован и
# задеплоен — до этого auth-гейт нерабочий (пускать некому проверять).
CHANGE_ME_GRAFANA_DOMAIN {
forward_auth CHANGE_ME_BACKEND_PUBLIC_URL {
uri /api/v1/admin/observability/check
copy_headers Cookie
}
reverse_proxy grafana:3000
}