====== Runbook: СКУД Политех (PolytechSKUD*) ======
Этот runbook привязан к группе алертов **polytech_skud** в Prometheus.
Цель — за минуту понять «наша проблема или их», и кому звонить.
===== Архитектура интеграции =====
lk.olvery.ru ──► back-nfc (PassService)
──► back-acs (ExternalPassController)
──► ApacsProxyDriver (PHP, retry +5)
──► apacs-proxy (Go, localhost:8099 в контейнере back-acs)
──► СКУД Политех (mTLS, 192.168.200.138:443)
└─ маршрут через IPSec srv-pstu-vpn.tmpm
===== Источники алертов =====
^ Алерт ^ Слой ^ Кто чинит ^
| ''PolytechSKUDIntegrationDown''| end-to-end | смотреть оба ниже |
| ''PolytechApacsProxyDown'' | наш Go-прокси | мы |
| ''PolytechSKUDHostUnreachable''| хост Политеха | Политех + IPSec |
| ''PolytechSKUDHighLatency'' | end-to-end >20с | мы (диагностика) |
===== Когда красное — как локализовать =====
==== 1. Если только PolytechSKUDHostUnreachable ====
Хост СКУД Политех (192.168.200.138:443) не отвечает на TCP-connect с
gw1.olvr через IPSec.
* Проверь алерт ''IpsecTunnelDown'' — если красный, разорван туннель
через ''srv-pstu-vpn.tmpm''.
* Если IPSec зелёный — хост лежит у них. Звонить Политеху, открыть
им встречную задачу.
==== 2. Если только PolytechApacsProxyDown ====
(будет активен после раскатки OLV-3707 на прод)
Наш Go-прокси ''apacs-proxy'' внутри контейнера ''tpark-it.back-acs.latest''
не отдаёт ''/health''.
* ssh srv-prod-app docker exec tpark-it.back-acs.latest curl -sS localhost:8099/health
* Если ответ не ''200 {"status":"ok"}'' — рестарт контейнера:
ssh srv-prod-app docker restart tpark-it.back-acs.latest
* Если рестарт не помог — смотреть логи Go-прокси:
docker logs tpark-it.back-acs.latest 2>&1 | grep -i apacs-proxy
* Частые причины: проблемы с mTLS-сертификатами Политеха, истёкший
клиентский cert, конфиг ''APACS_PROXY_URL'' / провайдера в БД.
==== 3. Если PolytechSKUDIntegrationDown красный, а оба нижних зелёные ====
End-to-end проба ''POST /api/nfc/v1/pass'' отдаёт не-2xx-и-не-400, а
наш Go-прокси и их хост по отдельности живы — значит проблема
**между** back-nfc и back-acs.
* Проверь логи back-nfc (PassService, AcsApiService.post).
* Проверь логи back-acs (ExternalPassService.create) — есть ли вообще
запрос, или back-nfc не дошёл до него?
* Если запрос дошёл и сразу 5xx — лезть в ExternalPassController.
==== 4. Если PolytechSKUDHighLatency, но Down-алертов нет ====
Интеграция работает, но >20с на пробу (baseline 12с, max за 24h
бывает 29с). Это сигнал-разогрев — если регулярно, СКУД у них
тормозит. Длительная высокая latency может стать 504 (apacs-proxy
имеет таймаут на upstream).
* Открыть письмо/чат Политеху — «у нас фиксируется устойчивая
высокая задержка на проверке пропусков, проверьте свою сторону».
* На нашей стороне костыли не нужны — пользователь видит длинную
проверку пропуска, но успех штатный.
===== Полезные команды =====
==== Прямые пробы ====
# Наш apacs-proxy (после раскатки OLV-3707):
curl -sS https://lk.olvery.ru/api/acs/v1/health/apacs-proxy
# TCP до Политеха через IPSec (с gw1.olvr):
ssh root@gw1.olvr curl -sS -m 5 -k -o /dev/null -w "%{http_code} t=%{time_total}s\n" https://192.168.200.138/
# End-to-end (как мониторинг):
curl -sS -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer <см. blackbox_exporter.yml http_post_polytech_skud>" \
-d '{"deviceId":"bebd6444-70e0-4763-9f51-9626e2420e19","locationId":36,"userId":10760,"deviceDescription":"manual"}' \
https://lk.olvery.ru/api/nfc/v1/pass
==== Что куда ====
* **back-acs logs**: ''ssh srv-prod-app docker logs tpark-it.back-acs.latest --tail 200''
* **back-nfc logs**: ''ssh srv-prod-app docker logs tpark-it.back-nfc.latest --tail 200''
* **apacs-proxy внутри контейнера**: ''docker exec tpark-it.back-acs.latest ps aux | grep apacs''
* **Prometheus targets**: https://prom1.olvr или ''ssh gw1.olvr curl localhost:9090/api/v1/targets?state=active''
===== История =====
* **2026-04-21** OLV-3527 — добавлен ''blackbox_polytech_skud'' (1 проба end-to-end), алерты ''PolytechSKUDIntegrationDown'' / ''PolytechSKUDHighLatency''.
* **2026-05-17** Полноценный инцидент 504 на ''POST /pass'' — алерт сработал штатно, но было невозможно различить «наш слой или их хост». Михаил Андреев попросил разделить.
* **2026-05-26** OLV-3707 — добавлены ''blackbox_polytech_host'' (TCP до их хоста) и health-эндпоинт ''/api/acs/v1/health/apacs-proxy'' (после раскатки back-acs включается ''blackbox_apacs_proxy_health''). Алерты ''PolytechSKUDHostUnreachable'' / ''PolytechApacsProxyDown'' (последний пока закомментирован, ждёт раскатки).