Observability-стек «Дейла»
Современный (vendor-neutral) стек мониторинга. Поднимается профилем observability (в prod —
deploy/compose.prod.yml, в dev — deploy/compose.dev.yml); наружу порты не публикуются (prod —
доступ оператору по SSH-туннелю).
Состав и поток данных
| Слой | Сервис | Конфиг | Поток |
|---|---|---|---|
| Трейсы (приём) | otel-collector |
otel-collector.yml |
OTLP от сервисов (:4317) → Tempo |
| Трейсы (хранение) | tempo |
tempo.yml |
OTLP от коллектора, retention 7 сут. |
| Логи | loki + promtail |
loki.yml, promtail.yml |
docker-логи → Loki |
| Метрики | prometheus |
prometheus.yml, prometheus-rules.yml |
scrape /metrics процессов и cadvisor/node-exporter |
| Ресурсы контейнеров | cadvisor |
— | Prometheus |
| Ресурсы хоста | node-exporter |
— | Prometheus |
| Визуализация | grafana |
grafana/provisioning/** |
Loki + Prometheus + Tempo |
Подъём
# prod (нужен deploy/.env.prod с DEAL_GRAFANA_ADMIN_PASSWORD)
docker compose --env-file deploy/.env.prod -f deploy/compose.prod.yml --profile observability up -d
# dev
docker compose -f deploy/compose.dev.yml --profile observability up -d
Проверка: Prometheus /targets (job deal — 4 процесса UP, cadvisor, node-exporter, tempo) →
Grafana → папка «Дейл» → Deal-Metrics-Overview / Deal-Logs / Deal-Traces / Deal-Resources.
Подключение сервисов (код)
Общая настройка — Deal.Grpc.Hosting (сервисы) и Deal.Api/Observability (ядро):
- метрики:
DealMetricsHosting— OTel → Prometheus, отдельный HTTP/1.1-эндпоинт/metrics:9464(envMETRICS_PORT); - трейсы:
DealTracingHosting— OTel → OTLP, опт-ин через envOTEL_EXPORTER_OTLP_ENDPOINT(адрес коллектора; без него трейсинг выключен), имя сервиса —OTEL_SERVICE_NAME; - логи: Serilog JSON обогащается
TraceId/SpanId(TraceContextEnricher) для связи с трейсами.
Дашборды и алерты
Дашборды — как код: grafana/dashboards/*.json (правки только в репозитории, UI не сохраняет).
Алерты — prometheus-rules.yml (доступность, ошибки/5xx, очереди). Алерты по ресурсам вынесены в
prometheus-resource-rules.yml и отключены по умолчанию; включаются добавлением файла в rule_files,
пороги — через env DEAL_ALERT_* (см. шапку файла).
Обновление версий образов
Версии зафиксированы в compose-файлах. При обновлении — свежие стабильные теги:
otel/opentelemetry-collector-contrib, grafana/tempo, prom/node-exporter,
gcr.io/cadvisor/cadvisor, grafana/loki, grafana/promtail, prom/prometheus, grafana/grafana.