SNMP协议,zabbix使用及邮件短信等通知报警

(一)、描述常见监控系统及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

SNMP协议,zabbix使用及邮件短信等通知报警_第1张图片
zabbix登录

检查依赖关系是否正常


SNMP协议,zabbix使用及邮件短信等通知报警_第2张图片
依赖关系

数据库信息登录设置


SNMP协议,zabbix使用及邮件短信等通知报警_第3张图片
数据库信息

SNMP协议,zabbix使用及邮件短信等通知报警_第4张图片
数据库信息

SNMP协议,zabbix使用及邮件短信等通知报警_第5张图片
检查信息

SNMP协议,zabbix使用及邮件短信等通知报警_第6张图片
配置完成

登录zabbix主页面
默认用户名为: admin 密码为: zabbix


SNMP协议,zabbix使用及邮件短信等通知报警_第7张图片
zabbix登录界面

SNMP协议,zabbix使用及邮件短信等通知报警_第8张图片
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监控页面的相关配置项
SNMP协议,zabbix使用及邮件短信等通知报警_第9张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第10张图片
image.png
2).创建主机以及主机群组

创建自己的主机组


SNMP协议,zabbix使用及邮件短信等通知报警_第11张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第12张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第13张图片
image.png

创建node1主机


SNMP协议,zabbix使用及邮件短信等通知报警_第14张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第15张图片
image.png

同样的方法创建node2主机
SNMP协议,zabbix使用及邮件短信等通知报警_第16张图片
image.png
3).监控项(items)

创建node1的监控项


SNMP协议,zabbix使用及邮件短信等通知报警_第17张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第18张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第19张图片
image.png

在服务器端可以通过命令查看key的取值是否正常,若正常说明上述key值可以正常被取到数据

[root@server ~]#zabbix_get -s 192.168.8.104 -p 10050 -k "net.if.in[ens33]"
8890633

可以看到ZBX选项变绿,说明数据已经取到

SNMP协议,zabbix使用及邮件短信等通知报警_第20张图片
image.png

把node1添加到对应的graph中
SNMP协议,zabbix使用及邮件短信等通知报警_第21张图片
image.png

利用cron功能,添加其他额外的数据图
SNMP协议,zabbix使用及邮件短信等通知报警_第22张图片
image.png

注意:key也要做对应的修改

4).触发器(trigger)

当我们的采集的值定义完了以后,就可以来定义触发器
定义: 界定某特定的item采集到的数据的非合理区间或非合理状态,通常为逻辑表达式

逻辑表达式,阈值,通常用于定义书库的不合理区间; 条件满足时,TRUE, 表示PROBLEM状态, 反之,则OK状态;

  • OK --> PROBLEM
  • Recovery: PROBLEM -->OK

OK(不符合条件):正常状态 --> 较老的zabbix版本,其为FALSE;
PROBLEM(符合条件):非正常状态 --> 较老的zabbix版本,其为TRUE;

  • 一般,我们评定采样数值是否为合理区间的比较稳妥的方法是——根据最后N次的平均值来判定结果;这个最后N次通常有两种定义方式:
    • 最近N分钟所得结果的平均值
    • 最近N次所得结果的平均值

触发器的表达式:

{:.()}
  • 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)将返回一周之前的最大值;
      表达式所支持的运算符及其功能如下图所示:


    SNMP协议,zabbix使用及邮件短信等通知报警_第23张图片
    运算符

如何定义一个触发器
我们查看node1中的一个item项


SNMP协议,zabbix使用及邮件短信等通知报警_第24张图片
image.png

15分钟统计到的数据值
从图中我们可以看到,最大值为7,最小值为3,平均值为5.36,我们实际定义6以上都为非正常的一个状态
下面我们定义一个触发器


SNMP协议,zabbix使用及邮件短信等通知报警_第25张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第26张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第27张图片
image.png

生成触发器
SNMP协议,zabbix使用及邮件短信等通知报警_第28张图片
image.png

查看触发器在graph中是否生效


SNMP协议,zabbix使用及邮件短信等通知报警_第29张图片
image.png

触发器的依赖关系

我们的触发器彼此之间可能会存在依赖关系的,一旦某一个触发器被触发了,那么依赖这个触发器的其余触发器都不需要再报警。

  • 我们可以来试想一下这样的场景:
    我们的多台主机是通过交换机的网络连接线来实现被监控的。如果交换机出了故障,我们的主机自然也无法继续被监控,如果此时,我们的所有主机统统报警……想想也是一件很可怕的事情。要解决这样的问题,就是定义触发器之间的依赖关系,当交换机挂掉,只它自己报警就可以了,其余的主机就不需要在报警了。这样,也更易于我们判断真正故障所在。

