# 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 | ## Подъём ```bash # 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` (env `METRICS_PORT`); - **трейсы**: `DealTracingHosting` — OTel → OTLP, включается env `OTEL_EXPORTER_OTLP_ENDPOINT` (адрес коллектора; без него трейсинг выключен), имя сервиса — `OTEL_SERVICE_NAME`; - **логи**: Serilog JSON обогащается `TraceId`/`SpanId` (`TraceContextEnricher`) для связи с трейсами. ## Дашборды и алерты Дашборды — как код: `grafana/dashboards/*.json` (правки только в репозитории, UI не сохраняет). Алерты — `prometheus-rules.yml` (доступность, ошибки/5xx, очереди, ресурсы хоста и контейнеров). ## Обновление версий образов Версии зафиксированы в compose-файлах. При обновлении — свежие стабильные теги: `otel/opentelemetry-collector-contrib`, `grafana/tempo`, `prom/node-exporter`, `gcr.io/cadvisor/cadvisor`, `grafana/loki`, `grafana/promtail`, `prom/prometheus`, `grafana/grafana`.