1、配置自定义监控项目:
zabbix的监控项目是在模板里配置体现的,有时候会有一些个性化的需求,某一个业务的数据,有一些运营想知道网站的注册量,会员活跃度,这些数据是可以通过数据库的表的数字体现出来的,但是zabbix是不提供那么详细的监控项目的,遇到这种情况,就需要通过写脚本把数字展现出来,通过一个监控项目来形成图表,然后来分析每一天的用户量是多少呢:
需求:监控某台web的80端口连接数,并出图:
解决方法:两步:
1)、zabbix监控中心创建监控项目:
2)、针对该监控项目以图形体现:
首先需要在客户端(zabbix客户端)添加一个脚本: #获取80端口的并发连接数:
[root@localhost_01 ~]# vim /usr/local/sbin/estab.sh
#!/bin/bash
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
更改能让zabbix用户执行的权限:赋予脚本执行权限:
[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监控中心添加对应的监控项目(输入键值),即可,其余就是创建图形等:
2、配置邮件告警:
使用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:不发邮件情况处理: