zabbix很受欢迎的缘由之一是:可以自定义监控项目,以前咱们看到的不少的监控项目都是在模板里面提现的,可是当咱们须要一些个性化的监控项目,好比某一个业务的监控数据 需求:监控某台web的80端口链接数,并出图 两步:1)zabbix监控中心建立监控项目;2)针对该监控项目以图形展示python
#!/bin/bash ##获取80端口并发链接数,也就是查看80端口中处于ESTABLISHED状态的连接有多少个,通常正常的也不会超过100 netstat -ant |grep ':80 ' |grep -c ESTABLISHED
# chmod 755 /usr/local/sbin/estab.sh
# vim /etc/zabbix/zabbix_agentd.conf
在配置文件中修改如下参数的值,linux
#表示使用自定义脚本,至关于开关,若是等于0,他就没办法使用脚本 UnsafeUserParameters=1
还要在配置文件中找到UserParameter参数,并设置自定义监控项下面的键值key为my.estab.count,后面的[]里面写脚本的参数,通常脚本是带有参数的,若是没有参数则能够写成,脚本为/usr/local/sbin/estab.sh,git
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh
以下图的key
web
# systemctl restart zabbix-agent
[root@lijie-01 ~]# zabbix_get -s 192.168.75.134 -p 10050 -k 'my.estab.count' 0 [root@lijie-01 ~]#
AlertScriptsPath=/usr/lib/zabbix/alertscripts
这行代码的含义是告警脚本的路径为/usr/lib/zabbix/alertscripts,这说明zabbix的告警脚本都应该放到这个路径下面vim
# vim /usr/lib/zabbix/alertscripts/mail.py //内容参考https://coding.net/u/aminglinux/p/aminglinux-book/git/tree/master/D22Z?public=true
在上述路径中有两个mail相关的python脚本,都须要将gserver改成使用的邮箱的域名服务器,第一种,浏览器
#!/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' 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('1234567@qq.com','aaaaaaaaaa','1234567@qq.com',to,subject,content) if __name__ == "__main__": main() #####脚本使用说明###### #1. 首先定义好脚本中的邮箱帐号和密码 #2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容"
第二种bash
#!/usr/bin/python #coding:utf-8 import smtplib from email.mime.text import MIMEText import sys mail_host = 'smtp.163.com' mail_user = 'abcdefg@xx.com' mail_pass = '1111111' mail_postfix = '163.com' def send_mail(to_list,subject,content): me = "zabbix 监控告警平台"+"<"+mail_user+"@"+mail_postfix+">" msg = MIMEText(content, 'plain', 'utf-8') msg['Subject'] = subject msg['From'] = me msg['to'] = to_list try: s = smtplib.SMTP() s.connect(mail_host) s.login(mail_user,mail_pass) s.sendmail(me,to_list,msg.as_string()) s.close() return True except Exception,e: print str(e) return False if __name__ == "__main__": send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
# chmod 755 /usr/lib/zabbix/alertscripts/mail.py
而后咱们来测试下是否能成功发送邮件,若是发送成功则不会有任何提示服务器
[root@lijie-01 alertscripts]# python mail.py ******@qq.com "title" "content"
我使用qq邮箱发送邮件测试了好几回都没有成功,而后我更换使用163邮箱来给个人qq邮箱发送邮件OK网络
HOST:{HOST.NAME} {HOST.IP} TIME:{EVENT.DATE} {EVENT.TIME} LEVEL:{TRIGGER.SEVERITY} NAME:{TRIGGER.NAME} messages:{ITEM.NAME}:{ITEM.VALUE} ID:{EVENT.ID}
填写的内容以下图,其中条件能够不用设置,条件A表示的是发生的事件处于非确认状态时来发送邮件
并发
HOST:{HOST.NAME} {HOST.IP} TIME:{EVENT.DATE} {EVENT.TIME} LEVEL:{TRIGGER.SEVERITY} NAME:{TRIGGER.NAME} messages:{ITEM.NAME}:{ITEM.VALUE} ID:{EVENT.ID}
其余填写的信息以下:
上面操做完成后再点击页面底部的添加按钮,便可添加成功,成功后以下图