You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:42:25