一、配置自定义监控项目:python
zabbix的监控项目是在模板里配置体现的,有时候会有一些个性化的需求,某一个业务的数据,有一些运营想知道网站的注册量,会员活跃度,这些数据是能够经过数据库的表的数字体现出来的,可是zabbix是不提供那么详细的监控项目的,遇到这种状况,就须要经过写脚本把数字展示出来,经过一个监控项目来造成图表,而后来分析每一天的用户量是多少呢:linux
需求:监控某台web的80端口链接数,并出图:git
解决方法:两步:web
1)、zabbix监控中心建立监控项目:数据库
2)、针对该监控项目以图形体现:vim
首先须要在客户端(zabbix客户端)添加一个脚本: #获取80端口的并发链接数:浏览器
[root@localhost_01 ~]# vim /usr/local/sbin/estab.sh #!/bin/bash netstat -ant |grep ':80 ' |grep -c ESTABLISHED
更改能让zabbix用户执行的权限:赋予脚本执行权限:bash
[root@localhost_01 ~]# chmod 755 /usr/local/sbin/estab.sh
编写zabbix客户端的配置: /etc/zabbix/zabbix-agentd.conf 定义脚本功能和脚本的位置:并发
[root@localhost_01 ~]# vim /etc/zabbix/zabbix_agentd.conf [root@localhost_01 ~]# cat !$ |grep -v ^# |grep -v ^$ UnsafeUserParameters=1 #容许使用自定义脚本:开启脚本功能: UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh #表示自定义监控项的key为my.estab.count(后面须要在web页面设置时key值要用到),后面的[*]里面写脚本的参数,若是没有参数则能够省略,若是有参数写入到 [ ] 里面,用逗号分隔,脚本为/usr/local/sbin/estab.sh
重启zabbix客户端服务: systemctl restart zabbix-agent测试
[root@localhost_01 ~]# systemctl restart zabbix-agent
1:接下来到zabbix服务端验证:验证是否识别到这个脚本: 注意:脚本须要执行权限和防火墙须要放行的端口:
zabbix_get -s 192.168.149.130 -p 10050 -k 'my.estab.count'
[root@localhost_02 ~]# zabbix_get -s 192.168.149.130 -p 10050 -k 'my.estab.count' 0
注释: -s:指定客户端IP地址: -p:指定端口号(不见p,默认是10050) -k:表示键值:
注释:下面须要在服务端监控中心操做:
而后在zabbix监控中心(web浏览器)配置:
zabbix页面 -----> 配置 ---> 主机 ---> 监控项 ---> 建立监控项:
名称:并发链接数(可自定义):
类型:选择zabbix客户端:
键值:填写my.estab.count(可自定义):
单位:保持默认:
历史数据保留时长(单位天):默认保持90天:
趋势数据存储周期(单位天):图形化界面下那个图:
应用集:能够不选择,由于没有应用集:
2:有了数据下面就能够添加图形了: 配置 -----> 主机 -----> 图形 -----> 建立图形
名称:并发链接数,而后是添加监控项,选择并发链接数:点击添加:
查看新建立的图形:点击并发链接数 -----> 点击预览:
点击预览:能够查看的建立的图形:
注释:网站访问量很大,那么每隔30秒就能够看到一个数字,时间长了,就可查看到网站访问量的趋势:
3:建立触发器: 点击 触发器 -----> 建立触发器 -----> 名称(并发链接数) -----> 当 报警达200以上,作警告级别:
触发器里关联监控项:
注释:服务端上获取数值(经过在客户端编写的脚本实现),给予服务端访问脚本的权限,在zabbix监控中心添加对应的监控项目(输入键值),便可,其他就是建立图形等:
二、配置邮件告警:
使用163或者qq邮箱发告警邮件:
首先登录163邮箱,设置并开启pop3 IMAP SMTP服务:
开启并记录受权码:
添加报警媒介:
而后到监控中心设置邮件告警: 管理 -----> 报警媒介类型 -----> 建立媒介类型:
添加以下:{ALERT.SENDTO} ,{ALERT.SUBJECT},{ALERT.MESSAGE}
注释如上: 手机人: 邮件主题 邮件内容
建立报警脚本mail.py: /usr/lib/zabbix/alertscripts/mail.py:脚本内容:
赋予脚本权限:chmod 755 /usr/lib/zabbix/alertscripts/mail.py #很重要,可能会由于权限而没法收取邮件:
[root@localhost_02 ~]# vim /usr/lib/zabbix/alertscripts/mail.py [root@localhost_02 ~]# cat !$ cat /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 = MIMEText(content,'plan','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] 定义163的帐号和受权密码,你须要修改为你本身的帐号和受权码(请不要把真实的用户名和密码放到网上公开,不然你会死的很惨) sendqqmail('yzhm188@163.com','受权码','yzhm188@163.com',to,subject,content) if __name__ == "__main__": main() #####脚本使用说明###### #1. 首先定义好脚本中的邮箱帐号和密码 #2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容" [root@localhost_02 ~]# chmod 755 /usr/lib/zabbix/alertscripts/mail.py
测试后,能够正常收到邮件的:
注释:如果在邮件里面写中文,到邮箱里面会显示乱码,这是由于在zabbix使用的是utf-8的字符集,而在邮箱里使用的是GBK字符集,因此会乱码
3:建立一个接受告警邮件的用户(用户是用来接受邮件的):用户组能够如今建立,也能够用以前的用户组:
zabbix页面 -----> 用户 -----> 建立用户:
注释:本次使用的以前的用户组: zabbix administartors管理员组:设置密码:nihao123!
3:在刚刚建立的用户设置邮箱, 管理 -----> 用户 -----> 报警媒介 -----> 添加:
5:还须要注意用户的权限,若是没有权限,邮件仍是没法发送的,到用户组去修改(管理 -----> 用户群组)
默认权限是无:须要去修改群组,给予权限:(用户 -----> 用户群组)
6:修改用户群组权限:用户 -----> 用户群组 -----> 权限: 选择读写:
7:设置动做:(配置好了触发器后,触发以后须要作什么), 配置 -----> 动做 -----> 建立动做
名称:中英文均可以,自定义:
条件:维护状态 非在维护 表示维护状态的机器不发邮件:
新的触发条件:添加:当触发器示警度(也就是信息,警告,通常严重...)大于等于未分类(未分类 表示 全部状态,都会发信息)
8:配置 -----> 动做 -----> 操做: 表示发给谁呀:何时发:
默认信息:直接删除原有的,拷贝下面的内容:
维护间暂停操做:选择打勾(若不打对勾也能够,由于在动做的条件里定义了):
默认信息定义当发生报警时,zabbix会向你的邮箱发送什么内容:
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
9:配置 -----> 动做 -----> 恢复操做:
默认信息:删除原有的信息,负责下面的信息: 二者是相同的:
HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE} {EVENT.TIME}
LEVEL:{TRIGGER.SEVERITY}
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}
10:最后的动做哪里的状态是已启用:
11:测试告警:建立触发器来实现告警:
配置 -----> 主机 -----> 触发器 -----> 建立触发器:
名称:系统负载: 严重性:警告: 表达式内容以下:
11:看到信息以下:回到仪表盘页面,等待一下子便可:
注释:查看邮箱,会看到告警邮件已发送,这表示邮件告警测试成功了:
注释:想要解决这个问题,只要将触发器 系统负载条件数值调整 >1 便可,再来查看监控中心,就会发现问题消失了,而且会给邮箱发送 OK 的邮件:
3:不发邮件状况处理: