zabbix的监控项目是在模板里面体现,可是有时会有些个性化的需求。好比:某一个业务的数据,运营人员想知道网站会员注册量,会员活跃度;实际上,这些数据,均可以经过数据库里面的表的数字来体现,可是zabbix模板不可能提供那么详细的监控项目;遇到这种状况,就须要经过编程工具,写成脚本,把数字统计出来,而后经过zabbix监控项目,造成图表,就能够实现分析天天的数据是多少。python
监控客户端web的80端口链接数,并出图linux
第一步:zabbix监控中心建立监控项目web
第二步:针对该监控项目以图形展示数据库
针对第一步,须要在客户端定义脚本,将所需数据统计出来编程
vim /usr/local/sbin/estab.sh #!/bin/bash ##获取80端口并发链接数 netstat -ant |grep ':80 ' |grep -c ESTABLISHED
容许客户端执行这个脚本vim
chmod 755 /usr/local/sbin/estab.sh
vim /etc/zabbix/zabbix_agentd.conf 搜索 /UnsafeUserParameters 将# UnsafeUserParameters=0 改成UnsafeUserParameters=1 #表示使用自定义脚本 搜索 /UserParameter 将# UserParameter= 改成UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh #表示自定义监控项的key为my.estab.count,后面的[*]里面写脚本的参数,若是没有参数则能够省略,若是有参数写入到 [ ] 里面,用逗号分隔,脚本为/usr/local/sbin/estab.sh
my.estab.count 这个是zabbix监控项里的键值,即为自定义脚本在zabbix监控中的名字bash
systemctl restart zabbix-agent.service
[root@linux-5 ~]# zabbix_get -s 192.168.88.10 -p 10050 -k 'my.estab.count' 0
-s 指定客户端的IP地址并发
-p 指定端口,不加-p,默认就是10050端口运维
-k 表示 键值工具
返回了具体数值,与直接执行脚本所得结果一致,说明客户端脚本已生效
完成在客户端的脚本定义后,须要在监控中心建立监控项
在配置-->主机-->lem-02的监控项,点击建立监控项
填写相应信息
在添加监控项后,还须要添加图形,将监控所得数据制成图表,配置-->主机-->图形-->建立图形
完成监控项定义后,如需告警,可为其建立触发器
该触发器表明了当自定义监控项数值大于200,产生警告级别的告警
实验可使用163或者QQ邮箱发告警邮件,首先登陆163或qq邮箱,设置开启POP三、IMAP、SMTP服务,开启并记录受权码
报警脚本所在位置可经过查看zabbix服务的配置文件获得
vim /etc/zabbix/zabbix_server.conf 搜索 /alert AlertScriptsPath=/usr/lib/zabbix/alertscripts #报警脚本所在路径
vim /usr/lib/zabbix/alertscripts/mail.py #!/usr/bin/env python #-*- coding: UTF-8 -*- import os,sys reload(sys) sys.setdefaultencoding('utf8') import getopt import smtplib from email.MIMEText import MIMEText from email.MIMEMultipart import MIMEMultipart from subprocess import * def sendqqmail(username,password,mailfrom,mailto,subject,content): gserver = 'smtp.qq.com' #若是是163邮箱则是smtp.163.com ##定义发邮件类型 gport = 25 try: msg = MIMEText(unicode(content).encode('utf-8')) msg['from'] = mailfrom msg['to'] = mailto msg['Reply-To'] = mailfrom msg['Subject'] = subject smtp = smtplib.SMTP(gserver, gport) smtp.set_debuglevel(0) smtp.ehlo() smtp.login(username,password) smtp.sendmail(mailfrom, mailto, msg.as_string()) smtp.close() except Exception,err: print "Send mail failed. Error: %s" % err def main(): to=sys.argv[1] subject=sys.argv[2] content=sys.argv[3] ##定义QQ邮箱的帐号和密码,你须要修改为你本身的帐号和密码(请不要把真实的用户名和密码放到网上公开,不然会死的很惨) sendqqmail('163或QQ邮箱','受权码','163或QQ邮箱',to,subject,content) if __name__ == "__main__": main() #####脚本使用说明###### #1. 首先定义好脚本中的邮箱帐号和密码 #2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容"
chmod 755 /usr/lib/zabbix/alertscripts/mail.py
python mail.py "收件人邮箱" "标题" "内容"
执行脚本后没有任何提示就表示发邮件成功
这时打开qq邮箱,会看到邮件
若是发送邮件内容为中文,且收到为乱码,这是由于在zabbix使用的是utf-8的字符集,而在邮箱里使用的是GBK字符集,因此会乱码
建立一个接受告警邮件的用户(用于接收邮件),在建立用户的前提是建立一个用户组,用户组可使用已经存在的, 因此这里直接建立用户,管理-->用户-->建立用户
要将管理员与告警邮箱关联起来,才能使运维zabbix平台的运维人员时可以收取告警邮件
管理-->用户-->选择相应用户-->报警媒介
注意用户的权限,若是没有权限,邮件是无法发的,更改权限要到用户组里 (管理-->用户群组)进行修改,默认的权限是无,须要修改群组,给予权限。
配置了触发器,那么触发后zabbix服务应该去作什么,须要为服务配置动做。配置-->动做-->建立动做
维护状态 非在 维护,表示处于维护状态的机器不进行发邮件的动做
触发器示警度(也就是信息,警告,通常严重...)大于等于未分类(未分类 表示 全部状态)时,全部状态均会发送邮件
存在多种条件时,可采用与/或逻辑运算的形式知足触发条件
当发生告警的问题被解决后,能够选择设置恢复操做,予以通知
最后动做的状态是已启用
建立触发器,以实现测试告警的目的
回到监控中心,主页——>最近20个问题
若是提示为启用中,证实发现问题,正在启用告警,显示问完成,就证实已经发送邮件告警;如上图所示,实验成功。
查看邮箱,会看到收到了告警邮件
测试邮件告警成功
这时想要解决这个问题,只要将触发器条件数值调整 >1 便可,再来查看监控中心,就会发现问题消失了,而且会给邮箱发送 OK 的邮件
到163邮箱或QQ邮箱开启SMTP服务,并记录受权码,没有开启,脚本里面就没法去写受权码
首先设置一个报警媒介,三个参数必须填写正确,顺序也不能错误
/usr/lib/zabbix/alertscripts目录下 #路径不能错误,必须在该路径下,添加一个脚本
建立好以后,给脚本755权限,不然zabbix用户是没法调用这个脚本的
客户端主动模式和被动模式,在监控项里,选择一个监控项打开,选择类型是Zabbix客户端或者Zabbix客户端(主动式),Zabbix客户端(主动式)即为主动模式,Zabbix客户端为被动模式
注:触发器不能用中文命名,否则邮件显示乱码