Проблемы установки на своих серверах
Короткий вход в диагностику on-prem ActionPulse: как за пять минут понять, чей это отказ — установки, конфигурации, сети или интеграции, и что собрать перед обращением в поддержку.
На этой странице
Вы пришли из общего дерева диагностики, и ActionPulse у вас запущен на своих серверах. Эта страница нужна для одного: за пять минут отделить отказ установки от отказа конфигурации, сети или интеграции — чтобы не искать причину в чужом слое. Подробный разбор каждого случая с командами и безопасными исправлениями — в диагностике установки.
Команды выполняются из корня распакованного комплекта, где лежат
docker-compose.onprem.yml, .env и preflight.sh. ${PP_DOMAIN} — домен
установки из вашего .env.
Пять минут на разделение
Шаг 1. Отвечает ли установка снаружи.
curl -sS -w '\n%{http_code}\n' "https://${PP_DOMAIN}/healthz"
{"status":"ok"}и200— край, TLS иquery-apiживы, база отвечает. Идите к шагу 2.503с теломpostgres unavailable—query-apiработает, но не видит PostgreSQL. Это установка.502или503без тела приложения — это ответ края: он не может достучаться до приложения. Тоже установка.- Ошибка TLS или сертификата — это сеть и край.
- Соединение не устанавливается вовсе — это сеть: край не поднят либо закрыты
порты
80и443. Наружу в этом профиле публикует порты только край.
Шаг 2. Что видно изнутри установки.
docker compose -f docker-compose.onprem.yml ps -a
docker compose -f docker-compose.onprem.yml logs --tail 50 ingest-api
query-apiв состоянииrunning (healthy)— у него есть встроенная проверка, которая опрашивает работоспособность внутри контейнера. Значит приложение и база в порядке, и если снаружи ответа нет — это сеть и край.query-apiв состоянииunhealthy— это установка.- Сервис в состоянии
restartingили одноразовая задача, вышедшая не с нулевым кодом, — это установка либо конфигурация; следующий шаг различит. Все одноразовые задачи обязаны быть в состоянииexited (0). - В журнале
ingest-apiстрокаnats disconnectedилиrequired pre-provisioned stream— это установка: очередь.
Точные команды проверки внутри контейнеров и разбор каждого сообщения — в диагностике установки.
Шаг 3. Проходит ли закрытая проверка окружения.
./preflight.sh .env
Проверка называет одну переменную или один файл и причину: слишком короткое
значение, оставленная заглушка, ссылка на образ не в виде tag@sha256, файл
секрета с лишними правами, подключение без учётных данных. Любой её отказ — это
конфигурация, и поднимать compose до исправления бессмысленно. Успешный
проход печатает строку preflight: environment, exact image refs and external secret files passed.
Шаг 4. Проходит ли одно событие и доходит ли до отчёта.
Отправьте тестовое событие так, как описано в отправке событий с бэкенда, и посмотрите на код ответа:
202— приём работает. Если события при этом нет в отчётах, это установка: смотрите перенос событий в аналитическое хранилище.401или403с кодом, начинающимся наcredential_— это интеграция: ключ, origin, разрешённые имена событий. Возвращайтесь в общее дерево диагностики.403с кодомlicense_invalid— это конфигурация установки: лицензия отсутствует, недействительна или истекла.5xx— это установка: недоступны очередь, Redis или база.- Ответа нет вовсе — это сеть.
После четырёх шагов класс отказа определён. Дальше идите по таблице.
Что видно → куда идти
| Что видно | Чей отказ | Куда идти |
|---|---|---|
| Контейнер перезапускается по кругу или сразу выходит | установка | Диагностика установки |
preflight.sh падает с именем переменной или файла |
конфигурация | Конфигурация |
503 с postgres unavailable |
установка | Диагностика установки |
503 с nats disconnected |
установка | Диагностика установки |
В журнале required pre-provisioned stream |
установка | Диагностика установки |
Одноразовая задача миграции вышла с ошибкой, query-api не стартует |
установка | Диагностика установки |
403 с license_invalid на любой записи |
конфигурация | Лицензия |
Предупреждение браузера о сертификате, ошибка TLS в curl |
сеть | TLS и секреты |
Снаружи 443 молчит, изнутри всё отвечает |
сеть | Диагностика установки |
202 есть, событий в отчётах нет |
установка | Диагностика установки |
Отчёты падают, а /healthz отвечает ok |
установка | Диагностика установки |
| Алерт о свободном месте на диске | установка | Мониторинг |
На корневом адресе JSON с not_found вместо кабинета |
конфигурация | Обзор on-prem |
| Отказ появился сразу после смены версии | установка | Обновление |
401 на API кабинета |
интеграция | Коды ответов |
403 с credential_origin_forbidden или credential_event_forbidden |
интеграция | Общее дерево диагностики |
422 на приёме, событие отклонено по полям |
интеграция | Общее дерево диагностики |
| Всё зелёное, но конкретная возможность отсутствует | конфигурация | Обзор on-prem |
Если ни одна строка не подходит, начинайте с проверок работоспособности: они показывают, какая часть установки уже точно в порядке, и тем самым сужают поиск.
Чего в on-prem не бывает
Половина ложных следов берётся из привычек облака. В режиме on-prem этих механизмов физически нет, поэтому и отказов по ним не бывает:
- Биллинга и подписок. Запросы к маршрутам биллинга возвращают
404. Ответов402с кодамиsubscription_requiredиtrial_expiredв on-prem не бывает: за право записи отвечает лицензия, а отказ приходит как403 license_invalid. - Пробного периода. Кабинет не переходит в режим только чтения «по окончании триала». Он переходит туда, когда лицензия истекла: семь дней после срока работает только чтение.
- Лимита приёма по числу событий. Месячный объём в лицензии — метаданные договора, во время работы он ничего не блокирует. Если приём остановился, причина не в этом поле.
- Отдельных маршрутов готовности. Есть только
/healthz, и наquery-apiон опрашивает только PostgreSQL. Недоступное аналитическое хранилище его не окрашивает: отчёты будут падать, а проверка отвечатьok. Это самый частый ложный вывод «сервис здоров, значит дело в интеграции».
Что собрать перед обращением в поддержку
Этого набора достаточно, и в нём нет ни одного секрета:
cat VERSION
docker compose -f docker-compose.onprem.yml ps -a
./preflight.sh .env
docker compose -f docker-compose.onprem.yml logs --tail 200 query-api
docker compose -f docker-compose.onprem.yml logs --tail 200 ch-writer
Что даёт каждая команда:
| Команда | Что из неё нужно |
|---|---|
cat VERSION |
версия и коммит комплекта — без них непонятно, что у вас установлено |
ps -a |
состояние всех сервисов и одноразовых задач, включая вышедшие |
./preflight.sh .env |
строку отказа с именем переменной; значения она не печатает |
logs --tail 200 <сервис> |
причину отказа старта и сообщения о недоступных зависимостях |
Добавьте к этому метрики pp_*: они слушают только внутри контейнера и наружу не
публикуются, а нужны значения отставания записи, ошибок вставки и счётчика
dead-letter. Команда сбора — в диагностике установки.
Добавьте время события в UTC, а если отказ пришёл по HTTP — код ответа и значение
заголовка X-Request-ID: по нему запись находится в журнале без запроса тела
запроса.