54 lines
3.3 KiB
Markdown
54 lines
3.3 KiB
Markdown
# 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, очереди). Алерты по **ресурсам** вынесены в
|
||
`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`.
|