Добавлен OTLP-провайдер, реализовано отбрасывание метрик и трейсов в observability + добавлен перезапуск nginx при пересборке контейнеров (ошибка, когда докер меняет адреса сервисов)

This commit is contained in:
mi
2026-07-29 15:15:40 +03:00
parent 3ed7239efa
commit 41e19005fb
43 changed files with 3016 additions and 83 deletions
+8 -1
View File
@@ -58,7 +58,14 @@ Bootstrap:
3. Выпустить certificate без остановки nginx.
4. Проверить `nginx -t`, атомарно активировать TLS config, reload.
Renew container/host timer выполняет `certbot renew` минимум дважды в сутки; после фактического renewal — `nginx -s reload`. Reload допускается только после `nginx -t`; при ошибке остаётся старый worker/config/cert и срабатывает alert. Контролируются expiry days и последняя успешная попытка. Staging CA используется в rehearsal, чтобы не исчерпать лимиты.
Renew container/host timer выполняет `certbot renew` минимум дважды в сутки;
после фактического renewal проверяет рабочую конфигурацию командой
`docker compose exec -T nginx nginx -t -c /tmp/nginx.conf` и отправляет
master-процессу `docker compose kill -s HUP nginx`. Bare-команды `nginx -t` и
`nginx -s reload` запрещены: контейнер read-only, а рабочие config/PID находятся
в `/tmp`. При ошибке остаётся старый worker/config/cert и срабатывает alert.
Контролируются expiry days и последняя успешная попытка. Staging CA используется
в rehearsal, чтобы не исчерпать лимиты.
## 6. Request ID и forwarded headers
+7 -3
View File
@@ -541,7 +541,8 @@ Legal retention/erasure имеет приоритет; изменение тре
### Решения
- O1: обязательный архитектурный минимум — Collector; удалённый управляемый OTLP backend является предпочтительным operable-вариантом и остаётся TBD до выбора провайдера.
- O1: обязательный архитектурный минимум — Collector; выбран self-hosted SigNoz
на отдельной VM `192.168.0.5`, доступный по приватному OTLP gRPC.
- O2: Prometheus/Grafana/Loki/Tempo — отдельный operable profile, не скрытая обязательная нагрузка основной VM.
- O3: JSON stdout — аварийный локальный buffer; audit App DB — durable.
- O4: telemetry fail-open для business path, но потеря telemetry alertится.
@@ -549,7 +550,8 @@ Legal retention/erasure имеет приоритет; изменение тре
### TBD
- O-TBD1: выбрать remote backend/provider, endpoint/auth и стоимость.
- O-TBD1 закрыт: self-hosted SigNoz, `192.168.0.5:4317`, plaintext только
внутри доверенной приватной сети; UI через SSH jump host.
- O-TBD2: утвердить SLO/RPS/error-budget с product owner.
- O-TBD3: legal retention/erasure и допустимость IP/user-agent.
- O-TBD4: точные sampling и resource limits после load test.
@@ -562,7 +564,9 @@ Legal retention/erasure имеет приоритет; изменение тре
2. `module-05` использует test-only terminal `400` и non-sticky verdict вместо canonical `403`/sticky production verdict. Dashboards обязаны маркировать сервис `stub`; production SLO Safety на нём недостоверен.
3. `module-07` — только DB connectivity stub, тогда как arch-01/02 описывают полноценную CRM sync. Dashboard не должен показывать queue/CRM SLI, которых нет.
4. Retention, RPO/RTO и production SLO открыты в module-01/04/06/08; значения этого документа являются initial ops policy, не закрывают legal/product TBD.
5. Новые observability env (`OTEL_REMOTE_*`, sampling/queue limits) отсутствуют в arch-04; перед реализацией production `.env.example` их нужно добавить туда.
5. Observability env (`OTEL_REMOTE_*`, service names, sampling/queue limits)
добавлены в arch-04 и `.env.example`; sampling/queue limits уточняются после
load test.
## 19. Ссылки на прототип и исходные документы
+13 -4
View File
@@ -544,9 +544,9 @@ docker compose --profile certbot run --rm certbot certonly \
```bash
cd <BACKEND_ROOT>
docker compose exec -T nginx nginx -t
docker compose exec -T nginx nginx -t -c /tmp/nginx.conf
# активировать rendered TLS config атомарно
docker compose exec -T nginx nginx -s reload
docker compose kill -s HUP nginx
```
HSTS пока не включать. Проверить chain/hostname/redirect, затем включить HSTS без preload.
@@ -559,8 +559,8 @@ HSTS пока не включать. Проверить chain/hostname/redirect,
1. взять `flock`, чтобы исключить параллельные запуски;
2. выполнить `docker compose --profile certbot run --rm certbot renew --webroot -w /var/www/certbot --quiet`;
3. при успешном обновлении проверить `docker compose exec -T nginx nginx -t`;
4. только после успешной проверки выполнить `docker compose exec -T nginx nginx -s reload`;
3. при успешном обновлении проверить `docker compose exec -T nginx nginx -t -c /tmp/nginx.conf`;
4. только после успешной проверки выполнить `docker compose kill -s HUP nginx`;
5. записать структурированный результат и метрику времени до истечения;
6. вернуть ненулевой exit code при ошибке, чтобы сработал alert;
7. не удалять действующий сертификат при неуспешном renew.
@@ -761,9 +761,18 @@ docker compose up -d keycloak
docker compose up -d message-safety
docker compose up -d bitrix-local-app bitrix-sync
docker compose up -d nginx
docker compose up -d --wait api-backend keycloak sms-service bitrix-local-app
docker compose exec -T nginx nginx -t -c /tmp/nginx.conf
docker compose kill -s HUP nginx
docker compose ps
```
При повторной раскатке reload после readiness upstream обязателен: nginx
разрешает Docker DNS при загрузке конфигурации и иначе может продолжить
обращаться к старому container IP. Bare-команды `nginx -t` и
`nginx -s reload` не использовать: рабочий config/PID находятся в `/tmp`, а
filesystem контейнера read-only.
После каждого шага ждать health, но проверять readiness отдельно из internal network:
```bash