Zabbix部署及自动报警到企业微信
实验准备:
准备好自己的企业微信
两台服务器
10.0.0.141 zabbix-server
10.0.0.142 zabbix-agent
其中server端充当监控端,agent充当被监控端
实现当触发器被触发,会报警到企业微信上
实验要求:
- 防火墙、selinux关闭
- 保证网络畅通
- Base、epel仓库可用
- zabbix-server端部署zabbix:
以下为Zabbix-server服务器操作:
注意如果因为网络延迟或某些不可控力,可以在他切换源提示的地址直接wget下来然后安装即可,非常好用具体操作入下:
> wget zabbix的rpm包地址
> yum -y install 下载下来的rpm包
安装过程中,发现少了些配置文件
请rpm -qa | grep zabbix查看一下
少了那些服务没有下
安装仓库:
> rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
安装zabbix-server:
> yum install zabbix-server-mysql zabbix-agent -y
安装zabbix前端:
> yum -y install centos-release-scl
编辑仓库,为下载做准备:
> vim /etc/yum.repos.d/zabbix.repo
[zabbix-frontend]
…
enabled=1
gpgcheck=0
…
安装zabbix前端包:
> yum -y install zabbix-web-mysql-scl zabbix-apache-conf-scl
安装数据库:
> wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
> rpm -ivh mysql80-community-release-el7-6.noarch.rpm
修改数据库版本(非交互式):
> yum -y install yum-utils
> yum-config-manager —disable mysql80-community
> yum-config-manager —enable mysql57-community
安装数据库:
> yum -y install mysql mysql-server
启动数据库:
> systemctl start mysqld
修改弱密码(无需求也可以跳过):
注意先启动在修改
> vim /etc/my.cnf
在末行添加
validate_password = off
保存退出
重启服务使配置生效:
> systemctl restart mysqld
修改初始密码:
首先获取初始密码
> grep ‘password’ /var/log/mysql.log
随后复制下来
> mysqladmin -u root —p’Wmovyfz2&#:y’ password 123
这样密码就修改成功了(修改为了123)
随后登录数据库进行用户和库的创建:
> mysql -u root -p123
创建一个库并指定字符集为utf-8
> create database zabbix character set utf8 collate utf8_bin;
创建授权用户:
如果你没开启弱密码,请使用强密码
注意可登录设备设置的是本机登录
如果mysql和zabbi不在同一服务器,请指定对应ip或%
> grant all on zabbix. to zabbix@’localhost’ identified by ‘123’
> exit
随后进行数据的导入:
> zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -p zabbix
编辑文件/etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf,取消注释并为您设置正确的时区。
php_value[date.timezone] = Asia/Shanghai
接下来为zabbix配置数据库:
> vim /etc/zabbix/zabbix_server.conf
DBPassword=123
保存退出后,启动服务:
> systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
> systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
如果有服务起不来可能是下少了,或者版本问题使用rpm -qa | grep zabbix查看一下
然后到web界面查看 浏览器访问 IP/zabbix 即可
会让你输入数据库的对应信息
如果无法选择mysql只有一个PostgreSQL可以选择
请删除服务器上的对应服务包,并重新下载
> yum -y remove zabbix-web-pgsql-scl-5.0.24-1.el7.noarch
> yum -y install zabbix-web-mysql-scl zabbix-apache-conf-scl
并调整时区后重新启动即可
填写对应的端口数据库名、用户名、密码后进行登录
默认管理员用户为Admin 密码是 zabbix登录后即可来到主页
到此zabbix部署完成,可以开始进行自动报警到企业微信的实验。
随后进行企业微信的创建:
注册一个企业微信:
注册完之后,自己创建一个企业,及企业的部门,并拉取员工到对应的部门中,随便找个人创个号把他拉进去就好。
随后创建一个企业应用:

搜集部门ID企业ID应用ID和秘钥等信息,等会需要修改到脚本内。
创建完应用后,点击创建的应用即可查看应用的详细信息了




