Короткий ответ: мониторинг бота строится не вокруг сервера, а вокруг результата. Главный вопрос не «работает ли процесс», а «ушли ли ответы покупателям за последний час». Бот может быть запущен, отвечать двухсотым кодом на проверки и при этом молчать в чатах — и снаружи это будет выглядеть как пропавший продавец.
Это самый дорогой вид поломки. Покупатель не пишет в поддержку и не жалуется, он просто уходит к следующему объявлению. Вы узнаёте о простое не по алерту, а по пустому дню в статистике — через сутки, когда деньги уже потеряны. Ниже — что писать в логи, какие метрики смотреть и как настроить оповещения, чтобы узнавать о поломке первым.
Почему проверки «жив ли сервер» недостаточно
Классическая проверка доступности отвечает на вопрос, отзывается ли ваш адрес. У бота на чатах есть минимум пять способов сломаться, не задев эту проверку:
- истёк или отозван токен доступа — площадка перестала принимать запросы;
- провайдер модели вернул ошибку или упёрся в лимит — ответ не сгенерирован;
- изменился формат уведомлений — вебхуки приходят, но не разбираются;
- очередь встала — сообщения приняты и лежат необработанными;
- бот отвечает, но чепухой — формально всё зелёное, фактически хуже, чем молчание.
Отсюда правило: следить надо за исходом, а не за инфраструктурой.
Четыре метрики, которых достаточно
Не стройте панель на сорок графиков. Для чат-бота хватает четырёх чисел.
1. Ответы за последний час. Сколько сообщений бот реально отправил покупателям. Ноль в рабочее время — авария.
2. Время до первого ответа. Медиана и худшие десять процентов. Средняя врёт: один зависший диалог теряется в среднем, но не в перцентиле. Почему это ключевой показатель, разобрано в материале как отвечать на Авито быстро.
3. Доля ошибок. Отдельно по площадке и отдельно по модели — это разные причины и разные действия.
4. Доля эскалаций. Сколько диалогов ушло человеку. Резкий рост означает, что бот перестал понимать входящие; резкое падение до нуля — что он перестал звать на помощь и, скорее всего, отвечает наугад.
Что писать в логи
Лог нужен не для красоты, а чтобы через неделю разобрать конкретную жалобу: «покупателю ответили не то». Значит, по каждому событию должно быть видно:
время, идентификатор диалога и объявления что пришло: тип события, длина сообщения какое решение принято: ответить / промолчать / эскалировать какой моделью, сколько заняло, был ли повтор после ошибки что отправлено: текст ответа
Три правила:
- Один идентификатор через всю цепочку. Иначе связать входящее сообщение с исходящим ответом в общем потоке невозможно.
- Структурированный формат. Строки вида «всё ок» бесполезны, по ним нельзя посчитать.
- Никаких секретов. Токены и ключи в логах — это утечка, а не отладка. Персональные данные покупателей храните по минимуму и с понятным сроком.
Оповещения: три уровня
Смысл оповещений — разбудить вас ровно тогда, когда это оправдано, и молчать в остальное время. Алерт, который срабатывает каждый день, перестают читать через неделю.
Красный — будить. Ноль ответов за час в рабочее время. Ошибки авторизации. Сервис недоступен снаружи. Такое уходит в мессенджер на телефон, немедленно.
Жёлтый — посмотреть сегодня. Доля ошибок выше обычной, время ответа выросло вдвое, очередь растёт. Достаточно сводки раз в несколько часов.
Зелёный — почитать в понедельник. Недельная сводка: сколько диалогов, сколько эскалаций, какие вопросы бот не понял. Это не про аварии, а про доработку промптов.
Отдельно стоит настроить «сторожа тишины»: если за N минут не было ни одного входящего события, хотя обычно они есть, — сообщить. Молчание входящих часто означает поломку на стороне подписки на уведомления.
Проверка живым сообщением
Самая надёжная проверка — синтетическая. Раз в час бот получает искусственное событие и должен пройти весь путь: разобрать, обратиться к модели, сформировать ответ (в тестовом режиме — не отправляя его покупателю) и записать результат.
Это единственный способ поймать поломки середины цепочки: истёкший ключ, изменившийся формат, зависший провайдер. Проверки отдельных компонентов такое пропускают.
Всё описанное — контур, который в готовых сервисах уже собран: у бота, который отвечает вашими словами, дежурство и оповещения о сбоях входят в подписку, и настраивать их отдельно не нужно.
Что делать при аварии
План стоит написать заранее, а не сочинять ночью:
- Понять, молчит бот или врёт. Первое — техническая авария, второе — проблема промпта.
- Включить запасной режим. Простое честное сообщение с обещанием ответить в ближайшее время лучше пустоты. Тон подскажут ваши шаблоны ответов.
- Уведомить того, кто отвечает руками. На время аварии первая линия — человек.
- Разобрать причину по логам, а не по памяти.
- Добавить проверку, которая поймала бы это раньше. Каждая авария должна оставлять после себя новый датчик.
Стоимость простоя считается просто: число обращений в день, умноженное на стоимость клиента. Обычно это быстро объясняет, почему час на настройку оповещений окупается.
Когда всё это избыточно
Мониторинг тоже стоит времени, и в части случаев он не нужен.
Бот на тестовом контуре. Пока живых диалогов нет, хватает чтения логов вручную.
Единичные обращения. При паре сообщений в неделю проще смотреть в чаты глазами: вы заметите тишину раньше любого алерта.
Вы всё равно не сможете починить. Оповещение в три часа ночи без возможности что-то сделать даёт только испорченный сон. Тогда честнее сузить обещание: бот работает днём, ночью отвечает человек утром.
Бот отвечает не покупателям. Для внутренних задач нет цены простоя, и требования к оповещениям другие.
Коротко
Мониторинг бота начинается с одного числа — сколько ответов ушло покупателям за последний час. Дальше добавляются время до ответа, доля ошибок и доля эскалаций. Логи пишутся структурно, с одним идентификатором через всю цепочку и без секретов. Оповещения делятся на три уровня, и будить должен только красный. Синтетическая проверка раз в час ловит то, что не ловят остальные.
Настроить этот контур несложно, но поддерживать его придётся столько же, сколько живёт бот. Если проще, чтобы за ответами и их доставкой следил кто-то другой, — «Папа БУ» отвечает покупателям за минуту, показывает исходы диалогов и передаёт готовых человеку. Три дня бесплатно.
Если решение под свой бизнес нужно, а разбираться самому некогда — напишите мне в Telegram: @artem_sergeevic. Я делаю такие сервисы на заказ: обсудим задачу и честно разберём, что в ней действительно нужно, а что можно не делать вовсе.