Zabbix + удаленная отправка SMS

Решил прикрутить к Zabbix отправку SMS, но у меня Zabbix сервер вырван из той инфраструктуры серверов которая мне принадлежит и он накачен в Германии на арендованной VPS-ке Hetzner. Ведь согласитесь, глупо мониторить инфраструктуру с тех-же серверов которые надо миноторить pardon

Но от этого возникает проблемка, всп-ке модем не присунешь. Сначала я пользовал E-Mail->SMS шлюз сервиcа SMS.RU, но как выяснилось, они совсем на голову отмороженные. По этому пришлось придумать свое решение под катком.

Сначала я закупил модем Huawei E8372 и немного его поизучал. Вещица оказалась довольно занятная.

При подключении к компу она создает виртуальную сеть, где выполняет роль маршрутизатора. Так-же имеет на борту вафля-точку доступа, и может раздавать инет по вафле если его просто включить в розетку. У него на борту есть свой веб-интерфейс которым оно управляется.

Но мне оно как раздатчик интернета совсем не интересено, мне надо слать SMS-ки. Выяснилось что “по старинке” отправить SMS-ку AT-командой оно не может, но может ее отправить через веб-интерфейс.

На просторах GitHub был найден проект Pablo Santa Cruz‘а, это питоновская либа, которая взаимодействует с веб-интерфейсом модема, эмитирует вход в админку и отправляет через нее SMS-ку.

Появилось некоторое понимание метода решения проблемы: Нужно место где будет стартовать скрипт, который будет работать с модемом, при этом Zabbix должен иметь доступ к скрипту.

Первая мысль которая у меня возникла, впихнуть модем в Raspberry Pi на котором будет крутится скрипт и организовать доступ Zabbix’а к Raspberry Pi, но эта идея была отметена как нежелательная.

Потом я вспомнил, что в моем Микротике есть USB-порт, и он обучен работать с этими модемами. Было решено замутить вот такое:

Тоесть питон-скрипт Пабло на ходится непосредственно на Zabbix-сервере, а от него проброшена тунелька до виртуальнй сетевухи модема, которая от-NATчена, чтобы модем думал что к нему стучится не Zabbix а локальный юзер и легитимно шлет SMS-ку.

Сказано – сделано:

Микротик без проблем увидел модем:

Был настроен IPSec и NAT, Zabbix-сервер увидел модем по дефолтному адресу Хуавея 192.168.8.1.

Была поставлена указанная либа и накатан скрипт отправки на базе дефолтного:

# cat /usr/lib/zabbix/alertscripts/E8372.py

#!/usr/bin/python3

import sys

from pprint import pprint

from huaweisms.api import monitoring, user, sms
from huaweisms.api.common import ApiCtx

USER = "admin"
PASSWORD = "DeR_PaSsWoRd"
PHONE_NUMBER = sys.argv[1]

# BEFORE running, do MAKE SURE heaweisms.api.config has the CORRECT VALUES for your MODEM

def get_session():
return user.quick_login(USER, PASSWORD)

def valid_context(ctx):
# type: (ApiCtx) -> bool
sl = user.state_login(ctx)
if sl['type'] == 'response' and sl['response']['State'] != -1:
return True
return False

ctx = get_session()
sent = sms.send_sms(ctx, PHONE_NUMBER, sys.argv[2])
А в Zabbix был создан соответствующий метод оповещения, который дергает скрипт и передает ему в параметрах телефон получателя и текст оповещения:

Действие было настроено практическит дефолтно:

Схема стартанула сразу, без запинки:

Пока я тестирую тариф интернет-вещей от MTS, но аналогичный тариф от Теле2 кажется вкуснее, заказал симку жду…

Комментариев: 3 на “Zabbix + удаленная отправка SMS

  1. Спасибо за инструкцию!!!
    Настроил то же самое на модеме Huawei 3372. Всё работает.
    Единственное я бы добавил как поставить либу Huawei sms sender.
    Я сделал это с помощью команды “pip install huawei-modem-api-client”.
    Точнее в моём случае “pip3 install huawei-modem-api-client”.
    И ещё на модеме пришлось включить авторицию (По-умолчанию её не было). Без этого скрипт на работал.

  2. Благодарю автора за инструкцию.
    В моем случае для импорта пакета использовал команду sudo -H pip3 install huawei-modem-api-client, т.к. рабочий каталог Python для пользователя zabbix другой.
    В противном случае возникала ошибка AttributeError: module ‘six’ has no attribute ‘ensure_str’
    Может, кому пригодится.

Добавить комментарий