文章目录
-
- 一、部署server端和agent端
-
- 1、实验准备
- 2、部署zabbix-server【监控端】
-
- (1)安装zabbix-server
- (2)启动mariadb
- (3)准备数据库及授权
- (4)导入数据库文件
- (5)修改zabbix配置文件
- (6)启动zabbix-server
- (7)修改Apache配置文件,修改时区
- (8)启动Apache服务
- 3、部署zabbix-agent【被监控端】
-
- (1)安装zabbix-agent
- (2)zabbix-agent配置
- (3)启动zabbix-agent
- (4)准备网站测试环境(redis)
- 4、 实现对web服务器监控【监控端】
-
- (1)定义监控项
- (2)定义触发器
- (3)定义动作(action)
- 二、邮件报警
-
- 1、配置需要的邮件信息
- 2、zabbix监控端配置
- 3、web网页配置(脚本)
-
- (1)添加报警媒介
- (2)添加用户
- (3)创建动作
- (4)测试
- 3、另一种方式:web网页配置(电子邮件)
- 二、钉钉报警
- 三、微信报警
-
- 1、python报警监控脚本
- 2、zabbix 创建告警媒介
- 3、zabbix 添加告警用户
-
-
-
- 5.8 Zabbix 添加报警动作
- 5.9 测试微信报警
-
-
一、部署server端和agent端
1、实验准备
centos7.4 系统服务器2台、 一台作为监控服务器, 一台作为被监控节点, 配置好yum源、 防火墙关闭、 各节点时钟服务同步、 各节点之间可以通过主机名互相通信。
1)所有机器关闭防火墙和selinux
setenforing 0 (修改配置文件关闭)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl stop firewalld.service
2)根据架构图,实验基本设置如下:
机器名称 | IP配置 | 服务角色 | 备注 |
---|---|---|---|
server | 192.168.246.228 | zabbix-server | 开启监控功能 |
node1 | 192.168.246.226 | zabbix-agent-none1 | 开启 |
2、部署zabbix-server【监控端】
(1)安装zabbix-server
(2)启动mariadb
[[email protected] ~]# systemctl restart mariadb
[[email protected] ~]# systemctl enable mariadb
(3)准备数据库及授权
[[email protected] ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.56-MariaDB MariaDB Server
Copyright (c) 2000, 2017, 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 [email protected] 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)]> \q
Bye
(4)导入数据库文件
[[email protected] ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -pzabbix zabbix
(5)修改zabbix配置文件
[[email protected] ~]# vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
注意删除前面的空格
(6)启动zabbix-server
[[email protected] ~]# systemctl restart zabbix-server zabbix-agent //重启zabbix服务和agent
[[email protected] ~]# systemctl enable zabbix-server zabbix-agent //设置为开机自启动
(7)修改Apache配置文件,修改时区
[[email protected] ~]# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
(8)启动Apache服务
[[email protected] ~]# systemctl restart httpd
[[email protected] ~]# systemctl enable httpd
3、部署zabbix-agent【被监控端】
(1)安装zabbix-agent
[[email protected] ~]# rpm -i http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
[[email protected] ~]# yum -y install zabbix-agent
(2)zabbix-agent配置
[[email protected] ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=47.75.81.162 //zabbix-server IP 即监控端的IP
ServerActive=47.75.81.162 //zabbix-server IP 即监控端的IP
UnsafeUserParameters=1 是否限制用户自定义 keys 使用特殊字符 1是可以启用特殊字符 0是不可以启用特殊字符
EnableRemoteCommands=0 是否允许别人执行远程操作命令,默认是禁用的,打开的话会有安全风险.
(3)启动zabbix-agent
[[email protected] ~]# systemctl start zabbix-agent
[[email protected] ~]# systemctl enable zabbix-agent
(4)准备网站测试环境(redis)
如果已经在前安装redis,则不需要操作
首先,我们在agent端使用yum安装一下
redis
:
[[email protected] ~]# yum -y install epel-release
[[email protected] ~]# yum install -y redis
修改一下配置文件:
[[email protected] ~]# vim /etc/redis.conf
bind 0.0.0.0 #不做任何认证操作
修改完成以后,我们启动服务,并检查端口:
[[email protected] ~]# systemctl start redis
[[email protected] ~]# netstat -lntp | grep redis
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 1353/redis-server 0
4、 实现对web服务器监控【监控端】
接着,我们就可以去网站上来定义相关的操作了
(1)定义监控项
进入 配置 —> 主机 —> node1 —> 监控项(items)—> 创建监控项

填写完毕以后,我们点击下方的添加。
该监控项已成功添加。
我们可以去查看一下他的值:
检测中 —> 最新数据
(2)定义触发器
定义好了监控项以后,我们亦可来定义一个触发器,当服务有问题的时候,我们才能及时知道:
进入 配置 —> 主机 —> none1 —> 触发器(trigger)—> 创建触发器
填写完毕以后,我们点击下方的添加。
该触发器已成功添加。
我们去查看一下:
监测中 —> 最新数据
我们来手动关闭redis服务来检测一下:
进入 监测中 —> 问题
可以看到,现在已经显示的是问题了。并且有持续的时间,当我们的服务被打开,会转为已解决状态:
(3)定义动作(action)
现在我们就可以去定义action了。
进入 配置 —> 动作 —> 创建动作(注意选择事件源为触发器)
我们可以进行操作添加:
我们可以看出,还需要在虚拟机上进行两项操作,一是修改sudo配置文件使zabbix用户能够临时拥有管理员权限;二是修改zabbix配置文件使其允许接收远程命令。我们进行如下操作:
[[email protected] ~]# visudo #相当于“vim /etc/sudoers”
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zabbix ALL=(ALL) NOPASSWD:ALL #添加的一行,表示不需要输入密码
[[email protected] ~]# vim /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1 #允许接收远程命令
LogRemoteCommands=1 #把接收的远程命令记入日志
[[email protected] ~]# systemctl restart zabbix-agent.service
我们添加了第一步需要做的事情,也就是重启服务,如果重启不成功怎么办呢?我们就需要来添加第二步:
添加完成以后,我们可以看一下:
操作添加完了,如果服务自动恢复了,我们可以发送消息来提示:
至此,我们的动作设置完毕,可以点击添加了,添加完成会自动跳转至如下页面:
现在我们可以手动停止服务来进行测试:
然后我们来到问题页面来查看,发现确实有问题,并且已经解决: 等一会
也可以去agent端查看端口是否开启:
[[email protected] ~]# systemctl stop redis
[[email protected] ~]# netstat -lntp | grep redis
[[email protected] ~]# netstat -lntp | grep redis
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 1957/redis-server 0
查看邮箱是否成功
[[email protected] ~]# yum -y install mailx
[[email protected] ~]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 1 message 1 unread
>U 1 [email protected] Thu Oct 10 00:51 21/865 "Resolved: redis service down"
邮箱也已经成功
可以看出端口正常开启,我们的动作触发已经完成。
补充:我们也可以使用脚本来发送警报,我们的脚本存放路径在配置文件中可以找到,定义为: AlterScriptsPath=/usr/lib/zabbix/alertscripts
然后我们将这个动作关闭掉为后期的邮件报警做准备。
二、邮件报警
1、配置需要的邮件信息
2、zabbix监控端配置
yum -y install mailx
vim /etc/mail.rc
'//末尾添加'
set from=邮箱
set smtp=smtp.qq.com
set smtp-auth-user=邮箱
set smtp-auth-password=邮箱授权码
set smtp-auth=login
测试下邮件是否可以发送
echo "hello tomorrow" | mail -s "test" 邮箱
编写邮件脚本
cd /usr/lib/zabbix/alertscripts
vim mailx.sh
#!/bin/bash
#send mail
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mailx.log 2>&1
创建日志文件并修改权限并测试
touch /tmp/mailx.log
chown -R zabbix.zabbix /tmp/mailx.log
chmod +x mailx.sh
chown -R zabbix.zabbix /usr/lib/zabbix/
sh mailx.sh 邮箱 zabbix "this is test"
3、web网页配置(脚本)
(1)添加报警媒介
管理 > 报警媒介类型 > 创建媒体类型![]()
Zabbix 邮件报警、钉钉报警、微信报警
名称自定义,后面会用到 类型选择脚本 脚本名称是之前编辑的脚本名称 脚本的三个参数:
{ALERT.SENDTO}
{ ALERT.SUBJECT}
{ALERT.MESSAGE}
![]()
Zabbix 邮件报警、钉钉报警、微信报警
(2)添加用户
管理 > 用户 > 点击Admin > 报警媒介 > 添加
类型选择之前自定义的名称
收件人填自己邮箱
点击添加
点击更新
![]()
Zabbix 邮件报警、钉钉报警、微信报警
(3)创建动作
配置 > 动作 >创建动作 > 删除默认 > 创建动作
添加执行操作
注:也可以自定义消息内容
默认标题 {TRIGGER.STATUS}:{TRIGGER.NAME}
消息内容 告警主机:{HOST.NAME}
告警IP:{HOST.IP}
告警时间:{EVENT.DATE}-{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}-{ITEM.VALUE}
事件ID:{EVENT.ID}
添加恢复操作
除了消息内容的模板,其他和上一步基本一致![]()
Zabbix 邮件报警、钉钉报警、微信报警
默认标题 {TRIGGER.STATUS}:{TRIGGER.NAME}
消息内容 恢复主机:{HOST.NAME}
恢复IP:{HOST.IP}
恢复时间:{EVENT.DATE}-{EVENT.TIME}
恢复等级:{TRIGGER.SEVERITY}
恢复信息:{TRIGGER.NAME}-{ITEM.VALUE}
事件ID:{EVENT.ID}
最后再确认一下操作是不是都添加完成了,如果没完成是不会发送邮件的!!
(4)测试
被监控端停止sshd服务
systemctl stop redis
可以看到邮件已经发送过来了,并且仪表板的问题界面开始闪烁
重新开启服务后同样会有邮件发来
3、另一种方式:web网页配置(电子邮件)
二、钉钉报警
点击机器人的设置,把
webhook
的地址记录下来(很重要)
创建脚本,赋予执行权限
[[email protected] ~]# cd /usr/lib/zabbix/alertscripts
[[email protected] alertscripts]# vim dingding.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Author: sxdswc999
import requests
import json
import sys
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "" #机器人的Webhook地址
def msg(text):
json_text= {
"msgtype": "text",
"text": {
"content": text
},
"at": {
"atMobiles": [
"" #手机号
],
"isAtAll": False
}
}
print requests.post(api_url,json.dumps(json_text),headers=headers).content
if __name__ == '__main__':
text = sys.argv[1]
msg(text)
[[email protected] alertscripts]# chmod +x dingding.py
安装python-pip和requests库
[[email protected] alertscripts]# yum -y install epel-release
[[email protected] alertscripts]# yum -y install python-pip
[[email protected] alertscripts]# pip install requests
测试脚本是否可行
[[email protected] alertscripts]# ./dingding.py 监控报警
{"errcode":0,"errmsg":"ok"}
pc端接收成功:
移动端App接收成功:
在监控页面创建媒介:
将Admin用户关联到此媒介:
收件人填钉钉的
webhook
配置完成
三、微信报警
- 部门ID
Zabbix 邮件报警、钉钉报警、微信报警 - AgentID和Secret
Zabbix 邮件报警、钉钉报警、微信报警 Zabbix 邮件报警、钉钉报警、微信报警 - 企业ID
Zabbix 邮件报警、钉钉报警、微信报警
1、python报警监控脚本
需要修改脚本中的四个信息:
self.__corpid = 'wwd5348195e1cdd809' //公司的corpid
self.__secret = '2QvlfpUxh4k-JeIuxVNmkh2N7ijfkCs1lzb4Tkgr6xQ' //应用的secret
'toparty':1, //部门id
'agentid':"1000002", //应用id
[[email protected] ~]# 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 = 'wwd2385f23ad80ecef'
self.__secret = '3gsEC6Mv3vQmdG5MOJBF65U0KzTl-1v2GKQhr479uso'
# 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':"1000002",
'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')
a.sendMessage(sys.argv[1],sys.argv[3]
监控脚本测试:
注:Youngfit为上图的企业微信名 test为标题 yufei为内容,标题和内容均可自定义
[[email protected] ~]# /usr/lib/zabbix/alertscripts/wechat.py Youngfit test yufei
{u'invaliduser': u'', u'errcode': 0, u'errmsg': u'ok'}
2、zabbix 创建告警媒介
注:(以哪种方式发送报警信息,短信,脚本等等)
3、zabbix 添加告警用户
创建用户组:web-group,包含yangge、alice...等用户
创建用户:yangge、alice...等用户,并关联到微信告警
希望的结果是:发微信到组web-group,组中的用户yangge、alice都能收到
5.8 Zabbix 添加报警动作
如果希望中文显示:
告警主机: {HOST.NAME}
告警地址: {HOST.IP}
监控项目: {ITEM.NAME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警时间: {EVENT.DATE} {EVENT.TIME}
5.9 测试微信报警
被监控端操作
[[email protected] ~]# systemctl stop httpd