Несколько месяцев назад я обзавелся GSM-шлюзом Yeastar TG200. Оборудование само по себе хорошее, чего не сказать о яичном операторе, который периодически подкладывает свинью. Вот поэтому и появилась необходимость иметь актуальную информацию о состоянии SIM-ок и реагировать на отвалы. Проблема заключается лишь в одном: в данном аппарате, как и во всей серии, нет SNMP. Но есть API (AMI). Готового решения я не нашел, поэтому решил сделать свой велосипед механизм опроса устройства.На его основе и будет строиться весь мониторинг Zabbix. Что для этого нужно:
- Шаблон
- Скрипт
- netcat она же nc (на Ubuntu предустановлена)
- включить API на устройстве
Шаблон
Шаблон создан на базе версии 4.2, но, возможно, будет работать и на более ранних версиях. Главное, чтобы ваша версия поддерживала предобработку в LLD зависимых элементов.
Из коробки мониторятся данные о IMSI, SMS-центре, операторе, уровне сигнала, состояниях и последнем действии. При желании можно очень просто создать еще прототип с нужной преобработкой. Также в шаблоне есть несколько триггеров, в том числе на падение интерфейса SIM и ее замену. Стоит упомянуть, что обнаруживаются только вставленные симки. Отключается это в фильтрах обнаружения (мало ли, может кому-то нужно). Само собой, скрипт должен лежать в externalscripts и иметь права на выполнение другим пользователям.
Скрипт
Скрипт получает следующие параметры:
$1 — discovery или номер span'а, который обнаружит discovery
$2 — {HOST.CONN} — адрес узла
$3 — {$APIUSER} — имя пользователя API
$4 — {$APIPASS} — пароль API
При запросе discovery скрипт отдает JSON со всеми SIM-картами, их состоянием, span'ами и номерами (на единичку меньше для читаемости). При запросе span'а — полная информация без цензурирования для парсинга.
Поэтому для корректной работы вам необходимо указать в каждом узле, к которому привязан данный шаблон, макросы {$APIUSER} и {$APIPASS}. Если такие макросы уже существуют, то просто переименуйте их в шаблоне, скажем, на {$TGAPIUSER} и {$TGAPIPASS}. Если используете одинаковые пароли для API на всех шлюзах, используйте глобальные макросы. Повторюсь, API на стороне шлюза должен быть активирован, учетные данные должны быть верны.
Бонус
В качестве бонуса оставлю скрипт отправки СМС из Zabbix. Скрипт необходимо положить в папку alertscripts и дать права на выполнение другим пользователям.
Далее идете в Администрирование → Способы оповещения → Создать способ оповещения и выбираете Скрипт. Имя скрипта должно совпадать с названием файла (в моем случаем — yeastarsms.sh). Сам скрипт принимает следующие переменные (параметры):
$1 — ip или dns шлюза
$2 — имя пользователя API
$3 — пароль API
$4 — порт SIM как есть (к примеру 1)
$5 — получатель (я использую {ALERT.SENDTO})
$6 — сообщение (я использую {ALERT.SUBJECT})
При изменении порядка следования параметров скрипт не отработает.
Буду рад предложениям и комментариям.
Автор: AcidVenom