Оповещения (алертер)¶
Алертер — встроенная служба оповещений. Она следит за состоянием потоков, оборудования узла, приёма DVB и записи DVR и поднимает алерты (инциденты), когда что-то выходит за заданные пределы. Список активных алертов виден в админке; в сети с включённым разносом по домену на каждом узле виден сводный набор алертов всего домена.
Алертер работает и на одиночном узле — Meshwork нужен только для разноса алертов по домену.
Как устроен алерт¶
У каждого инцидента есть устойчивый идентификатор: повторное появление той же проблемы — это тот же инцидент, а не новый.
Инцидент проходит состояния: поднят (впервые замечен), обновлён (замечен снова с существенным изменением), снят (проблема ушла). Активный набор — это инциденты, которые ещё не сняты.
У каждого алерта есть уровень серьёзности (по нарастающей: информация, предупреждение, ошибка, критический, требует действий администратора), код (числовой вид инцидента — см. каталог ниже), источник (поток, узел, хранилище), узел-источник (кто поднял алерт) и человекочитаемое имя объекта.
Уровень серьёзности за инцидентом не закреплён навсегда. Пока инцидент открыт, служба переоценивает его вместе с остальными проверками (примерно раз в 5 секунд) и при изменении переводит инцидент в состояние «обновлён» — с тем же идентификатором, поэтому вторая строка в списке не появляется, а список пересортировывается. Внешним адресатам такое изменение не отправляется: переоценка не должна превращаться в письмо или сообщение в чат.
Большинство алертов уровневые: служба периодически переоценивает условие и сама поднимает или снимает алерт. Часть алертов, требующих действий администратора, липкие — они не снимаются сами, пока причина не устранена (их снимают вручную, см. Просмотр и снятие алертов).
Список активных алертов хранится в памяти и очищается при перезапуске сервиса.
Управление на уровне потока. У каждого потока есть выключатель, полностью заглушающий его алерты (вместе с алертами его входов и выходов), и задержка алерта: источник, восстановившийся в течение заданного времени, алерт не поднимает — это сглаживает кратковременные мерцания. Той же задержкой гасится и короткий отказ основного входа: если поток успел уйти на резерв раньше, чем она истекла, алерта об ошибке входа не будет вовсе — о переключении сообщит оповещение о работе на резерве (код 27), отложенное той же задержкой. Порог отсутствия данных у потока считается отдельно и задержкой не сдерживается, поэтому сработать он может и раньше.
Настройки алертера¶
Настройки находятся в разделе оповещений и требуют роли администратора. Точные поля описаны в разделе Веб-интерфейс; ниже — что можно настроить.
Главный выключатель службы оповещений (по умолчанию включена). Выключенный алертер молчит целиком: узел не поднимает собственных алертов и ничего не отправляет во внешние назначения — ни своих алертов, ни разнесённых по домену с соседних узлов.
Разнос по домену (по умолчанию включён): узел делится своими алертами с узлами того же домена и принимает их — на каждом узле виден сводный набор. Действует только при заданном домене.
Разнос системных алертов (по умолчанию выключен): алерты об оборудовании узла (CPU и память хоста, процесса стримера и транскодеров, загрузка сети и GPU, рабочие потоки и фронтенд DVB — коды 16–23 и 40–45) по умолчанию локальны; включите, чтобы они тоже разносились по домену. Алерты хранилищ (коды 24–25) остаются локальными всегда.
Пороги потоков: таймаут отсутствия данных (по умолчанию 15 с), минимально допустимый битрейт (по умолчанию проверка выключена), порог ошибок счётчика непрерывности за окно 10 с (уровни предупреждения и ошибки).
Пороги ресурсов узла — пары «предупреждение / ошибка» в процентах для CPU и памяти хоста, процесса стримера и транскодеров, загрузки сетевого интерфейса и GPU, а также заполнения хранилища DVR. Пороги хоста заданы выше, чем у процесса стримера и транскодеров, чтобы отдельный компонент предупреждал раньше, чем насытится вся машина. Значение 0 отключает соответствующий уровень.
Пороги DVB-фронтенда — уровень сигнала, SNR/качество, частота битовых ошибок и неисправленные блоки; применяются к адаптеру с захватом сигнала.
Пороги записи DVR — число неудачных записей подряд, множитель застопоривания записи, доля непокрытия архива и время чтения/записи чанков на диск.
Каталог кодов алертов¶
Код — числовой вид инцидента, удобный для группировки и локализации. В колонке «Разнос» указано, разносится ли алерт по домену (при включённом разносе) или остаётся локальным для узла.
Потоки: состояние и рабочий цикл (источник — поток)
Код |
Событие |
Разнос |
|---|---|---|
1 |
вход или выход перешёл в состояние ошибки |
по домену |
2 |
неустранимая ошибка рабочего цикла, нужен ручной сброс (требует действий администратора) |
по домену |
3 |
запущенный поток не отдаёт данные дольше таймаута |
по домену |
4 |
битрейт потока держится ниже минимального |
по домену |
13 |
поток поставлен на паузу: не осталось пригодного входа (требует действий администратора) |
по домену |
14 |
вход или выход самоприпарковался и не восстанавливается повтором (требует действий администратора) |
по домену |
27 |
поток работает на резервном входе — произошло переключение |
по домену |
39 |
высокая загрузка CPU рабочим потоком потока |
по домену |
58 |
скачок PCR источника за окно разрыва порвал выдачу — накопленное отброшено |
по домену |
59 |
выдача пересинхронизирована по реальному времени: подача не выдерживает заданной задержки |
по домену |
60 |
у запущенного потока не осталось подающего входа |
по домену |
61 |
скачок PCR источника за окно разрыва обошёлся без потерь |
по домену |
Уровень алерта кода 1 определяют последствия отказа, а не сам факт ошибки. Отказавший выход — всегда «критический»: за ним нет резерва, это потерянная доставка. Отказавший вход критичен, только если поток идёт именно через него или активного входа ещё нет; отказ входа, которым поток сейчас не пользуется, — это потеря резерва, и такому алерту назначается уровень «ошибка». Так сводная важность потока сходится с его состоянием: неисправный резерв не красит исправный поток в критический. А если переключаться больше не на что и поток встал, инцидент по входу, который ещё пытается подняться, читается как «критический» — резерва за ним уже нет. С переключением на резерв инцидент по оставленному входу снимается вовсе: вход останавливается, а причина, по которой поток с него ушёл, остаётся видна в интерфейсе как история (Резервирование источников).
Код 60 описывает поток целиком, а не отдельную точку: он держится, пока у запущенного потока ни один вход не приносит данных, и переживает любое число переключений на резерв — в отличие от кода 1, который всегда привязан к конкретному входу или выходу и потому на потоке с резервированием распадается на несколько недолговечных инцидентов. Условие должно продержаться пятнадцать секунд, поэтому запуск узла и применение настроек, где входы на мгновение не отдают данных, кода 60 не поднимают. Поток, остановленный администратором или поставленный на паузу, под него не подпадает — это состояние описывают коды 13 и 14.
Коды 58, 59 и 61 — рекомендация по настройке синхронизации входа, а не отчёт о разовом сбое: узел считает такие события в скользящем окне длиной час и поднимает инцидент, когда их становится больше порога. Разделены они по цене для получателя. Код 58 — скачок PCR источника, стоивший содержимого: буфер синхронизации отброшен, выдача порвана; в сообщении указано, сколько накопленного потока отброшено последним таким случаем. Код 61 — тот же разрыв таймлайна источника, проведённый без потерь. Код 59 не про источник вовсе: буфер синхронизации опустошался, то есть подача не выдерживает заданной задержки — лечится увеличением буфера (Синхронизация), а у входа транскодера ещё и сглаживанием битрейта на родительском потоке. Все три липкие: переподключение входа их не снимает. Инцидент снимается сам, когда меняют любую из настроек синхронизации входа или потока — изменённая настройка оценивается заново, — либо после шести часов без единого события. Остановленный поток инцидент сохраняет: рекомендация остаётся в силе.
Соответствие транспортного потока (анализатор TR 101 290) (источник — поток; все разносятся по домену)
Код |
Событие |
|---|---|
5 |
повторяющиеся разрывы PCR (TR 101 290, 2.3) |
6 |
интервал повторения PCR более 40 мс (2.3a) |
7 |
интервал повторения PAT более 500 мс (1.3) |
8 |
интервал повторения PMT более 500 мс (1.5) |
9 |
интервал повторения PTS более 700 мс (2.5) |
10 |
точность PCR хуже 500 нс (2.4) |
11 |
пере- или недополнение буфера T-STD по видео (3.3) |
12 |
дрейф PCR более 30 ppm (историческое: оповещение больше не поднимается, дрейф отображается как метрика — Постоянные измерения) |
15 |
ошибки счётчика непрерывности выше порога за короткое окно (1.4) |
46 |
ошибка CRC таблиц PSI (2.2) |
47 |
установлен признак transport_error_indicator (2.1) |
48 |
превышен интервал повторения SI-таблицы (SDT / EIT / TDT / NIT) |
49 |
сводный вердикт: поток не соответствует TR 101 290 |
Часть кодов анализатора появляется только при включённых опциях анализа (глубокий анализ, анализ PTS-разрывов, анализ буфера T-STD) и применима лишь к потокам с постоянным битрейтом; сводный вердикт (49) выносится только для уверенно постоянного битрейта. Подробнее — в разделе Анализатор.
Ресурсы и оборудование узла (источник — система)
Код |
Событие |
|---|---|
16 |
загрузка CPU хоста выше порога |
17 |
использование памяти хоста выше порога |
18 |
CPU процесса стримера выше порога |
19 |
память процесса стримера выше порога |
20 |
суммарный CPU транскодеров выше порога |
21 |
суммарная память транскодеров выше порога |
22 |
загрузка сетевого интерфейса выше порога (на каждый интерфейс) |
23 |
загрузка GPU выше порога (на каждое устройство) |
24 |
заполнение хранилища DVR выше порога (на каждое хранилище) |
25 |
файловая система хранилища DVR недоступна (требует действий администратора) |
40 |
высокая загрузка CPU рабочим потоком DVB-адаптера |
41 |
DVB-фронтенд потерял сигнал (lock) |
42 |
уровень сигнала DVB ниже порога |
43 |
SNR/качество сигнала DVB ниже порога |
44 |
частота битовых ошибок (BER) DVB выше порога |
45 |
неисправленные блоки DVB выше порога |
Все алерты этой группы по умолчанию локальны. Коды 16–23 и 40–45 можно разнести по домену переключателем разноса системных алертов; коды 24–25 остаются локальными всегда. Пороговые алерты DVB-фронтенда (42–45) оцениваются только на адаптере с захватом сигнала; код 41 поднимается при потере захвата (lock). BER (44) по умолчанию выключен, так как сырая шкала зависит от приёмника (см. DVB-приёмник).
Meshwork и жизненный цикл (источник — сеть/система; локально)
Код |
Событие |
|---|---|
26 |
узел сети замолчал — перестал подтверждать связь |
28 |
процесс стримера завершил запуск (кратковременное уведомление) |
37 |
в одном домене два узла с одинаковым именем (требует действий администратора) |
Алерт кода 26 держится всё время, пока узел числится недоступным, — до недели (Карта сети). Снимается он сам, когда узел возвращается на связь, и уходит вместе со строкой узла, если недоступный узел забыли вручную.
Здоровье записи DVR (источник — поток; локально)
Код |
Событие |
|---|---|
29 |
записи сегментов или индекса DVR не проходят — архив не пишется |
30 |
запись DVR застопорилась: есть вход, но новый сегмент долго не сохраняется |
31 |
архив DVR деградировал — пропуски в недавнем покрытии |
32 |
индекс архива DVR повреждён (требует действий администратора) |
50 |
высокое время чтения/записи чанков DVR на диск |
Конфигурация, транскодеры, OTT, сертификаты и лицензия (источник — система/поток)
Код |
Событие |
Разнос |
|---|---|---|
33 |
основная конфигурация не загрузилась при старте, сервис поднялся на запасной (требует действий администратора) |
по домену |
34 |
в режиме low-latency HLS/DASH отброшены звуковые дорожки в неподдерживаемом кодеке (поддерживаются AAC и AC-3) |
по домену |
35 |
не удалось выпустить или продлить HTTPS-сертификат через встроенный клиент ACME |
по домену |
36 |
настроенный транскодер не загрузился при старте — нет исполняемого файла или устройства (требует действий администратора) |
по домену |
38 |
поток требует транскодер (программный, NVIDIA или Intel VPL), недоступный на этом узле (требует действий администратора) |
локально |
55 |
истекает срок действия лицензии узла: предупреждение за две недели до конца, после его наступления — требует действий администратора, и узел перезапускает службу |
по домену |
56 |
лицензия узла признана неподлинной (требует действий администратора): узел перезапускает службу, и запуск отклоняется — служба остаётся остановленной, пока на узле не окажется подлинная лицензия и её не запустят заново |
по домену |
57 |
лицензия узла подлинна, но принадлежит поколению, которое эта версия больше не принимает (требует действий администратора): срок не истёк и подделки нет — поколение 2 принимается только как временная пробная лицензия, поэтому бессрочная того поколения отклоняется сразу |
по домену |
Дескремблирование: модуль условного доступа (CI/CAM, EN 50221) и BISS (источник — система; локально)
Код |
Событие |
|---|---|
51 |
модуль CAM извлечён (требует действий администратора) |
52 |
нет подписки: модуль сообщает, что программа не оплачена |
53 |
ошибка CI/CA — неустранимая ошибка канала или условного доступа |
54 |
дескремблирование не удаётся: программа с заданным ключом BISS или назначенная CAM остаётся скремблированной |
Просмотр и снятие алертов¶
В админке есть раздел оповещений со списком алертов. Его можно фильтровать по набору (только активные / только снятые / все), по уровню серьёзности, по типу и идентификатору источника, по коду, по домену и по времени, а также искать по тексту сообщения. По умолчанию показаны и активные, и недавно снятые записи (журнал переходов), поэтому общее число строк может превышать число активных инцидентов — для текущего активного набора выбирайте режим «только активные».
Состояние не обязательно опрашивать вручную: админка получает изменения активного набора в реальном времени и обновляет список сама, как только алерт поднимается, обновляется или снимается.
Уровневые алерты снимаются автоматически, когда условие уходит. Липкие алерты, требующие действий администратора (например, ошибка загрузки конфигурации, недоступность хранилища, жёсткая ошибка рабочего цикла), сами не снимаются: после устранения причины такой инцидент снимают (подтверждают) вручную. Снятие действует на том узле, который поднял алерт: если в сети вы видите чужой (разнесённый по домену) инцидент, снимать его нужно на узле-источнике (он указан в строке). Если источник замолчал, соседи примерно через сорок пять секунд после последнего его сообщения убирают его строки из своего сводного списка. Это не снятие инцидента, а удаление копии: у самого источника инцидент остаётся, и, когда узел снова выйдет на связь, не снятые у него строки вернутся в список. Так со сводного списка уходит и алерт об истёкшей лицензии остановившегося узла — снять его на источнике невозможно, потому что служба там не работает.
Инцидент, который раз за разом поднимается и снимается, узел перестаёт гасить сразу. После трёх завершённых циклов «подъём — снятие», разошедшихся не больше чем на десять минут, снятия удерживаются: строка остаётся в активном наборе, а одно настоящее снятие уходит только после того, как условие продержится снятым не меньше длины самой серии — по умолчанию те же десять минут. Повторный подъём отсчёт отменяет, и серия читается как один непрерывный инцидент, а не как десяток коротких. Первое или редкое восстановление гасится мгновенно, как и раньше, а ручное снятие, удаление потока, выключение оповещений у потока и выключение самой службы выдержку обходят. Механизм включён по умолчанию и нужен прежде всего внешней доставке: без него мигающее условие слало бы получателям пару сообщений на каждый цикл.
Разнос оповещений по домену¶
При включённом разносе и заданном домене на каждом узле виден сводный активный набор по всему домену: собственные алерты узла плюс алерты соседей того же домена. У каждой строки указан узел-источник, поэтому видно, на каком именно узле возникла проблема.
Разносятся по домену: потоковые алерты и алерты соответствия транспортного потока, переключение на резервный вход, ошибки загрузки конфигурации и транскодера, отбраковка звука OTT, ошибка сертификата ACME, истечение срока лицензии и признание её неподлинной.
Остаются локальными: ресурсные алерты об оборудовании и хранилищах, «узел замолчал», коллизия имён узлов, уведомление о старте сервиса, алерты здоровья записи DVR, требование недоступного на узле транскодера, алерты модуля условного доступа и неудачное дескремблирование. Системные алерты об оборудовании (коды 16–23 и 40–45) можно перевести в разнос переключателем разноса системных алертов.
Алерт «узел сети замолчал» каждый узел поднимает самостоятельно о том соседе, который перестал отвечать, — поэтому об одном упавшем узле его соседи поднимут такой алерт независимо друг от друга.
Внешняя доставка алертов¶
Помимо списка в браузере, алерты можно доставлять во внешнюю команду, в чат Telegram и по электронной почте (SMTP). Каждый канал независим и по умолчанию выключен, а доставку ведёт на своём фоновом потоке, поэтому медленный или недоступный адресат не задерживает остальные каналы и саму службу.
У каждого канала есть минимальный уровень серьёзности для доставки (по умолчанию — предупреждение): доставляется каждый видимый на узле алерт (собственный или разнесённый по домену) не ниже этого уровня, причём и при подъёме, и при снятии. Параметры подключения каждого канала описаны в разделе Веб-интерфейс.
Независимы каналы только друг от друга: все три подчинены главному выключателю алертера (Настройки алертера). При выключенной службе не уходит ничего — ни по своим алертам, ни по разнесённым с соседних узлов, ни по снятию инцидента, о котором уже сообщили.
Типичные проблемы¶
Алерты соседей не видны. Проверьте, что на узлах включён разнос по домену и задан общий домен. Системные алерты об оборудовании по умолчанию локальны — включите разнос системных алертов, если их тоже нужно видеть по домену.
Липкий алерт не уходит после устранения причины. Снимите его вручную на узле-источнике.
Внешние уведомления не приходят, хотя канал настроен и порог подходит. Проверьте главный выключатель алертера на том узле, от которого ждёте доставку: выключенная служба молчит и по чужим, разнесённым по домену алертам, хотя в админке они по-прежнему видны.