Несколько месяцев назад я обзавелся 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)
$5 — получатель (я использую {ALERT.SENDTO})
$6 — сообщение (я использую {ALERT.SUBJECT})
При изменении порядка следования параметров скрипт не отработает.

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

P.S.: Доработал триггеры на замену и изъятие SIM. Перекачайте шаблон.

Комментарии (5)


  1. yurybx
    04.06.2019 15:47

    В нашей самопальной CRM мы реализовали функцию отправки SMS через эту железку. Команды в устройство отправляет тоже sh-скрипт, но в связке с expect и telnet. Работает замечательно.


    1. AcidVenom Автор
      04.06.2019 15:52

      Тоже пробовал через telnet, но возникли проблемы с отправкой СМС: некоторые символы на кириллице упорно не хотели отправляться и съедались. Через netcat все удачно, почти без головняков при написании.


  1. denaspireone
    04.06.2019 16:10

    del


    1. AcidVenom Автор
      04.06.2019 16:19

      Извините, не понял вопрос.


      1. denaspireone
        04.06.2019 16:21

        Сори, подумал, что используете железку для отправки смс, а не как шлюз для выхода в интернет.