19.12 添加自定义监控项目
19.13/19.14 配置邮件告警
19.15 测试告警
19.16 不发邮件的问题处理
19.12 添加自定义监控项目
zabbix的监控项目是在模板里面体现,但是有时候就会有些个性化的需求:某一个业务的数据,例如:运营人员想知道网站会员注册量,会员活跃度;实际上,这些数据,都可以通过数据库里面的表的数字来体现,但是zabbix模板是不可能提供那么相信的监控项目;遇到这种情况,就需要通过编程工具,写成脚本,最后通过zabbix监控项目,形成图表,就可以实现;
自定义的监控项目
需求:监控某台web的80端口连接数,并出图
解决方案:
zabbix监控中心创建监控项目;
针对该监控项目以图形展现
对于第一步,需要到客户端定义脚本
vim /usr/local/sbin/estab.sh //内容如下
[root@aming-02 ~]# vim /usr/local/sbin/estab.sh
#!/bin/bash
##获取80端口并发连接数netstat -ant |grep ':80 ' |grep -c ESTABLISHED
~
:wq
配置一个能够让zabbix用户执行的权限,最终是zabbix用户去执行这个脚本,如果不给zabbix用户执行权限,最终得不到结果
[root@aming-02 ~]# vim /usr/local/sbin/estab.sh[root@aming-02 ~]# chmod 755 /usr/local/sbin/estab.sh[root@aming-02 ~]#
客户端上编辑配置文件 vim /etc/zabbix/zabbix_agentd.conf //增加
UnsafeUserParameters=1 //表示使用自定义脚本,它就好比一个开关,如果等于0就没有办法去使用自定义的脚本
UserParameter=my.estab.count[],/usr/local/sbin/estab.sh //自定义监控项的key为my.estab.count,后面的[]里面写脚本的参数,如果没有参数则可以省略,脚本为/usr/local/sbin/estab.sh
my.estab.count 这个是zabbix监控项里的一键值
# Mandatory: no# Range: 0-1# Default:# UnsafeUserParameters=0UnsafeUserParameters=1### Option: UserParameter-- 插入 -- # Mandatory: no# Default:# UserParameter=UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh####### LOADABLE MODULES #######[root@aming-02 ~]# vim /etc/zabbix/zabbix_agentd.conf[root@aming-02 ~]#
重启zabbix-agent服务 systemctl restart zabbix-agent
[root@aming-02 ~]# systemctl restart zabbix-agent[root@aming-02 ~]#
下面来验证一下,自定义的脚本有没有识别
首先到服务端验证,执行命令
zabbix_get -s 192.168.133.130 -p 10050 -k 'my.estab.count' // -p端口,-k 键值 web 管理页
[root@aming-01 ~]# zabbix_get -s 192.168.202.132 -p 10050 -k 'my.estab.count'0[root@aming-01 ~]#
下面去 zabbix监控中心(浏览器)配置增加监控项目(并发链接数) 配置�C>主机�C>监控项->创建监控项
添加完之后还要做一个图形,因为这是我们的需求
给他做一个触发器
19.13 配置邮件告警(上)
使用163发告警邮件
首先登录你的163邮箱,设置开启POP3、IMAP、SMTP服务
设置授权码,授权码为cc293016
开启并记录授权码(需要牢记)
然后到监控中心设置邮件告警
“管理”,“报警媒介类型”,“创建媒体类型” {ALERT.SENDTO}收件人,{ALERT.SUBJECT}主题,{ALERT.MESSAGE}邮件内容 //这三个东西分布在py脚本参数下
接下来去定义mail.py脚本了, 定义脚本报警 在配置文件定义 在服务端上定义
vim /etc/zabbix/zabbix_server.conf,搜索Alert,找到 AlertScriptsPath=/usr/lib/zabbix/alertscripts //这就是报警脚本所在路径
[root@aming-01 ~]# vim /etc/zabbix/zabbix_server.conf### Option: UnreachableDelay## Mandatory: no# Range: 1-3600# Default:# UnreachableDelay=15### Option: AlertScriptsPath# Full path to location of custom alert scripts.# Default depends on compilation options.## Mandatory: no# Default:# AlertScriptsPath=${datadir}/zabbix/alertscriptsAlertScriptsPath=/usr/lib/zabbix/alertscripts### Option: ExternalScripts# Full path to location of external scripts.# Default depends on compilation options.## Mandatory: no# Default:# ExternalScripts=${datadir}/zabbix/externalscriptsExternalScripts=/usr/lib/zabbix/externalscripts### Option: FpingLocation[root@aming-01 ~]# vim /etc/zabbix/zabbix_server.conf[root@aming-01 ~]#
打开目录里面看下,是空的,所以我们进来目录,创建一个mail.py
[root@aming-01 ~]# ls /usr/lib/zabbix/alertscripts[root@aming-01 ~]# [root@aming-01 ~]# cd /usr/lib/zabbix/alertscripts[root@aming-01 alertscripts]# [root@aming-01 alertscripts]# vi mail.py[root@aming-01 alertscripts]# vim mail.py#!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfrom email.MIMEText import MIMETextfrom email.MIMEMultipart import MIMEMultipartfrom subprocess import * 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" % errdef main(): to=sys.argv[1] subject=sys.argv[2] content=sys.argv[3]##定义QQ邮箱的账号和密码,你需要修改成你自己的账号和密码(请不要把真实的用户名和密码放到网上公开,否则你会死的很惨) sendqqmail('aming_test2017@163.com','cc293016','aming_test2017@163.com',to,subject,content)if __name__ == "__main__"::wq
一定要记得 需要改下权限 mail.py
[root@aming-01 alertscripts]# vim mail.py[root@aming-01 alertscripts]# chmod 755 mail.py[root@aming-01 alertscripts]#
测试mail.py是否能发邮件
[root@aming-01 alertscripts]# chmod 755 mail.py[root@aming-01 alertscripts]# python mail.py aming_test2017@163.com "This is the first test mail" "121212121212"[root@aming-01 alertscripts]#
已经收到了,时间也差不多
[root@aming-01 alertscripts]# date2017年 11月 18日 星期六 22:32:58 CST[root@aming-01 alertscripts]#
19.14 配置邮件告警(下)
创建一个接受告警邮件的用户,“管理”,“用户”,“创建用户”
1,2,3 都是为了容易分辨填写的,按习惯就好
4,选择群组,归属于那个群组,这个涉及到之后的权限是否能发送邮件
5,密码,用于,登录,接收,发送邮件 (密码是aming)
6,登录系统时,默认显示的界面
下面创建一个用户,这个用户是用来接收邮件的,得给指定邮箱,没有人,发给谁?
添加完了之后,忘记给它设置邮箱
再来看看权限
只能去用去组里面去改权限
注意,这个地方如果设置不对的话,最终报警也是收不到的,邮件收不到
再来看看这个用户的权限
这里发现报警媒介没有添加
继续添加报警媒介
用户配置完了,还有一个地方需要配置,就是动作
创建动作
设置动作,“配置”,“动作”,“创建动作”,名称写“sendmail”(自定义),“操作”页面,内容如下:
1、“维护状态 非在 维护” // 维护状态机器不进行发邮件
2、“触发器示警度”>=未分类 // 即任何情况都进行发邮件
修改发邮件的模板
HOST:{HOST.NAME} {HOST.IP} //主机,IPTIME:{EVENT.DATE} {EVENT.TIME} //时间LEVEL:{TRIGGER.SEVERITY} //示警度NAME:{TRIGGER.NAME} //那个触发器messages:{ITEM.NAME}:{ITEM.VALUE} //状态ID:{EVENT.ID} //时间ID
“操作”,选择发送的用户为刚创建的用户,仅送到选择“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}
咱们报警的准备的工作已经做好了,剩下的就是要验证一下,到底设置的报警有没有生效
19.15 测试告警
下面来做实验 ,手动调节触发器,以实现报警,发邮件
检查到上一节的aming用户没有设置报警媒介,给设置好
自定义配置一个触发器,
查看邮箱
已经告警了,说明成功了,那现在我们把它改好
刷新浏览器 发现没有问题了
19.16 不发邮件的问题处理
因为虚拟机,可能存在一些bug,第一次配置的时候,经常会出现zabbix发现问题,做了邮件告警,但是邮箱却没有收到邮件的问题;重新恢复快照以后再做一次,就又能正常发送邮件,接收邮件了 配置邮件告警总结
1、到163邮箱开启SMTP服务,并记录授权码,没有开启,脚本里面就没有写的密码
2、设置邮件告警 首先设置一个报警媒介;三个参数必须填写正确,顺序也不能错误
3、编辑邮件告警脚本 /usr/lib/zabbix/alertscripts
路径不能错误,必须在这个路径下,添加一个脚本,创建好之后,记得给脚本755权限
4、配置用户 配置用户之前,把用户群组的权限改一下,让组有一个读写权限 用户加到指定的群组里 报警媒介,添加自己的邮箱,自己给自己发,这个成功率会比较高
5、配置动作 操作修改默认信息(发送邮件的格式),操作需要添加一个“新的”给谁发邮件;恢复操作同样
6、测试一下告警是否能成功发送邮件 人为创建一个触发器,设置一个系统最低运行都会触发报警的触发器 也可以在客户端上断开连接(停止客户端的zabbix服务) PS: 客户端主动模式和被动模式,在监控项里,选择一个监控项打开,选择类型是客户端主动,客户端;客户端主动即为主动模式,客户端为被动模式