В данной статье опишу, как я настраивал SMS оповещение в Zabbix о проблемах в сети. Делал я это чтоб не зависеть от интернета. Ведь как-то не правильно, получается, сообщать о проблемах сети по сети))). Модем который я подключал Huawei e171 от МТС достался на халяву, по акции от магазина, когда ноутбук покупал)). У нас в регионе стоимость SMS самая дешевая у TELE2 так что первое что я сделал это разблокировал модем с помощью huawei modem unlocker v 1.1. Делается это довольно просто с помощью одной круглой кнопки). Далее вставляем симку TELE2 в модем и подключаем его к FreeBSD 8.3, выполним

inspection# dmesg -a

видим:

ugen3.2: <huawei technology="Technology"></huawei> at usbus3
ugen3.2: <huawei technology="Technology"></huawei> at usbus3 (disconnected)
ugen3.2: <huawei technology="Technology"></huawei> at usbus3
u3g0: <huawei technology="Technology" huawei="HUAWEI" mobile="mobile" class="class" 0="0" addr="addr" 2="2"> on usbus3 
u3g0: Found 4 ports. 

далее проверку

inspection# ls -lah /dev/cuaU*
crw-rw---- 1 uucp dialer&nbsp;&nbsp; 0, 112 Sep 20 09:46 /dev/cuaU0.0
crw-rw---- 1 uucp dialer&nbsp;&nbsp; 0, 113 Sep 19 13:24 /dev/cuaU0.0.init
crw-rw---- 1 uucp dialer&nbsp;&nbsp; 0, 114 Sep 19 13:24 /dev/cuaU0.0.lock
crw-rw---- 1 uucp dialer&nbsp;&nbsp; 0, 118 Sep 19 13:24 /dev/cuaU0.1
crw-rw---- 1 uucp dialer&nbsp;&nbsp; 0, 119 Sep 19 13:24 /dev/cuaU0.1.init
crw-rw---- 1 uucp dialer&nbsp;&nbsp; 0, 120 Sep 19 13:24 /dev/cuaU0.1.lock
crw-rw---- 1 uucp dialer&nbsp;&nbsp; 0, 124 Sep 19 13:24 /dev/cuaU0.2
crw-rw---- 1 uucp dialer&nbsp;&nbsp; 0, 125 Sep 19 13:24 /dev/cuaU0.2.init
crw-rw---- 1 uucp dialer&nbsp;&nbsp; 0, 126 Sep 19 13:24 /dev/cuaU0.2.lock
crw-rw---- 1 uucp dialer&nbsp;&nbsp; 0, 130 Sep 19 13:24 /dev/cuaU0.3
crw-rw---- 1 uucp dialer&nbsp;&nbsp; 0, 131 Sep 19 13:24 /dev/cuaU0.3.init
crw-rw---- 1 uucp dialer&nbsp;&nbsp; 0, 132 Sep 19 13:24 /dev/cuaU0.3.lock

Модем опознался как ugen3.2 и еще добавился в девайсы как cuaU0.0 это устройство и юзаем.

Далее добавляем пользователя Zabbix в группу "uucp" и "dialer" для того чтобы можно было использовать модем этим демоном.


inspection# pw groupmod uucp -m zabbix
inspection# pw groupmod dialer -m zabbix
inspection# pw groupshow dialer
dialer:*:68:zabbix
inspection# pw groupshow uucp
uucp:*:66:zabbix
inspection# rehash
inspection# /usr/local/etc/rc.d/zabbix_server restart

Далее в Zabbix добавим новый способ оповещения с указанным устройством, и настроим уведомления для использования данного способа оповещения. Администрирование > Способы оповещений

Тип: SMS

GSM модем: /dev/cuaU0.0

Теперь в своем профиле пользователя необходимо указать свой номер телефона и в Zabbix зайти Настройки > Действия с указанием об отправке уведомлений и по СМС. На этом можно и закончить, но скорее всего сообщения SMS будут приходить в тройном экземпляре. Решается это так:

Изменяем исходники Zabbix, а именно собираем Zabbix-server без опции очистки

inspection# make install

Так в директории порта останутся исходники. Идем в папку /usr/ports/net-mgmt/zabbix2-server/work/zabbix-2..../src/libs/zbxmedia/ и находим sms.c и в нем правим

zbx_sms_scenario scenario[] =
        {
                {ZBX_AT_ESC     , NULL          , 0},   /* Send <esc></esc> */
                {"AT+CMEE=2\r"  , ""/*"OK"*/    , 5},   /* verbose error values */
                {"ATE0\r"       , "OK"          , 5},   /* Turn off echo */
                {"AT\r"         , "OK"          , 5},   /* Init modem */
                {"AT+CMGF=1\r"  , "OK"          , 5},   /* Switch to text mode */
                {"AT+CMGS=\""   , NULL          , 0},   /* Set phone number */
                {number         , NULL          , 0},   /* Write phone number */
                {"\"\r"         , "&gt; "          , 5},   /* Set phone number */
                {message        , NULL          , 0},   /* Write message */
                {ZBX_AT_CTRL_Z  , "+CMGS: "     , 40},  /* Send message */
                {NULL           , "OK"          , 1},   /* ^Z */
                {NULL           , NULL          , 0}
        };

на

zbx_sms_scenario scenario[] =
        {
                {ZBX_AT_ESC     , NULL          , 0},   /* Send <esc></esc> */
                {"AT+CMEE=2\r"  , ""/*"OK"*/    , 5},   /* verbose error values */
                {"ATE0\r"       , "OK"          , 5},   /* Turn off echo */
                {"AT\r"         , "OK"          , 5},   /* Init modem */
                {"AT+CMGF=1\r"  , "OK"          , 5},   /* Switch to text mode */
                {"AT+CMGS=\""   , NULL          , 0},   /* Set phone number */
                {number         , NULL          , 0},   /* Write phone number */
                {"\"\r"         , "&gt; "          , 5},   /* Set phone number */
                {message        , NULL          , 0},   /* Write message */
                {ZBX_AT_CTRL_Z  , NULL          , 40},  /* Send message */
                {NULL           , NULL          , 1},   /* ^Z */
                {NULL           , NULL          , 0}
        };

Cохраняем и делаем

inspection# make reinstall.

После этого SMS троить перестанут)

Если появляется ошибка Expected [+CMGS: ] received [OK]

Для решения ошибки проверяем чтоб сообщения были на латинском языке и количество символов не превышало допустимое оператором значение.