运维过程当中,常常会遇到一些个性化的需求,例如要统计网站天天活跃度数据,zabbix提供的模版不可以知足这样的需求,咱们须要自定义编写shell、python脚原本统计,而后把数据交给zabbix收集,再经过zabbix造成图表展示出来。能够经过统计web的80端口链接数实现网站活跃度统计python
一、zabbix-agent机器上编写脚本:web
vim /usr/local/sbin/estab.sh #!/bin/bash ##获取80端口并发链接数 netstat -ant |grep ':80 ' |grep -c ESTABLISHED chmod 755 /usr/local/sbin/estab.sh //修改该脚本的权限为755
二、修改agent配置文件:/etc/zabbix/zabbix_agentd.conf,增长配置行shell
UnsafeUserParameters=1 //表示使用自定义脚本 UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh //自定义监控项的key是my.estab.count,后面的[*]里面写脚本的参数,若是没有参数则能够省略
三、重启zabbix-agentvim
systemctl restart zabbix-agent
四、在server端验证自定义agent是否正常:使用zabbix-getbash
zabbix_get -s 192.168.87.130 -p 10050 -k 'my.estab.count' 0 //由于130服务器上没有80端口被访问,因此结果为0。
五、在zabbix-web界面,建立监控项目、并作图形展示服务器
配置-->主机-->监控项目-->建立监控项:名称、键值:my.estab.count(agent配置定义的) 图形-->名称-->添加监控项-->触发器-->建立-->告警设置-->监控项值大于200时告警。
咱们使用第三方邮箱进行告警邮件的发送,这里使用163邮箱进行配置。并发
一、登陆163邮箱网页版,开启POP3/SMTP/IMAP服务,设置受权码与zabbix进行通讯认证运维
二、建立告警邮件发送的python脚本:/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.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] //定义邮箱的帐号和密码,你须要修改为你本身的帐号和密码 sendqqmail('lgs@163.com','aaaaaaa','lgs@163.com',to,subject,content) if __name__ == "__main__": main()
三、在zabbix-web界面中配置报警媒介:网站
管理-->报警媒介类型-->新建报警媒介类型-->名称为baojing-->脚本名:mail.py-->脚本参数分别为:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}
四、新建告警触发的用户,增长用户群组读写权限
管理-->用户-->新建用户-->用户名-->群组选择Zabbix administrators-->配置zabbix的密码 报警媒介-->类型选择-->新建立的报警媒介类型:baojing-->输入接收告警邮箱帐号-->选择告警严重性等级 管理-->用户群组-->权限-->设置权限:全部组都有读写权限
五、配置告警的动做
一、配置-->动做-->新建动做-->动做-->名称:发送邮件-->条件:维护状态非在维护 二、操做-->修改默认信息: HOST:{HOST.NAME} {HOST.IP} #定义主机名 TIME:{EVENT.DATE} {EVENT.TIME} #定义事件发生时间 LEVEL:{TRIGGER.SEVERITY} #定义示警度 NAME:{TRIGGER.NAME} #定义哪个触发器发出的报警 messages:{ITEM.NAME}:{ITEM.VALUE} #发出告警会出现什么状态码 ID:{EVENT.ID} #发生事件的id 发送的用户-->选择新建的用户-->仅发送到:新建的报警媒介baojing 三、恢复操做-->修改默认信息与操做页同样、发送的用户选择新建的用户、仅发送到新建的报警媒介baojing
六、自定义触发器:选择监控系统负载小于1时产生告警。
一、将触发器的规则设置为监控系统负载小于1,模拟产生问题。 二、切换至zabbix主页,在最近20个问题栏目中进行观察:zabbix监控到问题的产生,触发了告警动做 三、查看邮箱,收到告警邮件:告警ID是20 四、将触发器的规则设置为监控系统负载大于1,模拟问题解决。zabbix系统发送恢复操邮件通知 五、查看邮箱,收到恢复邮件:告警ID也是20
七、若是告警邮件接收不到,咱们经过如下几个方面来排查:
一、单独测试邮件脚本,看看邮件功能是否正常,查看脚本的权限等是否755 二、检查zabbix告警媒介设置 三、用户、媒介、用户组权限等是否正常 四、动做是否配置正常。 五、触发条件规则是否知足。