Zabbix: LLD-мониторинг SIM-карт Yeastar TG

xjuvpzowd0ignibphf_e-0xivga.png
Несколько месяцев назад я обзавелся GSM-шлюзом Yeastar TG200. Оборудование само по себе хорошее, чего не сказать о яичном операторе, который периодически подкладывает свинью. Вот поэтому и появилась необходимость иметь актуальную информацию о состоянии SIM-ок и реагировать на отвалы. Проблема заключается лишь в одном: в данном аппарате, как и во всей серии, нет SNMP. Но есть API (AMI). Готового решения я не нашел, поэтому решил сделать свой велосипед механизм опроса устройства.На его основе и будет строиться весь мониторинг Zabbix. Что для этого нужно:

  • Шаблон
  • Скрипт
  • netcat она же nc (на Ubuntu предустановлена)
  • включить API на устройстве


Шаблон


Шаблон создан на базе версии 4.2, но, возможно, будет работать и на более ранних версиях. Главное, чтобы ваша версия поддерживала предобработку в LLD зависимых элементов.
Из коробки мониторятся данные о IMSI, SMS-центре, операторе, уровне сигнала, состояниях и последнем действии. При желании можно очень просто создать еще прототип с нужной преобработкой. Также в шаблоне есть несколько триггеров, в том числе на падение интерфейса SIM и ее замену. Стоит упомянуть, что обнаруживаются только вставленные симки. Отключается это в фильтрах обнаружения (мало ли, может кому-то нужно). Само собой, скрипт должен лежать в externalscripts и иметь права на выполнение другим пользователям.

Hardware — Yeastar TG.xml


Скрипт


yeastarsim.sh


Скрипт получает следующие параметры:
$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


Далее идете в АдминистрированиеСпособы оповещенияСоздать способ оповещения и выбираете Скрипт. Имя скрипта должно совпадать с названием файла (в моем случаем — yeastarsms.sh). Сам скрипт принимает следующие переменные (параметры):

$1 — ip или dns шлюза
$2 — имя пользователя API
$3 — пароль API
$4 — порт SIM как есть (к примеру 1 SIM)
$5 — получатель (я использую {ALERT.SENDTO})
$6 — сообщение (я использую {ALERT.SUBJECT})
При изменении порядка следования параметров скрипт не отработает.

Буду рад предложениям и комментариям.

© Habrahabr.ru