К содержанию
ActionPulse

Проблемы установки на своих серверах

Короткий вход в диагностику 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 unavailablequery-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: по нему запись находится в журнале без запроса тела запроса.