如何为Nagios配置Twilio短信与电话告警?
Nagios配置Twilio短信与电话告警实现方案
一、准备Twilio核心信息
- 账户SID(Twilio控制台获取)
- 授权Token(Twilio控制台获取)
- Twilio分配的发送号码(带国家码,如+1xxxxxxxxx)
- 接收告警的目标号码(带国家码,如+861xxxxxxxxx)
二、编写Twilio告警脚本
在Nagios的libexec目录(默认/usr/local/nagios/libexec/)创建以下脚本:
1. 短信告警脚本(notify_twilio_sms.sh)
#!/bin/bash # 替换为你的Twilio信息 TWILIO_ACCOUNT_SID="你的账户SID" TWILIO_AUTH_TOKEN="你的授权Token" TWILIO_FROM="+你的Twilio发送号码" TWILIO_TO="$1" # 接收Nagios传入的告警内容 ALERT_SUBJECT="$2" ALERT_MESSAGE="$3" # 调用Twilio API发送短信 curl -X POST "https://api.twilio.com/2010-04-01/Accounts/$TWILIO_ACCOUNT_SID/Messages.json" \ --data-urlencode "From=$TWILIO_FROM" \ --data-urlencode "To=$TWILIO_TO" \ --data-urlencode "Body=$ALERT_SUBJECT: $ALERT_MESSAGE" \ -u "$TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN"
赋予脚本执行权限:
chmod +x /usr/local/nagios/libexec/notify_twilio_sms.sh chown nagios:nagios /usr/local/nagios/libexec/notify_twilio_sms.sh
2. 电话告警脚本(notify_twilio_call.sh)
#!/bin/bash # 替换为你的Twilio信息 TWILIO_ACCOUNT_SID="你的账户SID" TWILIO_AUTH_TOKEN="你的授权Token" TWILIO_FROM="+你的Twilio发送号码" TWILIO_TO="$1" # 接收Nagios传入的告警内容 ALERT_SUBJECT="$2" ALERT_MESSAGE="$3" # 构造语音播报内容 TWIML="<Response><Say voice='alice'>Nagios告警:$ALERT_SUBJECT。详情:$ALERT_MESSAGE</Say></Response>" # 调用Twilio API发起电话告警 curl -X POST "https://api.twilio.com/2010-04-01/Accounts/$TWILIO_ACCOUNT_SID/Calls.json" \ --data-urlencode "From=$TWILIO_FROM" \ --data-urlencode "To=$TWILIO_TO" \ --data-urlencode "Url=http://twimlets.com/echo?Twiml=$(echo "$TWIML" | urlencode)" \ -u "$TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN"
注:若系统无
urlencode命令,Debian/Ubuntu安装bsdmainutils,CentOS/RHEL安装util-linux
赋予脚本权限:
chmod +x /usr/local/nagios/libexec/notify_twilio_call.sh chown nagios:nagios /usr/local/nagios/libexec/notify_twilio_call.sh
三、配置Nagios命令
编辑Nagios命令配置文件(默认/usr/local/nagios/etc/objects/commands.cfg),添加以下命令定义:
define command{ command_name notify-service-by-twilio-sms command_line $USER1$/notify_twilio_sms.sh $CONTACTPAGER$ "$SERVICESTATE$ - $SERVICEDESC$" "$HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ at $LONGDATETIME$. Info: $SERVICEOUTPUT$" } define command{ command_name notify-host-by-twilio-sms command_line $USER1$/notify_twilio_sms.sh $CONTACTPAGER$ "$HOSTSTATE$ - $HOSTNAME$" "$HOSTALIAS$ is $HOSTSTATE$ at $LONGDATETIME$. Info: $HOSTOUTPUT$" } define command{ command_name notify-service-by-twilio-call command_line $USER1$/notify_twilio_call.sh $CONTACTPAGER$ "$SERVICESTATE$ - $SERVICEDESC$" "$HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ at $LONGDATETIME$. Info: $SERVICEOUTPUT$" } define command{ command_name notify-host-by-twilio-call command_line $USER1$/notify_twilio_call.sh $CONTACTPAGER$ "$HOSTSTATE$ - $HOSTNAME$" "$HOSTALIAS$ is $HOSTSTATE$ at $LONGDATETIME$. Info: $HOSTOUTPUT$" }
四、配置Nagios联系人
编辑联系人配置文件(默认/usr/local/nagios/etc/objects/contacts.cfg),修改目标联系人的配置:
define contact{ contact_name carl alias Carl email carl@example.com pager +861xxxxxxxxx # 替换为你的接收号码 service_notification_commands notify-service-by-twilio-sms,notify-service-by-twilio-call host_notification_commands notify-host-by-twilio-sms,notify-host-by-twilio-call service_notification_options w,u,c,r host_notification_options d,u,r }
说明:
service_notification_options中w=警告、u=未知、c=严重、r=恢复;host_notification_options中d=宕机、u=不可达、r=恢复,可按需调整。
五、验证配置并重启Nagios
检查配置语法正确性:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
无错误则重启Nagios服务:
systemctl restart nagios
六、测试告警
手动执行脚本测试:
/usr/local/nagios/libexec/notify_twilio_sms.sh +861xxxxxxxxx "测试告警" "Nagios Twilio短信测试" /usr/local/nagios/libexec/notify_twilio_call.sh +861xxxxxxxxx "测试告警" "Nagios Twilio电话测试"
也可通过模拟Nagios状态变更触发告警,验证完整流程。
内容的提问来源于stack exchange,提问作者Carl
相关产品推荐
相关产品推荐