注意:目前zabbix不能够直接定义主机间的依赖关系,其依赖关系仅能通过触发器来定义。

SNMP协议,zabbix使用及邮件短信等通知报警_第30张图片
image.png

5).动作(Action)

定义: 我们需要基于一个对应的事件为条件来指明该做什么事,一般就是执行远程命令或者发警报。

  • 我们有一个告警升级的机制,所以,当发现问题的时候,我们一般是先执行一个远程操作命令,如果能够解决问题,就会发一个恢复操作的讯息给接收人,如果问题依然存在,则会执行发警报的操作,一般默认的警报接收人是当前系统中有的zabbix用户,所以当有人需要收到警报操作的话,我们则需要把它加入我们的定义之中。

  • 其次,每一个用户也应该有一个接收告警信息的方式,即媒介,就像我们接收短信是需要有手机号的一样。
    我们的每一个监控主机,能够传播告警信息的媒介有很多种,就算我们的每一种大的媒介,能够定义出来的实施媒介也有很多种。而对于一个媒介来说,每一个用户都有一个统一的或者不同的接收告警信息的端点,我们称之为目标地或者目的地。
    综上,为了能够发告警信息,第一,我们要事先定义一个媒介,第二,还要定义这个媒介上用户接收消息的
    端点。


现有的媒介类型:


SNMP协议,zabbix使用及邮件短信等通知报警_第31张图片
image.png

Emali媒介里的分类:


SNMP协议,zabbix使用及邮件短信等通知报警_第32张图片
image.png

定义一个媒介
SNMP协议,zabbix使用及邮件短信等通知报警_第33张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第34张图片
image.png

定义一个动作
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                                         *:* 
SNMP协议,zabbix使用及邮件短信等通知报警_第35张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第36张图片
image.png

目前检测状态为up,端口检查正常启用中


image.png

定义触发器
SNMP协议,zabbix使用及邮件短信等通知报警_第37张图片
image.png

image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第38张图片
image.png

手动关闭redis服务来检测触发器是否能生效

[root@node1 ~]#systemctl stop redis.service
image.png

image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第39张图片
image.png

重新启动redis


image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第40张图片
image.png

说明触发器可以正常工作

我们去定义action

第一步:如果不成功就远程执行重启命令

SNMP协议,zabbix使用及邮件短信等通知报警_第41张图片
image.png

在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

第二步:如果上述不成功,则发送消息

SNMP协议,zabbix使用及邮件短信等通知报警_第42张图片
image.png

image.png

第三步: 故障恢复后发送消息

SNMP协议,zabbix使用及邮件短信等通知报警_第43张图片
image.png

尝试手动停止服务进行测试:

[root@node1 ~]#systemctl stop redis.service
SNMP协议,zabbix使用及邮件短信等通知报警_第44张图片
image.png

image.png

6).图形(Graph)
  • 自定义图形中可以集中展示多个时间序列的数据流。支持“线状图(normal)”、“堆叠面积图(stacked)”、“饼图(pie)” 和“分离型饼图(exploded)”四种不同形式的图形。


    SNMP协议,zabbix使用及邮件短信等通知报警_第45张图片
    image.png

    SNMP协议,zabbix使用及邮件短信等通知报警_第46张图片
    image.png
7).趋势图形(screen)
SNMP协议,zabbix使用及邮件短信等通知报警_第47张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第48张图片
image.png
7).模板
  • 每一个主机的监控项很多,我们一个个的添加实在很麻烦,我们可以把一个redis的监控项添加进一个模板里,这样更方便于我们以后的添加。


    SNMP协议,zabbix使用及邮件短信等通知报警_第49张图片
    image.png

使用node2监控主机导入现有的模板


SNMP协议,zabbix使用及邮件短信等通知报警_第50张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第51张图片
image.png
8).宏(macro)
  • 宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式,而解释器或编译器在遇到宏时会自动进行这一模式替换。
  • zabbix有许多内置的宏,如{HOST.NAME}、{HOST.IP}、{TRIGGER.DESCRIPTION}、{TRIGGER.NAME}、{TRIGGER.EVENTS.ACK}等。
  • 宏一共有三种级别,分别是全局宏、模板宏、主机宏
    • 全局宏也可以作用于所有的模板宏和主机宏,优先级最低。
    • 模板宏则可以作用于所有使用该模板的主机,优先级排在中间。
    • 主机宏则只对单个主机有效,优先级最高。
  • 宏的类型分为系统内建的宏和用户自定义的宏。
    • 内建: {MACRO_NAME}
    • 自定义: {$MACRO_NAME}

定义一个宏


SNMP协议,zabbix使用及邮件短信等通知报警_第52张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第53张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第54张图片
image.png

image.png

image.png

(三)、zabbix三种常用的报警方式

