Recently I needed to setup a Zabbix distribution with SMS notifications. I had a Momo Design MD-@ USB Internet key to be used as GSM modem, with a BT Italia (Vodafone) SIM card. I used the 1.8.5 version of Zabbix, installed using the apt tool on a Ubuntu 11.10.
The Zabbix built-in SMS notification system seemed to have a bug, which cause a triple notification to be sent on every trigger action (bug ID ZBX-3507), so I preferred to use an external (custom) script and a third party tool: gammu-smsd.
This daemon connects to the GSM modem and listens for an outgoing queue; when you need to send a message, you just have to “inject” it into its queue, then it does the rest.
Installation
As soon as I plugged the USB key into the server, Ubuntu recognized it:
Oct 27 13:57:08 MyMachineName kernel: [764858.260009] usb 4-1: new full speed USB device number 2 using uhci_hcd Oct 27 13:57:08 MyMachineName kernel: [764858.481158] cdc_acm 4-1:1.0: ttyACM0: USB ACM device Oct 27 13:57:08 MyMachineName kernel: [764858.484118] usbcore: registered new interface driver cdc_acm Oct 27 13:57:08 MyMachineName kernel: [764858.484121] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
Then I installed gammu-smsd and edited its configuration file:
apt-get install gammu-smsd cat /etc/gammu-smsdrc # Configuration file for Gammu SMS Daemon # Gammu library configuration, see gammurc(5) [gammu] # Please configure this! port = /dev/ttyACM0 connection = at # Debugging logformat = textall # SMSD configuration, see gammu-smsdrc(5) [smsd] service = files logfile = /var/log/gammu-smsd # Increase for debugging information debuglevel = 0 ReceiveFrequency = 300 # Paths where messages are stored inboxpath = /var/spool/gammu/inbox/ outboxpath = /var/spool/gammu/outbox/ sentsmspath = /var/spool/gammu/sent/ errorsmspath = /var/spool/gammu/error/
The port parameter is the device where the modem is mapped. This may change on other system.
I changed the logfile parameter also, because by default it is configured to log to syslog. You need to give the right permissions to it:
chmod a+rw /var/log/gammu-smsd
The ReceiveFrequency is used to tell gammu-smsd how often to check for incoming SMS; by default it is every 1 second, but in my case I didn’t need to receive SMS, so I raised it to 5 minutes.
An important parameter is PIN on the [smsd] section: in my case I removed the PIN check from my SIM card, so I didn’t use it in the configuration file.
In order to avoid “Cannot open file” errors, I also granted access to the device to everyone:
chmod a+rw /dev/ttyACM0
At this time I reloaded gammu-smsd and tested the configuration:
/etc/init.d/gammu-smsd restart echo "Test message" | gammu-smsd-inject TEXT 335123456
(replace 335123456 with your mobile phone number!)
The gammu-smsd-monitor utility let you to check your modem status too.
In order to rotate gammu-smsd log file, I wrote a logrotate.d configuration file too:
cat /etc/logrotate.d/gammu-smsd /var/log/gammu-smsd { daily rotate 7 compress missingok notifempty }
Zabbix configuration
As first I configured a new media type using the Zabbix administration front-end:
Administration / Media types -> Create Media Type
Description: SMS-via-gammu Type: Script Script name: sendsms
sendsms is the name of the external script I used for my custom notification system.
Then I configured the new media type for my Zabbix user:
Administration / Users -> select Users in the top right corner – edit your user Media: Add
Type: SMS-via-gammu Send to: 335123456 When active, Use if severity: as you wish Status: Enabled
Of course, I had an Action configured too, but for more information I suggest you to read about it on the official documentation page.
In order to configure Zabbix to use external notification scripts, I verified that the AlertScriptsPath was present in the configuration file:
cat /etc/zabbix/zabbix_server.conf | grep AlertScriptsPath AlertScriptsPath=/etc/zabbix/alert.d/
/etc/zabbix/alert.d is the directory where notifications script have to be.
Then I added the zabbix user to the gammu group, in order to give it the right permissions to inject messages into the outgoing gammu queue…
adduser zabbix gammu
… then I restarted Zabbix:
/etc/init.d/zabbix-server restart
This is the script I used to inject Zabbix notifications into the gammu outgoing queue (/etc/zabbix/alert.d/sendsms):
#!/bin/sh # $1 recipient # $2 subject # $3 message TMPFILE=`mktemp -t` echo "$3" >> $TMPFILE cat $TMPFILE | gammu-smsd-inject TEXT $1 rm $TMPFILE chmod a+x /etc/zabbix/alert.d/sendsms
At this time I tested it by creating a new trigger with fake values (temperature < 100 °C, or everything else could let an action to be raised).
References
Zabbix.com: Configuration page on the official documentation site
gammu-smsd: Gammu SMSD