部门ID: 1
应用ID: 1000003
Secret: a_OD5wWIZr98Aj4uHMz2dDNrYDOs8XWx3qTxLaHo3Fs
企业ID: wwad389b60e099a36f
注意不要直接复制使用我的应用ID,自己找自己的
随后回到zabbix的服务器进行脚本的创建
Zabbix-server端操作:
> vim /usr/lib/zabbix/alertscripts/wechat.py
#!/usr/bin/env python
# -- coding: utf-8 --
import urllib,urllib2,json
import sys
reload(sys)
sys.setdefaultencoding( “utf-8” )
class WeChat(object):
token_id = ‘’
# init attribute
def init(self,url):
self.url = url.rstrip(‘/‘)
self.corpid = ‘wwad389b60e099a36f’
self.secret = ‘a_OD5wWIZr98Aj4uHMz2dDNrYDOs8XWx3qTxLaHo3Fs’
# Get TokenID
def authID(self):
params = {‘corpid’:self.corpid, ‘corpsecret’:self.secret}
data = urllib.urlencode(params)
content = self.getToken(data)
try:
self.token_id = content[‘access_token’]
# print content[‘access_token’]
except KeyError:
raise KeyError
# Establish a connection
def getToken(self,data,url_prefix=’/‘):
url = self.url + url_prefix + ‘gettoken?’
try:
response = urllib2.Request(url + data)
except KeyError:
raise KeyError
result = urllib2.urlopen(response)
content = json.loads(result.read())
return content
# Get sendmessage url
def postData(self,data,url_prefix=’/‘):
url = self.url + url_prefix + ‘message/send?access_token=%s’ % self.token_id
request = urllib2.Request(url,data)
try:
result = urllib2.urlopen(request)
except urllib2.HTTPError as e:
if hasattr(e,’reason’):
print ‘reason’,e.reason
elif hasattr(e,’code’):
print ‘code’,e.code
return 0
else:
content = json.loads(result.read())
result.close()
return content
# send message
def sendMessage(self,touser,message):
self.authID()
data = json.dumps({
‘touser’:touser,
‘toparty’:1,
‘msgtype’:”text”,
‘agentid’:”1000003”,
‘text’:{
‘content’:message
},
‘safe’:”0”
},ensure_ascii=False)
response = self.postData(data)
print response
if name == ‘main‘:
a = WeChat(‘https://qyapi.weixin.qq.com/cgi-bin‘)
- sendMessage(sys.argv[1],sys.argv[3])
保存退出
注意
self.corpid后面填写的是企业ID
self.secret后面填写的是secret
toparty后面写的是部门ID
agentid后面写的是应用ID

注意填写自己的,不要照着图填
接下来给脚本提权:
Zabbix-server端操作
> chmod 777 /usr/lib/zabbix/alertscripts/wechat.py
> chown zabbix.zabbix /usr/lib/zabbix/alertscripts/wechat.py
接下来进行测试:
> /usr/lib/zabbix/alertscripts/wechat.py ZhengShuo test test
注意ZhengShuo代表着你企业微信中的用户ID
如果出现了以下这种情况
代表着,你的ip不在应用的ip白名单内,我们只需要去添加ip到白名单即可。
再次尝试
如上回显代表成功
去企业微信上查看以下,有没有收到对应内容
接受成功首先先去部署一下zabbix-agent端:
以下是zabbix-agent端的操作:
> yum -y install zabbix-agent nginx
这里下载nginx是为了占用80号端口,模拟web服务器
下载完毕后编辑zabbix-agent的配置文件
> vim /etc/zabbix_agentd.conf
找到Server=……
将后面跟的IP更换为我们zabbix-server端的IP地址
Server=10.0.0.141
保存退出
编辑nginx的发布内容:
> echo “
Love Bai Ge
“tml/index.html启动服务:
> systemc tl start zabbix-agent nginx
注意关闭firewalld以及selinux。
我们接下来就可以去zabbix设置监控项以及自动报警啦。
首先回到zabbix创建一系列的监控内容、触发器、动作等

接着去创建我们的主机即可

随后去创建该主机的监控项:



接下来去为监控项创建一个触发器


插入后点击添加即可
随后去给监控项添加一个图形
点击创建图形
创建完图形后,一个较为完整的监控项就构建结束了
我们接着去创建一个报警媒介:

名称:wechat
类型:脚本
脚本名称:wechat.py
脚本参数:{ALERT.SENDTO}{ALERT.SUBJECT}{ALERT.MESSAGE}
随后在管理员户中添加报警媒介:


随后进行动作的创建:

随后进行操作的定义
添加完毕后可以模拟数据的产生,不过正常更新触发器特别慢,我们可以更改一下获取信息的间隔:

随后模拟事故的发生:
以下是zabbix-agent端操作:
我们监控的是80端口是否正常运作,也就是说,80端口一旦没有工作,zabbix立马就会报警。
> systemctl stop nginx
关闭我们的nginx 80,端口也会对应关闭,保证80 端口不会被占用即可。
等一段时间来到我们的仪表盘查看:

至此自动报警至企业微信就完成了,如果想加入恢复操作,就去动作那里配置。祝成功!
