前面已分别介绍了zabbix的邮件、微信报警设置,这些都是手机在有网络时才能收到报警信息,那如果手机没有网的情况下怎么办,这就需要考虑使用短信接口报警了。当服务出现故障达到预警级别是通过发送短信的形式告诉运维人员,以便及时处理。公司的短信接口是从短信服务器购买的,并经过公司开发大神调整后使用的。废话不多赘述,下面直接记录配置过程:

一、zabbix服务端的脚本路径设置

[root@zabbix ~]# cat /data/zabbix/etc/zabbix_server.conf|grep alertscripts
AlertScriptsPath=/data/zabbix/alertscripts

二、短信脚本

--------------------------------------------------------------------------------------------------------
下面是开发大神给定义的一个短信模板,经过调试之后给运维部门使用的:
curl -H "Content-type: application/json" -X POST 192.168.1.10:8080/sms/send/batch -d '
{
  "phones": [
    "13611789029",
    "12310703369",
    "13314466149"
  ],
  "callOrgCode": "YW1001",
  "callOrgName": "运维部门",
  "callAppCode": "WANG_OPS",
  "key": "R13-G294595Y32M24TAD60JK",
  "templateId": 6,
  "valueMap": {
   "msg": "test001服务器出现问题!请尽快修复!" 
  }
} '

可以在命令行里手动执行上面的接口进行发信测试,在目标手机查看是否收到短信。(上面的短信模板需要开发人员在自己的短信接口平台里特意给我们运维部门造的)
--------------------------------------------------------------------------------------------------------

结合上面的短信接口,zabbix短信报警脚本如下:

[root@zabbix alertscripts]# cat zabbixsend_www.sxzhongrui.com
#!/bin/bash
export LANG=en_US.UTF-8

PHONE=$(echo $1|sed 's/,/",\n"/g')                         #第一个变量($1)。由于多个号码要换行,并且每行要加双引号,故要做匹配转换设置
#Message=$(echo $3|sed 's/:/": "/g'|sed 's/,/",\n"/g')
#Message=$(echo $3|sed 's/: /": "/g'|sed 's/,/",\n"/g')
Message=$3                                                 #第三个变量

curl -H "Content-type: application/json" -X POST 192.168.1.10:8080/sms/send/batch -d """          #公司的短信接口地址,这里采用post方式
{
  \"phones\": [
    \"$PHONE\"
  ],
  \"callOrgCode\":\"YW1001\",                        
  \"callOrgName\": \"运维部门\",
  \"callAppCode\": \"WANG_OPS\",
  \"key\": \"R13-G294595Y32M24TAD60JK\",
  \"templateId\": \"6\",
  \"valueMap\": {
   \"msg\": \"$Message\"
  }
} """                                         #前后三个引号表示引号里的内容输入什么就是什么,变量参数不会被影响。

time=`date '+%F %T'`
echo "${time}  ${PHONE} $Message" >> /data/log/sendsms_`date +%Y-%m`.log

[root@zabbix alertscripts]# chmod 755 zabbixsend_www.sxzhongrui.com 

可以先手动执行脚本进行发信测试:
$1是发信的手机号码
$2是发信的主题,这个一般短信报警信息里不显示,如下测试是"报警测试"。上面脚本中没有配置$2的变量
$3是发信的内容。
三个变量使用空格隔开
[root@zabbix alertscripts]# ./zabbixsend_www.sxzhongrui.com 13633767819 报警测试 backup01服务器宕机了!
{"totalCnt":1,"successCnt":1,"failCnt":0,"failPhones":[],"failMsg":null,"msgContent":"backup01服务器宕机了!"}

三、zabbix的web界面里的报警设置

1)报警媒介类型设置

2)用户的报警媒介设置

3)"动作"设置

上面的报警主题如下,这个其实在短信报警信息中没有体现,随便定义即可。

故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {www.sxzhongrui.com}故障!

报警内容如下(由于开发那边的调整规则,报警内容换行后就发信失败,所以这里只能讲报警内容放在一行)

告警主机:{HOSTNAME1}, 告警时间:{www.sxzhongrui.com} {EVENT.TIME}, 告警等级:{TRIGGER.SEVERITY}, 告警信息: {www.sxzhongrui.com}, 告警项目:{TRIGGER.KEY1}, 问题详情:{www.sxzhongrui.com}:{ITEM.VALUE}, 当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}, 事件ID:{www.sxzhongrui.com}

手机短信报警截图如下:

发信后,可以查看zabbix的web界面里的"报表"->“动作日志”