Эксплуатация¶
Страница для тех, кто отвечает за работу сервера. Сначала куда смотреть, когда что-то не так, затем таблица «симптом, причина, действие», затем резервные копии, пределы нагрузки и смена секретов.
Куда смотреть¶
- Плашка «Требует внимания» в углу страницы владельца. Молчит, пока всё в порядке. Показывает по одному: «Расшифровка недоступна», «Не удалась проверка новых звонков», «Осталось шагов настройки: N», «Автоматический режим выключен». Нажатие ведёт в «Система» или «Автоматика».
- «Настройки → Система», карточка «Состояние»: «Расшифровка работает» или «Сервис расшифровки не отвечает», счётчики «В очереди», «В обработке», «С ошибкой» и ссылки «Очередь и ошибки» и «Нагрузка по дням».
- Страница очереди (ссылка «Очередь и ошибки», адрес
/queue): «В очереди», «В обработке», «Готово сегодня», «С ошибкой», «Самое долгое ожидание», что расшифровывается сейчас с прогрессом и скоростью, список ошибок и карточки семи фоновых очередей («Фоновые очереди»). В здоровой системе ожидание падает, а задания с ошибкой не застревают. GET /readyzна домене API: поляdatabase,redisиasrпоказывают, какая зависимость не отвечает.- Журналы сервисов в Coolify (вкладка Logs у
tgt-api,tgt-asr,tgt-migrate,tgt-dashboard). - «Настройки → Люди → Показать журнал действий»: кто и когда менял настройки, права, правила.
Фоновых очередей семь: «Расшифровка», «Звонки Битрикс24», «Выгрузка Битрикс24», «Чтение CRM», «Проверка звонков», «Колбэки» и «Обслуживание». «Обслуживание» срабатывает каждые 15 секунд: возвращает в очередь забытые записи, запускает забор и проверку новых звонков по расписанию, возобновляет прерванные выгрузки и чтения CRM, строит недельные отчёты, догоняет проверки звонков. Пока оно стоит, ничего не теряется: следующий проход догонит.
Типичные сбои¶
| Симптом | Причина | Что делать |
|---|---|---|
Плашка «Расшифровка недоступна», в /readyz asr равно down |
tgt-asr запускается (после развёртывания загрузка языковой модели занимает несколько минут, при первом запуске скачивание ещё дольше), остановился или упёрся в лимит памяти |
Откройте журнал tgt-asr: Downloading kenlm.bin значит скачивание, T-one loaded значит готов. Дождитесь готовности. Проверьте ASR_MEMORY_LIMIT и свободное место |
| После простоя распознавателя записи в статусе «Ошибка» | Платформа пробует расшифровать запись пять раз с паузами 30 секунд, 1, 2 и 4 минуты (около 8 минут в сумме), после чего запись получает ошибку | После восстановления нажмите «Повторить все с ошибкой» на странице очереди |
| Записи долго «В очереди», а «В обработке» 0 | Очередь «Расшифровка» приостановлена (карточка «Приостановлена», уведомление «Обработка приостановлена»), либо остановлен процесс очередей (API_RUN_MODE=api), либо не отвечает распознаватель |
Нажмите «Возобновить» в карточке очереди; проверьте API_RUN_MODE и плашку «Расшифровка недоступна» |
| Запись с ошибкой «Файла записи уже нет в хранилище, повтор не поможет» | Файла нет в хранилище или хранилище не ответило в момент расшифровки: любой отказ при чтении файла получает этот код | Проверьте бакет, ключи и STORAGE_KIND. Если хранилище живо, нажмите «Повторить» на странице каждой записи: общая кнопка такие записи пропускает |
| «Формат не поддерживается или файл повреждён, повтор не поможет» | Файл не аудио или испорчен | Проверьте источник файла; ошибка возникает сразу |
| «Запись длиннее, чем принимает сервис, повтор не поможет» | Запись длиннее трёх часов | Разрежьте запись во внешней системе |
Не отвечает Redis (redis равно down) или данные Redis потеряны |
Неверный REDIS_URL, сеть, Redis остановлен или очищен |
Исправьте подключение. После потери данных перезапустите tgt-api: при старте он заново регистрирует расписание «Обслуживания», и забытые записи вернутся в очередь сами |
database равно down, панель отвечает ошибками |
PostgreSQL остановлен или недоступен по сети | Проверьте ресурс PostgreSQL в Coolify, затем журнал tgt-api |
| S3 недоступен | Провайдер, ключи, DNS или сеть | Загрузка файлов отвечает ошибкой, воспроизведение не работает, расшифровка получает ошибку «Файла записи уже нет...» (см. выше), забор показывает «Ошибка забора» с сообщением. Исправьте доступ и повторите записи по одной |
| Битрикс24 не отвечает | Портал, вебхук или сеть | См. таблицу в Подключение Битрикс24. Уже сохранённое продолжает работать |
| Чтение CRM завершилось ошибкой | Портал не отвечал дольше нескольких попыток. При включённом ночном обновлении платформа запускает чтение снова, пока портал не ответит | В «Настройки → Автоматика → Дополнительно → Данные из CRM» посмотрите «Последнее чтение», затем «Обновить сейчас». Новое чтение берёт только то, что появилось после последних завершённых шагов |
| «Последний расчёт не удался» на странице «Связь с продажами» | Расчёт связи завершился ошибкой; причина названа в журнале tgt-api |
Нажмите «Пересчитать» (руководитель или владелец). Расчёт запускается и сам примерно раз в сутки |
| Проверка звонков не идёт | На странице «Проверка звонков» стоит причина: нулевой дневной бюджет, не включён отдел, модель недоступна, закончились деньги, неверный ключ | Исправьте названную причину. Остановки модели снимаются сами: 15 минут при нулевом балансе, 30 при неверном ключе, 2 при ограничении частоты, 5 при пяти недоступностях подряд |
| «Сервер API недоступен», «Нет связи с сервером» | Идёт развёртывание или tgt-api перезапускается |
Подождите; проверьте /healthz и журнал tgt-api |
| Вход отвечает 429 | Больше 10 неудачных входов за 5 минут с одного адреса | Подождите время из заголовка Retry-After. Счётчик хранится в памяти tgt-api, перезапуск его обнуляет |
no space left on device |
Диск заполнен | См. Развёртывание: очистка Docker. Не включайте Delete Unused Volumes |
Внимание
Если распознаватель не работает дольше восьми минут, записи из очереди переходят в «Ошибка» (пять попыток). На странице очереди подсказка «Записи останутся в очереди» этого не учитывает: не ждите, а нажмите «Повторить все с ошибкой», когда распознаватель вернётся.
Повтор и отмена из интерфейса¶
| Что | Где | Действие |
|---|---|---|
| Одна запись | карточка звонка | «Повторить» (для «Ошибка» и «Отменено»), «Отменить обработку» (для «В очереди» и «Обработка»), «Удалить» (только владелец) |
| Все записи с ошибкой | страница очереди | «Повторить все с ошибкой». Записи, которым повтор не поможет, пропускаются, и рядом написано, сколько их |
| Задание фоновой очереди | «Фоновые очереди» → «Открыть» → вкладка «Ошибки» | «Повторить», «Удалить», «Повторить все с ошибкой» (для «Звонки Битрикс24», «Выгрузка Битрикс24», «Чтение CRM», «Проверка звонков», «Колбэки») |
| Очередь целиком | карточка очереди | «Приостановить» и «Возобновить» (кроме «Обслуживание»); идущие задания завершаются, новые ждут |
| Загрузка из Битрикс24 | «Что загружали» | «Отменить»: уже поставленные записи остаются и будут расшифрованы |
| Чтение CRM | карточка «Данные из CRM» | «Остановить»: прочитанное остаётся, остальное дочитается в следующий раз |
Задания очереди «Расшифровка» по одному не правятся: ими управляют сами записи.
Резервные копии¶
| Что | Копировать | Почему |
|---|---|---|
| PostgreSQL | да, по расписанию Coolify | Единственное хранилище, которое нельзя собрать заново: записи, расшифровки, люди и права, правила проверки и словари, разметка звонков руководителями, журнал |
| Звук | да: бакет (включите версионирование) или том audio-data |
Звук не восстановить из базы |
| Копия CRM, результаты проверок, расчёты связи, недельные отчёты | нет отдельно | Их можно получить заново из портала и расшифровок; перепроверка моделью тратит токены дневного бюджета |
| Redis | нет | Хранит только работу в процессе и историю монитора очередей |
Модели (asr-models) |
нет | Скачиваются заново |
Один раз восстановите свежую копию в пробную базу, чтобы знать, что она работает и сколько это занимает. После восстановления tgt-migrate приводит схему к версии работающего релиза.
Если потерян Redis, платформа сама заново поставит в очередь записи из базы. Но события Битрикс24, которые ещё ждали загрузки, и доставки колбэков, которые ещё ждали отправки, теряются: при включённом автоматическом режиме звонки найдёт следующая проверка новых звонков, а результат записи интеграция может забрать запросом GET /v1/recordings/{id}.
Пределы и нагрузка¶
| Что | Предел |
|---|---|
| Размер загружаемого файла | MAX_UPLOAD_MB, по умолчанию 512 МБ |
| Длина записи для распознавания | 3 часа |
| Тело JSON-запроса | 1 МБ |
| Загрузка через панель | должна уложиться в 5 минут (таймаут запроса Node.js); большие и медленные передачи отправляйте прямо на домен API ключом |
| Очередь расшифровки | прямая загрузка файлов по числу не ограничена; источники (забор, автоматическая проверка, загрузка истории) не берут больше, чем «Максимум в очереди» (по умолчанию 50) |
| Автоматическая проверка новых звонков | не берёт больше, чем помещается в очередь, и не больше 50 000 записей за раз |
| Запросы к порталу | не чаще двух в секунду, паузы заложены в платформу |
| Ограничение частоты запросов к API | нет, кроме ограничения неудачных входов |
| Одновременных расшифровок | TRANSCRIPTION_CONCURRENCY, по умолчанию 2 |
Для планирования: по оценке разработчиков около 8000 звонков в месяц это около 160 часов звука, которые распознаватель обрабатывает меньше чем за час в сутки.
Смена секретов¶
Сначала замените переменную в Coolify и разверните заново, потом отзовите старое значение там, где оно выдано.
| Секрет | Что происходит | Затем |
|---|---|---|
SESSION_SECRET |
все выходят из системы | ничего |
ASR_API_KEY |
одна переменная питает распознаватель и API, они перезапускаются вместе | ничего |
| Ключ API | создайте новый и отдайте интеграции | отзовите старый в «Настройки → Система → API-ключи» |
BITRIX24_WEBHOOK_URL, BITRIX24_WRITE_WEBHOOK_URL |
выпустите новый вебхук с теми же правами | удалите старый в портале |
BITRIX24_EVENT_TOKEN |
события исходящего вебхука отклоняются, пока токены не совпадут | поменяйте токен в портале и здесь одновременно |
S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY |
сначала создайте второй ключ | удалите старый у провайдера |
CALLBACK_SIGNING_SECRET |
получатель должен проверять новым значением; доставки между сменами не пройдут проверку и повторятся | поменяйте у получателей в тот же момент |
ANALYSIS_API_KEY |
проверки моделью падают, пока ключ не верен | отзовите старый |
Пароль в DATABASE_URL или REDIS_URL |
API и очереди не подключатся, пока не обновлён адрес | смените пароль в ресурсе и адрес в переменной сразу |
См. также¶
- Развёртывание: проверки состояния, обновление, очистка диска.
- Хранилище и модели: S3, забор записей, память распознавателя.
- Подключение Битрикс24: что происходит при недоступном портале.
- Персональные данные и хранение: как остановить отправку текстов модели.