我的服务器是阿里云里的服务器,由于服务器有限,因此以下操作都是在一台服务器上进行的,也就是我自己监控我自己,不过无伤大雅,微信报警机器人还是会报警的。下面你准备好了麻,要开始辣~
监控环境准备
部署zabbix-server【监控端】
部署zabbix-agent【被监控端】
实现对web服务器监控【监控端】
zabbix 企业微信报警【监控端】
一.监控环境准备
1.1在你的服务器上添加安全组,HTTP端口号80、zabbix-server端口号10051、zabbix-agent端口号10050
zabbix-server和zabbix-agent的安全组规则类似
二.部署zabbix-server【监控端】
2.1 安装zabbix-server
[root@bcf ~]# rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm (先下载rpm包)
[root@bcf ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent httpd mariadb mariadb-server
2.2 启动mariadb
[root@bcf ~]# systemctl restart mariadb
[root@bcf ~]# systemctl enable mariadb // 设置开机自启
2.3 准备数据库及授权
[root@bcf ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.64-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> Ctrl-C -- exit!
Aborted
2.4 导入数据库文件
[root@bcf ~]# zcat /usr/share/doc/zabbix-server-mysql-3.4.15/create.sql.gz | mysql -uzabbix -pzabbix zabbix
2.5 修改zabbix配置文件
[root@bcf ~]# vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
注意删除前面的空格
2.6 启动zabbix-server
[root@bcf ~]# systemctl restart zabbix-server zabbix-agent
[root@bcf ~]# systemctl enable zabbix-server zabbix-agent
2.7 修改Apache配置文件,修改时区
[root@bcf ~]# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
2.8 启动Apache服务
[root@bcf ~]# systemctl restart httpd
[root@bcf ~]# systemctl enable httpd
2.9 访问IP
打开浏览器选用公网ip的方式访问: http://101.37.30.108/zabbix
安装成功之后,用户名为:Admin 密码为:zabbix
三、部署zabbix-agent【被监控端】
由于我们只有一台云主机,我们就拿同一台云主机作为被监控端
3.1 zabbix-agent配置
[root@bcf ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=101.37.30.108 //zabbix-server IP 即监控端的IP
ServerActive=101.37.30.108 //zabbix-server IP 即监控端的IP
3.2 启动zabbix-agent
[root@bcf ~]# systemctl restart zabbix-agent
[root@bcf ~]# systemctl enable zabbix-agent
四、 实现对web服务器监控【监控端】
4.1 添加【主机组】
4.2 添加主机
暂不点击添加按钮
4.3 关联http模板
下一步一定要点击,添加,否则不生效
上步做完,再点击添加
4.4 查看或测试触发器效果(如果是2台服务器的话可以将被监控端的http服务down,然后在触发器里面可以看到效果,但是我们目前就一个服务器,如果把它down掉的话,也不能访问这个IP了,所以就不测试了)
测试之前先将主机web1的触发器的更新间隔改为3或5s
五、 zabbix 微信报警【监控端】
5.1 下载企业微信【手机】,创建企业
5.2 企业登录后台【pc】
这里注意可见范围一定要有一个企业,否则可能报警失败,下面需要用记事本保存一些有用的信息
应用:报警机器人
AgentID 1000004
Secret Ke3oLYC_svLJdBK3OX6qlATpZGYZY5hsN6FuYioDhYU
企业CorpID ww39ce87f07c13a896
部门id 1
5.4 python报警监控脚本
需要修改脚本中的四个信息:
self.__corpid = 'ww39ce87f07c13a896' //公司的corpid
self.__secret = 'Ke3oLYC_svLJdBK3OX6qlATpZGYZY5hsN6FuYioDhYU' //应用的secret
'toparty':1, //部门id
'agentid':"1000004", //应用id
没有这个脚本的在/usr/lib/zabbix/alertscripts/的目录下创建一个wechat.py文件,并给文件加上执行权限
[root@bcf ~]# cd /usr/lib/zabbix/alertscripts/
[root@bcf alertscripts]# ls
wechat.py
[root@bcf alertscripts]# chmod +x wechat.py
[root@bcf alertscripts]# vim 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 = 'ww39ce87f07c13a896'
self.__secret = 'Ke3oLYC_svLJdBK3OX6qlATpZGYZY5hsN6FuYioDhYU'
# 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':"1000004",
'text':{
'content':message
},
'safe':"0"
},ensure_ascii=False)
response = self.postData(data)
print responseif __name__ == '__main__':
a = WeChat('https://qyapi.weixin.qq.com/cgi-bin')
a.sendMessage(sys.argv[1],sys.argv[3])
监控脚本测试:
注:i为上图的企业微信名 test为标题 2为内容,标题和内容均可自定义
[root@bcf alertscripts]# ./wechat.py i test 2
结果是{u'invaliduser': u'', u'errcode': 0, u'errmsg': u'ok'}说明测试成功
5.6 zabbix 创建告警媒介
注:(以哪种方式发送报警信息,短信,脚本等等)
5.7 zabbix 添加告警用户
创建用户组:web-group,包含yangge、alice...等用户
创建用户:yangge、alice...等用户,并关联到微信告警
希望的结果是:发微信到组web-group,组中的用户yangge、alice都能收到
设置用户组web-group对主机群组bcf-webserver拥有读写(发送消息)权限
5.8 Zabbix 添加告别警动作
如果希望中文显示:
告警主机: {HOST.NAME}
告警地址: {HOST.IP}
监控项目: {ITEM.NAME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警时间: {EVENT.DATE} {EVENT.TIME}
5.9 测试微信报警
被监控端操作
[root@bcf ~]# systemctl stop httpd
发现手机企业微信上发来以下短信
以上就是这个项目的全部内容辣,这个项目是千峰的石老师教我们的,还是叫飞哥亲切,这4天的实训中,非常感谢飞哥的付出,每次都会很认真的给我们每个人解决我们出现的问题,嘿嘿,飞哥辛苦辣~~,希望以后有缘江湖再见咯~