1).邮件报警

邮件报警配置有两种方式,一种是web端配置一个可以用的邮箱,一种是通过脚本发送报警邮件

(i).在web端配置一个可以用的外部邮箱,通过这个邮箱来发送报警邮件.

第1步: 添加报警媒介


SNMP协议,zabbix使用及邮件短信等通知报警_第55张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第56张图片
image.png

第2步: 用户配置
管理-用户-Admin


SNMP协议,zabbix使用及邮件短信等通知报警_第57张图片
image.png

第3步: 创建一个动作
SNMP协议,zabbix使用及邮件短信等通知报警_第58张图片
image.png

故障发生邮件内容:

故障{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}


SNMP协议,zabbix使用及邮件短信等通知报警_第59张图片
image.png

故障恢复邮件内容:
恢复{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}
SNMP协议,zabbix使用及邮件短信等通知报警_第60张图片
image.png

(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 [email protected]
set smtp=smtp.126.com
set [email protected]
set smtp-auth-password=xxxxxxxx
set smtp-auth=login

第3步: 通过命令发送邮件测试

[root@server ~]#echo "hello,test"|mail -s "title" [email protected]
SNMP协议,zabbix使用及邮件短信等通知报警_第61张图片
测试邮箱

第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 [email protected] testtitle hello,test
SNMP协议,zabbix使用及邮件短信等通知报警_第62张图片
image.png

第5步: 在zabbix中添加报警媒介

{ALERT.SENDTO} # 用户里定义的收件人地址
{ALERT.SUBJECT} # 邮件标题
{ALERT.MESSAGE} # 邮件内容


SNMP协议,zabbix使用及邮件短信等通知报警_第63张图片
image.png

第6步: 用户配置


SNMP协议,zabbix使用及邮件短信等通知报警_第64张图片
image.png

第7步: 创建动作
SNMP协议,zabbix使用及邮件短信等通知报警_第65张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第66张图片
image.png

第8步: 模拟故障进行测试
[root@node1 ~]#systemctl stop redis.service
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第67张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第68张图片
image.png

2、企业微信报警

第1步: 注册企业微信
浏览器打开(https://work.weixin.qq.com/) , 点击企业注册。
保存记录企业ID

SNMP协议,zabbix使用及邮件短信等通知报警_第69张图片
企业ID

第2步: 创建一个报警监控的小程序
SNMP协议,zabbix使用及邮件短信等通知报警_第70张图片
image.png

保存记录对应的Agentid和Secret
SNMP协议,zabbix使用及邮件短信等通知报警_第71张图片
image.png

第3步: 创建企业微信部门,把需要监控报警的成员加入其中
SNMP协议,zabbix使用及邮件短信等通知报警_第72张图片
image.png

第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}


SNMP协议,zabbix使用及邮件短信等通知报警_第73张图片
image.png

第7步: 创建微信群组,用于接收报警


SNMP协议,zabbix使用及邮件短信等通知报警_第74张图片
群组

第8步: 创建接收微信报警的用户,并加入刚建立的微信群组中
SNMP协议,zabbix使用及邮件短信等通知报警_第75张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第76张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第77张图片
image.png

第9步: 创建报警动作active


SNMP协议,zabbix使用及邮件短信等通知报警_第78张图片
image.png

故障发生邮件内容:
故障{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}
SNMP协议,zabbix使用及邮件短信等通知报警_第79张图片
image.png

故障恢复邮件内容:
恢复{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}


SNMP协议,zabbix使用及邮件短信等通知报警_第80张图片
image.png

第10步: 报警测试
[root@node1 ~]#systemctl stop redis.service
[root@node1 ~]#systemctl restart redis
SNMP协议,zabbix使用及邮件短信等通知报警_第81张图片
QQ图片20190225214613.jpg

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步: 查询接口秘钥


SNMP协议,zabbix使用及邮件短信等通知报警_第82张图片
image.png

第4步: 测试短信发送是否正常

[root@server ~]#/usr/lib/zabbix/alertscripts/sendSMS.sh 185xxxxxxxx "" "尊敬的客户,您的订单已出库发货,正在配送中,请您耐心等待"

第5步: 创建报警媒介


SNMP协议,zabbix使用及邮件短信等通知报警_第83张图片
image.png

第6步: 给用户添加报警媒介


SNMP协议,zabbix使用及邮件短信等通知报警_第84张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第85张图片
image.png

第7步: 创建报警动作
SNMP协议,zabbix使用及邮件短信等通知报警_第86张图片
image.png

SNMP协议,zabbix使用及邮件短信等通知报警_第87张图片
image.png

第8步: 测试短信发送

你可能感兴趣的:(SNMP协议,zabbix使用及邮件短信等通知报警)