During some Zabbix sessions, I thought it would be nice to be able to alert via SMS. Zabbix, out of the box, supports the possibility to send SMS via attached GSM modems, so I gave it a try. I am currently using a Huawei USB modem:
Bus 003 Device 011: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E230/E270/E870 HSDPA/HSUPA Modem
Unfortunately, this modem has some troubles with the AT command sequences Zabbix sends:
/var/log/zabbix-server/zabbix_server.log
856:20120120:170920.965 Read from GSM modem [^MOK^M]
856:20120120:170920.965 End of read_gsm():SUCCEED
856:20120120:170920.965 Write to GSM modem [ATE0^M]
856:20120120:170920.965 In read_gsm() [OK] [NULL] [NULL] [NULL]
856:20120120:170921.069 Read from GSM modem [^MOK^M]
856:20120120:170921.069 In check_modem_result()
856:20120120:170921.069 End of check_modem_result():SUCCEED
856:20120120:170921.069 End of read_gsm():SUCCEED
856:20120120:170921.069 Write to GSM modem [AT^M]
856:20120120:170921.069 In read_gsm() [OK] [NULL] [NULL] [NULL]
856:20120120:170921.173 Read from GSM modem [^MOK^M]
856:20120120:170921.174 In check_modem_result()
856:20120120:170921.174 End of check_modem_result():SUCCEED
856:20120120:170921.174 End of read_gsm():SUCCEED
856:20120120:170921.174 Write to GSM modem [AT+CMGF=1^M]
856:20120120:170921.174 In read_gsm() [OK] [NULL] [NULL] [NULL]
856:20120120:170921.277 Read from GSM modem [^MOK^M]
856:20120120:170921.277 In check_modem_result()
856:20120120:170921.277 End of check_modem_result():SUCCEED
856:20120120:170921.277 End of read_gsm():SUCCEED
856:20120120:170921.277 Write to GSM modem [AT+CMGS="]
856:20120120:170921.277 Write to GSM modem [0041791234567]
856:20120120:170921.277 Write to GSM modem ["^M]
856:20120120:170921.277 In read_gsm() [> ] [NULL] [NULL] [NULL]
856:20120120:170921.385 Read from GSM modem [^M> ]
856:20120120:170921.385 In check_modem_result()
856:20120120:170921.385 End of check_modem_result():SUCCEED
856:20120120:170921.385 End of read_gsm():SUCCEED
856:20120120:170921.385 Write to GSM modem [Host xyz is unreachable: PROBLEM]
856:20120120:170921.385 Write to GSM modem [^Z]
856:20120120:170921.385 In read_gsm() [+CMGS: ] [NULL] [NULL] [NULL]
856:20120120:170921.489 Read from GSM modem [^M]
856:20120120:170921.489 In check_modem_result()
856:20120120:170921.489 End of check_modem_result():FAIL
856:20120120:170921.489 End of read_gsm():FAIL
856:20120120:170921.489 Write to GSM modem [^MESC^Z]
856:20120120:170921.489 In read_gsm() [] [NULL] [NULL] [NULL]
856:20120120:170921.489 Error during wait for GSM modem.
856:20120120:170921.489 Read from GSM modem []
856:20120120:170921.489 End of read_gsm():SUCCEED
856:20120120:170921.494 End of send_sms():FAIL
856:20120120:170921.494 End execute_action()
856:20120120:170921.494 Error sending alert ID [62]
After some research I figured out that it probably would be a better idea to write a wrapper-script to implement the SMS functionality. There is actually a way to fix this AT command sequence issue, but it would require recompiling some parts of Zabbix (which is not an option for me, as I use the Debian packaged Zabbix). To interface with the modem, I am finally using Gnokii:
/etc/zabbix/gnokii.conf
[global]
port = /dev/ttyUSB1
model = AT
connection = serial
Thats the script I use to send the alerts to (taken straight from zabbix.com):
/etc/zabbix/alert.d/zabbix-sms.sh
#!/bin/sh
LOGFILE="/var/log/zabbix-server/zabbix-sms.log"
echo "To: '$1' Text: '$3'" >> ${LOGFILE}
PHONENR=`echo "$1" | sed s#\s##`
/bin/echo "$3" | /usr/bin/gnokii --config /etc/zabbix/gnokii.conf --sendsms "${PHONENR}" 1>>${LOGFILE} 2>&1
Here are some screenshots on how to configure the SMS alert in the Zabbix GUI:
Links
http://www.zabbix.com/wiki/howto/config/alerts/sms
http://lab4.org/wiki/Zabbix_Medien_einrichten