(一)、描述常见监控系统及SNMP协议
在运维领域,监控系统即用于监控生产环境所使用的硬件、软件或者是业务的运行情况的报警系统。其能够对生产环境所产生的异常作出报警,使得管理员能够及时获知报警信息,保证业务的正常运行。
- 采样:
- 存储:
- 展示:
- 报警:
常见的开源监控项目:
- cacti,nagios;
- zabbix
- ganglia
SNMP: 简单网络管理协议; 基于UDP协议来提供服务;目前基本所有网络设备都自带SNMP协议.
- 模式分类: 读(get, getnext), 写(set), 陷阱(trap)
- 对应端口: 161/udp(agent), 162/udp
- 对应的版本: v1: 1989 v2c: 1993 v3: 1998
- MIB: Managerment Information Base
- OID: Object ID (对象标识符)
(二)、搭建企业级zabbix,实现自动以邮件和短信报警
(1)、准备环境
CentOS7.4三台主机,其中一台server,另外两台做为被监控主机,分别对应node1和node2
1).所有机器同步服务器时间,配置epel以及yum源,关闭防火墙,三台机器可以互相通信.
[root@server ~]#ntpdate ntp1.aliyun.com
[root@server ~]#yum install epel-release -y
[root@server ~]#systemctl stop firewalld.service
[root@server ~]#getenforce
Disabled
2).各主机配置架构信息
机器名称 | IP配置信息 | 机器性质 | 备注信息 |
---|---|---|---|
server | 192.168.8.103 | zabbix-server | 开启监控功能 |
node1 | 192.168.8.104 | zabbix-agent | 启动 |
node2 | 192.168.8.105 | zabbix-agent | 启动 |
(2)、Zabbix的安装
1).去zabbix官网下载rpm包到本地
rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
各个主机对应需要安装的程序包,并依次安装
- Server: zabbix-server-mysql, zabbix-get
- Web GUI: zabbix-web, zabbix-web-mysql
- Agent: zabbix-agent, zabbix-sender
- Proxy: zabbix-proxy
[root@server ~]#yum install zabbix-server-mysql zabbix-get -y
2).配置数据库
安装数据库mysql
[root@server ~]#yum install mariadb-server -y
[root@server ~]#systemctl start mariadb.service
[root@server ~]#systemctl enable mariadb.service
配置数据库服务端文件
[root@server ~]#vim /etc/my.cnf.d/server.cnf
[mysqld]
skip_name_resolve=on # 跳过主机名解析
innodb_file_per_table=on
重启数据库
[root@server ~]#systemctl restart mariadb.service
[root@server ~]#ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 50 *:3306 *:*
创建zabbix数据库对应账号
MariaDB [(none)]> CREATE DATABASE zabbix CHARSET 'utf8';
MariaDB [(none)]> GRANT ALL ON zabbix.* TO 'zbxuser'@'192.168.%.%' IDENTIFIED BY 'zbxpass';
MariaDB [(none)]> flush privileges; #刷新授权
查找zabbix对应的数据库表
[root@server ~]#rpm -ql zabbix-server-mysql
/etc/logrotate.d/zabbix-server
/etc/zabbix/zabbix_server.conf
/usr/lib/systemd/system/zabbix-server.service
/usr/lib/tmpfiles.d/zabbix-server.conf
/usr/lib/zabbix/alertscripts
/usr/lib/zabbix/externalscripts
/usr/sbin/zabbix_server_mysql
/usr/share/doc/zabbix-server-mysql-4.0.4
/usr/share/doc/zabbix-server-mysql-4.0.4/AUTHORS
/usr/share/doc/zabbix-server-mysql-4.0.4/COPYING
/usr/share/doc/zabbix-server-mysql-4.0.4/ChangeLog
/usr/share/doc/zabbix-server-mysql-4.0.4/NEWS
/usr/share/doc/zabbix-server-mysql-4.0.4/README
/usr/share/doc/zabbix-server-mysql-4.0.4/create.sql.gz #对应的zabbix的sql表脚本
/usr/share/man/man8/zabbix_server.8.gz
/var/log/zabbix
/var/run/zabbix
解压并且导入到数据库
[root@server ~]#gzip -d /usr/share/doc/zabbix-server-mysql-4.0.4/create.sql.gz
[root@server ~]#mysql -uzbxuser -h192.168.8.104 -pzbxpass zabbix < /usr/share/doc/zabbix-server-mysql-4.0.4/create.sql
登录mysql查看是否导入成功
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| zabbix |
+--------------------+
MariaDB [(none)]> use zabbix;
MariaDB [zabbix]> SHOW TABLES;
+----------------------------+
| Tables_in_zabbix |
+----------------------------+
| acknowledges |
| actions |
| alerts |
(3)、配置server端
修改server端的配置文件
[root@server ~]#cd /etc/zabbix/
[root@server zabbix]#cp zabbix_server.conf{,.bak}
[root@server zabbix]#grep -i "^####" zabbix_server.conf
############ GENERAL PARAMETERS #################
############ ADVANCED PARAMETERS ################
####### LOADABLE MODULES #######
####### TLS-RELATED PARAMETERS #######
编辑server端配置文件
[root@server zabbix]#vim zabbix_server.conf
ListenPort=10051
SourceIP=192.168.8.103
DBHost=192.168.8.103 #数据库对外的主机
DBName=zabbix #数据库名称
DBUser=zbxuser #数据库用户
DBPassword=keer #数据库密码
DBPort=3306
开启zabbix-server端的服务
[root@server zabbix]#systemctl start zabbix-server.service
[root@server zabbix]#systemctl enable zabbix-server.service
[root@server zabbix]#ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:10051
(4)、配置web Gui
解决依赖关系
[root@server ~]#yum install httpd php php-mysql php-mbstring php-gd php-bcmatch php-ldap php-xml -y
安装web gui
[root@server ~]#yum install zabbix-web zabbix-web-mysql -y
配置php时区参数
[root@server ~]#cd /etc/httpd/conf.d/
[root@server conf.d]#cp zabbix.conf{,.bak}
[root@server conf.d]#vim zabbix.conf
php_value date.timezone Asia/Shanghai
启动web服务
[root@server ~]#systemctl start httpd.service
[root@server ~]#systemctl enable httpd.service
[root@server ~]#ss -tnl
LISTEN 0 128 :::80 :::*
(5)、浏览器访问并进行配置
使用浏览器登录url: 192.168.8.103/zabbix
检查依赖关系是否正常
数据库信息登录设置
登录zabbix主页面
默认用户名为: admin 密码为: zabbix
(6)、配置agent端
server端设置完毕后,我们需要在被监控的主机安装agent,设置好对应的server信息,然后添加到server端中.
1).在监控主机安装zabbix
[root@node1 ~]#rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
[root@node1 ~]#yum install zabbix-agent zabbix-sender -y
2).修改配置文件
[root@node1 ~]#rpm -ql zabbix-agent
/etc/logrotate.d/zabbix-agent
/etc/zabbix/zabbix_agentd.conf
/etc/zabbix/zabbix_agentd.d
/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
/usr/lib/systemd/system/zabbix-agent.service
/usr/lib/tmpfiles.d/zabbix-agent.conf
/usr/sbin/zabbix_agentd
/usr/share/doc/zabbix-agent-4.0.4
/usr/share/doc/zabbix-agent-4.0.4/AUTHORS
/usr/share/doc/zabbix-agent-4.0.4/COPYING
/usr/share/doc/zabbix-agent-4.0.4/ChangeLog
/usr/share/doc/zabbix-agent-4.0.4/NEWS
/usr/share/doc/zabbix-agent-4.0.4/README
/usr/share/man/man8/zabbix_agentd.8.gz
/var/log/zabbix
/var/run/zabbix
备份配置文件
[root@node1 ~]#cd /etc/zabbix
zabbix_agentd.conf zabbix_agentd.d
[root@node1 zabbix]#cp zabbix_agentd.conf{,.bak}
zabbix_agentd.conf zabbix_agentd.conf.bak zabbix_agentd.d
编辑配置文件项
[root@node1 zabbix]#vim zabbix_agentd.conf
[root@node1 zabbix]#grep -i "^####" zabbix_agentd.conf
############ GENERAL PARAMETERS #################
##### Passive checks related #被动模式
##### Active checks related #主动模式
############ ADVANCED PARAMETERS #################
####### USER-DEFINED MONITORED PARAMETERS #######
####### LOADABLE MODULES #######
####### TLS-RELATED PARAMETERS #######
[root@node1 zabbix]#vim zabbix_agentd.conf
Server=192.168.8.103 #哪个服务器
ListenPort=10050 #自己监听的端口
ListenIP=0.0.0.0 #自己监听的地址,0.0.0.0表示本机所有地址
ServerActive=192.168.8.103 #主动监控时的服务器是哪个
Hostname=192.168.8.104 #自己被server端识别的名称
启动agent端服务并查看端口是否正常启动
[root@node1 zabbix]#systemctl start zabbix-agent.service
[root@node1 zabbix]#systemctl enable zabbix-agent.service
[root@node1 zabbix]#ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:10050 *:*
bode2也进行同样的操作,需要注意的是node2配置文件中的Hostname需要做对应的修改
server端和agent端到目前为止配置完成
(7)、监控页面详解
1).修改zabbix监控页面的相关配置项
2).创建主机以及主机群组
创建自己的主机组
创建node1主机
同样的方法创建node2主机
3).监控项(items)
创建node1的监控项
在服务器端可以通过命令查看key的取值是否正常,若正常说明上述key值可以正常被取到数据
[root@server ~]#zabbix_get -s 192.168.8.104 -p 10050 -k "net.if.in[ens33]"
8890633
可以看到ZBX选项变绿,说明数据已经取到
把node1添加到对应的graph中
利用cron功能,添加其他额外的数据图
注意:key也要做对应的修改
4).触发器(trigger)
当我们的采集的值定义完了以后,就可以来定义触发器
定义: 界定某特定的item采集到的数据的非合理区间或非合理状态,通常为逻辑表达式
逻辑表达式,阈值,通常用于定义书库的不合理区间; 条件满足时,TRUE, 表示PROBLEM状态, 反之,则OK状态;
- OK --> PROBLEM
- Recovery: PROBLEM -->OK
OK(不符合条件):正常状态 --> 较老的zabbix版本,其为FALSE;
PROBLEM(符合条件):非正常状态 --> 较老的zabbix版本,其为TRUE;
- 一般,我们评定采样数值是否为合理区间的比较稳妥的方法是——根据最后N次的平均值来判定结果;这个最后N次通常有两种定义方式:
- 最近N分钟所得结果的平均值
- 最近N次所得结果的平均值
触发器的表达式:
{<server>:<key>.<function>(<parameter>)}<operator><constant>
- server:主机名称;
- key:主机上关系的相应监控项的key;
- function:评估采集到的数据是否在合理范围内时所使用的函数,其评估过程可以根据采取的数据、当前时间及其它因素进行;
目前,触发器所支持的函数有avg、count、change、date、dayofweek、delta、diff、iregexp、last、max、min、nodata、now、sum等 -
parameter:函数参数;大多数数值函数可以接受秒数为其参数,而如果在数值参数之前使用“#”做为前缀,则表示为最近几次的取值,如sum(300)表示300秒内所有取值之和,而sum(#10)则表示最近10次取值之和;
此外,avg、count、last、min和max还支持使用第二个参数,用于完 成时间限定;例如,max(1h,7d)将返回一周之前的最大值;
表达式所支持的运算符及其功能如下图所示:
如何定义一个触发器
我们查看node1中的一个item项
15分钟统计到的数据值
从图中我们可以看到,最大值为7,最小值为3,平均值为5.36,我们实际定义6以上都为非正常的一个状态
下面我们定义一个触发器
生成触发器
查看触发器在graph中是否生效
触发器的依赖关系
我们的触发器彼此之间可能会存在依赖关系的,一旦某一个触发器被触发了,那么依赖这个触发器的其余触发器都不需要再报警。
- 我们可以来试想一下这样的场景:
我们的多台主机是通过交换机的网络连接线来实现被监控的。如果交换机出了故障,我们的主机自然也无法继续被监控,如果此时,我们的所有主机统统报警……想想也是一件很可怕的事情。要解决这样的问题,就是定义触发器之间的依赖关系,当交换机挂掉,只它自己报警就可以了,其余的主机就不需要在报警了。这样,也更易于我们判断真正故障所在。
注意:目前zabbix不能够直接定义主机间的依赖关系,其依赖关系仅能通过触发器来定义。
5).动作(Action)
定义: 我们需要基于一个对应的事件为条件来指明该做什么事,一般就是执行远程命令或者发警报。
我们有一个告警升级的机制,所以,当发现问题的时候,我们一般是先执行一个远程操作命令,如果能够解决问题,就会发一个恢复操作的讯息给接收人,如果问题依然存在,则会执行发警报的操作,一般默认的警报接收人是当前系统中有的zabbix用户,所以当有人需要收到警报操作的话,我们则需要把它加入我们的定义之中。
其次,每一个用户也应该有一个接收告警信息的方式,即媒介,就像我们接收短信是需要有手机号的一样。
我们的每一个监控主机,能够传播告警信息的媒介有很多种,就算我们的每一种大的媒介,能够定义出来的实施媒介也有很多种。而对于一个媒介来说,每一个用户都有一个统一的或者不同的接收告警信息的端点,我们称之为目标地或者目的地。
综上,为了能够发告警信息,第一,我们要事先定义一个媒介,第二,还要定义这个媒介上用户接收消息的
端点。
现有的媒介类型:
Emali媒介里的分类:
定义一个媒介
定义一个动作
node1上安装redis服务,以port端口是否启用来做监控检测
[root@node1 ~]#yum install redis -y
[root@node1 ~]#vim /etc/redis.conf
bind 0.0.0.0 #不做任何认证操作
[root@node1 ~]#systemctl start redis.service
[root@node1 ~]#ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:10050 *:*
LISTEN 0 128 *:6379 *:*
目前检测状态为up,端口检查正常启用中
定义触发器
手动关闭redis服务来检测触发器是否能生效
[root@node1 ~]#systemctl stop redis.service
重新启动redis
说明触发器可以正常工作
我们去定义action
第一步:如果不成功就远程执行重启命令
在agent端修改sudo配置权限并需要开启远程服务
[root@node1 ~]#visudo
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zabbix ALL=(ALL) NOPASSWD:ALL
[root@node1 ~]#vim /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1
LogRemoteCommands=1
第二步:如果上述不成功,则发送消息
第三步: 故障恢复后发送消息
尝试手动停止服务进行测试:
[root@node1 ~]#systemctl stop redis.service
6).图形(Graph)
-
自定义图形中可以集中展示多个时间序列的数据流。支持“线状图(normal)”、“堆叠面积图(stacked)”、“饼图(pie)” 和“分离型饼图(exploded)”四种不同形式的图形。
7).趋势图形(screen)
7).模板
-
每一个主机的监控项很多,我们一个个的添加实在很麻烦,我们可以把一个redis的监控项添加进一个模板里,这样更方便于我们以后的添加。
使用node2监控主机导入现有的模板
8).宏(macro)
- 宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式,而解释器或编译器在遇到宏时会自动进行这一模式替换。
- zabbix有许多内置的宏,如{HOST.NAME}、{HOST.IP}、{TRIGGER.DESCRIPTION}、{TRIGGER.NAME}、{TRIGGER.EVENTS.ACK}等。
- 宏一共有三种级别,分别是全局宏、模板宏、主机宏
- 全局宏也可以作用于所有的模板宏和主机宏,优先级最低。
- 模板宏则可以作用于所有使用该模板的主机,优先级排在中间。
- 主机宏则只对单个主机有效,优先级最高。
- 宏的类型分为系统内建的宏和用户自定义的宏。
- 内建: {MACRO_NAME}
- 自定义: {$MACRO_NAME}
定义一个宏
(三)、zabbix三种常用的报警方式
1).邮件报警
邮件报警配置有两种方式,一种是web端配置一个可以用的邮箱,一种是通过脚本发送报警邮件
(i).在web端配置一个可以用的外部邮箱,通过这个邮箱来发送报警邮件.
第1步: 添加报警媒介
第2步: 用户配置
管理-用户-Admin
第3步: 创建一个动作
故障发生邮件内容:
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
告警主机IP地址:{HOST.CONN}
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
故障恢复邮件内容:
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
告警主机IP地址:{HOST.CONN}
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
(ii).通过脚本发送报警邮件
1、使用linux系统的用户账号发送,例如zabbix的账号邮箱地址为zabbix@<主机名>.localdomain,很多外部邮箱会将其视为垃圾邮件。
2、配置一个外部邮箱地址,发送报警邮件。
由于linux系统的用户邮箱有可能会被视为垃圾邮件,所以我们这里使用一个外部邮箱发送报警。
第1步: 安装mailx工具,通过此工具来发送邮件
[root@server ~]#yum install mailx -y
第2步: 修改/etc/mail.rc, 添加一个外部的smtp服务器地址、账号密码等
[root@server ~]#cp /etc/mail.rc /etc/mail.rc.bak
[root@server ~]#vim /etc/mail.rc
添加具体的参数
set from=xxxx@126.com
set smtp=smtp.126.com
set smtp-auth-user=xxxx@126.com
set smtp-auth-password=xxxxxxxx
set smtp-auth=login
第3步: 通过命令发送邮件测试
[root@server ~]#echo "hello,test"|mail -s "title" linuxtest0717@163.com
第4步: 编写邮件发送脚本
确认zabbix_server.conf配置文件里以下目录是否已开启,如果没有需要添加下面这行。
AlertScriptsPath=/usr/lib/zabbix/alertscripts
[root@server ~]#vim /usr/lib/zabbix/alertscripts/mail.sh
#!/bin/bash
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mail -s "${subject}" $1 >>/tmp/sendmail.log 2>&1
更改脚本属主并赋予可以执行的权限
[root@server ~]#chown -R zabbix:zabbix /usr/lib/zabbix/alertscripts
[root@server ~]#chown zabbix:zabbix /usr/lib/zabbix/alertscripts/mail.sh
[root@server ~]#chmod +x /usr/lib/zabbix/alertscripts/mail.sh
[root@server ~]#ll /usr/lib/zabbix/alertscripts/mail.sh
-rwxr-xr-x 1 zabbix zabbix 42 Feb 25 18:26 /usr/lib/zabbix/alertscripts/mail.sh
测试脚本是否能够正常发送邮件
[root@server ~]#/usr/lib/zabbix/alertscripts/mail.sh linuxtest0717@163.com testtitle hello,test
第5步: 在zabbix中添加报警媒介
{ALERT.SENDTO} # 用户里定义的收件人地址
{ALERT.SUBJECT} # 邮件标题
{ALERT.MESSAGE} # 邮件内容
第6步: 用户配置
第7步: 创建动作
第8步: 模拟故障进行测试
[root@node1 ~]#systemctl stop redis.service
2、企业微信报警
第1步: 注册企业微信
浏览器打开(https://work.weixin.qq.com/) , 点击企业注册。
保存记录企业ID
第2步: 创建一个报警监控的小程序
保存记录对应的Agentid和Secret
第3步: 创建企业微信部门,把需要监控报警的成员加入其中
第4步: 下载微信发送脚本
[root@server ~]#cd /tmp/
[root@server tmp]#git clone https://github.com/loong576/Wechat-Alert-for-Zabbix.git
[root@server tmp]#cp Wechat-Alert-for-Zabbix/wechat_alert.py /usr/lib/zabbix/alertscripts/
[root@server tmp]#chown zabbix:zabbix /usr/lib/zabbix/alertscripts/wechat_alert.py
[root@server tmp]#chmod +x /usr/lib/zabbix/alertscripts/wechat_alert.py
安装git命令
[root@server ~]#yum install git -y
安装requests模块
[root@server ~]#yum install python-pip -y
[root@server ~]#pip install --upgrade pip
[root@server tmp]#pip install requests
第5步: 修改wechat_alert.py脚本参数
[root@server tmp]#vim /usr/lib/zabbix/alertscripts/wechat_alert.py
if __name__ == '__main__':
#Touser = sys.argv[1]
Toparty = sys.argv[1] #web前端传过来的部门id
Content = sys.argv[2] #web前端传过来的告警内容
Corpid = "xxxxxxxxxxxxx" #企业ID
Secret = "xxxxxxxxxxxxxx"
Agentid = "xxxxxx"
第6步: 创建报警媒介
脚本参数这里只需要添加下面两个参数,收件人和报警内容
{ALERT.SENDTO}
{ALERT.MESSAGE}
第7步: 创建微信群组,用于接收报警
第8步: 创建接收微信报警的用户,并加入刚建立的微信群组中
第9步: 创建报警动作active
故障发生邮件内容:
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
告警主机IP地址:{HOST.CONN}
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
故障恢复邮件内容:
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
告警主机IP地址:{HOST.CONN}
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
第10步: 报警测试
[root@node1 ~]#systemctl stop redis.service
[root@node1 ~]#systemctl restart redis
3、短信报警
短信报警借助于第三方平台,我们需要指定短信发送服务器,这里我们以中国网建SMS短信通为例,其官网地址如下:
http://sms.webchinese.com.cn/api.shtml](http://sms.webchinese.com.cn/api.shtml
第1步: 创建短信的发送脚本
[root@server ~]#vim /usr/lib/zabbix/alertscripts/sendSMS.sh
#!/bin/bash
# 脚本的日志文件
LOGFILE="/tmp/SMS.log"
:>"$LOGFILE"
exec 1>"$LOGFILE"
exec 2>&1
MOBILE_NUMBER=$1 # 手机号码
MESSAGE_UTF8=$3 # 短信内容
XXD="/usr/bin/xxd"
CURL="/usr/bin/curl"
TIMEOUT=5
# 短信内容要经过URL编码处理
MESSAGE_ENCODE=$(echo "$MESSAGE_UTF8" | ${XXD} -ps | sed 's/\(..\)/%\1/g' | tr -d '\n')
# Uid和Key的值需要自行修改,http://www.smschinese.cn/api.shtml
# Uid 网站用户名
# Key 接口秘钥
Uid="#############"
Key="#############" #接口秘钥可以在网站中查询到
# SMS API
URL="http://utf8.sms.webchinese.cn/?Uid=${Uid}&Key=${Key}&smsMob=${MOBILE_NUMBER}&smsText=${MESSAGE_ENCODE}"
# Send it
set -x
${CURL} -s --connect-timeout ${TIMEOUT} "${URL}"
第2步: 设置对应脚本的权限
[root@server ~]#touch /tmp/SMS.log
[root@server ~]#chown zabbix:zabbix /tmp/SMS.log
[root@server ~]#chown zabbix:zabbix /usr/lib/zabbix/alertscripts/sendSMS.sh
[root@server ~]#chmod +x /usr/lib/zabbix/alertscripts/sendSMS.sh
第3步: 查询接口秘钥
第4步: 测试短信发送是否正常
[root@server ~]#/usr/lib/zabbix/alertscripts/sendSMS.sh 185xxxxxxxx "" "尊敬的客户,您的订单已出库发货,正在配送中,请您耐心等待"
第5步: 创建报警媒介
第6步: 给用户添加报警媒介
第7步: 创建报警动作
第8步: 测试短信发送