March 15

Черное поле в эфире

Инженеры Известий сообщили, что в 04:40 эфир свалился в черное поле. При подключении через Anydesk было установлено, что все мастер шаблоны выключены. Их загрузка помогла решить проблему, но остался вопрос – из-за чего это произошло?

Давайте разбираться:

Установить причину возникновения данной проблемы нам помогут логи, они находятся внутри БД, в папке Logs:

Каждый модуль Кэррота ведёт свои логи в отдельных файлах. Файлы делятся на три типа – sys, user и log

Sys – системные логи, здесь логируется информация о том, что происходит в системе в целом.

User – пользовательские логи. Здесь хранится информация о действиях пользователя.

Log – системные логи в формате xml, мы постепенно от них уходим. Здесь хранится всё тоже самое, что и в файле sys

В названии файла так же содержится дата и время начала логирования, новый файл создаётся при перезапуске приложения.

Если проблема возникла с выдачей графики, то в первую очередь нужно смотреть логи движка. В тракте Известий движок находится на отдельной машине, соответственно, сначала нам потребуются логи именно с неё.

Открываем папку Logs и ищем файлы движка, которые подходят нам по времени (мы знаем, что инцидент произошел в 04:40):

Видим два файла, которые были изменены 14.04 в 5:47, а начали логироваться 11.03 в 00:24. Наше время находится именно в этом промежутке.

Вы спросите – почему файла два? Потому что в тракте Известий на одной машине запускаются сразу два движка. Мы не знаем в каком именно возникла проблема, так что будем смотреть оба.

Откроем первый файл и найдём наше время:

Ничего подозрительного в этом промежутке не видно, поэтому переходим ко второму файлу:

Во втором файле в 04:40 тоже всё чисто, но есть событие в 04:27. Учитывая, что других вариантов нет – делаем вывод, что это оно.

Проблемное место мы нашли, теперь давайте посмотрим, что тут есть:

«Instance_OnSetTemplateStateWithDelay» говорит нам о том, что событие было запущено по команде от Скайларка. Если бы ивент был запущен через наш плейлист, тут было бы написано «SetTemplateState»

Здесь мы видим название ивента. Проблемный ивент называется OUT

А тут видим название шаблона, к которому он относится и его стейт. В нашем случае шаблон – Iz_Poly_SL, стейт – OUT

Мы знаем, что «Iz_Poly_SL» это мастер шаблон, отвечающий за стейт-логику. Если его отключить – движок покажет черное поле. Так что теперь мы знаем, что проблема возникла из-за того, что Скайларк прислал команду на выключение шаблона Iz_Poly_SL.

Возникает новый вопрос: такого ивента существовать не должно, откуда он тогда появился?

Разобраться в этом нам помогут логи серверной машины. К сожалению, мы не знаем время создания файла, поэтому воспользуемся поиском и будем перебирать файлы:

Нам нужны пользовательские логи с сервера, поэтому введем в поиске «server_user» и начнем перебирать файлы.

Нам нужно найти информацию о том, когда и кем был создан данный ивент. Для этого нам потребуется ExternalID шаблона, его можно найти в Веб-плейлисте:

Откроем первый файл, нажмём CTR+F и введём в поиск ExtID шаблона:

В первом файле ничего нет, переходим к следующему:

Вот и оно! Ивент был создан через Generate Events, теперь осталось узнать кем и когда:

10.03 23:52, пользователь Administrator

Вывод

10 марта, в 23:52 пользователь «Administrator» создал ивент «OUT», который отвечает за выключение мастер-шаблона «Iz_Poly_SL». Спустя четыре дня, оператор Скайларка по ошибке включил в его в очередь для автоматического воспроизведения. В 04:29 14 марта ивент отработал и выключил мастер-шаблон. Именно это и привело к появлению черного поля.

Соответственно, наша система отработала корректно – ошибка была вызвана человеческим фактором.