• 19.12 添加自定义监控项目

  • 19.13/19.14 配置邮件告警

  • 19.15 测试告警

  • 19.16 不发邮件的问题处理

19.12 添加自定义监控项目

  • zabbix的监控项目是在模板里面体现,但是有时候就会有些个性化的需求:某一个业务的数据,例如:运营人员想知道网站会员注册量,会员活跃度;实际上,这些数据,都可以通过数据库里面的表的数字来体现,但是zabbix模板是不可能提供那么相信的监控项目;遇到这种情况,就需要通过编程工具,写成脚本,最后通过zabbix监控项目,形成图表,就可以实现;

  • 自定义的监控项目

  • 需求:监控某台web的80端口连接数,并出图

  • 解决方案:

  1. zabbix监控中心创建监控项目;

  2. 针对该监控项目以图形展现

  • 对于第一步,需要到客户端定义脚本

  • 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监控中心(浏览器)配置增加监控项目(并发链接数) 配置–>主机–>监控项->创建监控项

  • mark

  • mark

  • mark

  • mark

  • 添加完之后还要做一个图形,因为这是我们的需求

  • mark

  • mark

  • mark

  • mark

  • mark

  • mark

  • 给他做一个触发器

  • mark

  • mark

  • mark

  • mark

  • mark

  • mark

  • mark

19.13 配置邮件告警(上)

  • 使用163发告警邮件

  • 首先登录你的163邮箱,设置开启POP3、IMAP、SMTP服务

  • mark

  • mark

  • mark

  • 设置授权码,授权码为cc293016

  • mark

  • 开启并记录授权码(需要牢记)

  • 然后到监控中心设置邮件告警

  • “管理”,“报警媒介类型”,“创建媒体类型” {ALERT.SENDTO}收件人,{ALERT.SUBJECT}主题,{ALERT.MESSAGE}邮件内容 //这三个东西分布在py脚本参数下

  • mark

  • mark

  • mark

  • mark

  • 接下来去定义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 ~]#
[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,sys
reload(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" % err
def 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]#
  • mark

  • mark

  • 已经收到了,时间也差不多

[root@aming-01 alertscripts]# date2017年 11月 18日 星期六 22:32:58 CST
[root@aming-01 alertscripts]#

19.14 配置邮件告警(下)

  • 创建一个接受告警邮件的用户,“管理”,“用户”,“创建用户”

  • 1,2,3 都是为了容易分辨填写的,按习惯就好

  • 4,选择群组,归属于那个群组,这个涉及到之后的权限是否能发送邮件

  • 5,密码,用于,登录,接收,发送邮件 (密码是aming)

  • 6,登录系统时,默认显示的界面

  • 下面创建一个用户,这个用户是用来接收邮件的,得给指定邮箱,没有人,发给谁?

  • mark

  • mark

  • mark

  • mark

  • mark

  • 添加完了之后,忘记给它设置邮箱

  • mark

  • mark

  • 再来看看权限

  • mark

  • mark

  • 只能去用去组里面去改权限

  • mark

  • mark

  • mark

  • mark

  • mark

  • 注意,这个地方如果设置不对的话,最终报警也是收不到的,邮件收不到

  • 再来看看这个用户的权限

  • mark

  • mark

  • 这里发现报警媒介没有添加

  • mark

  • 继续添加报警媒介

  • mark

  • mark

  • mark

  • 用户配置完了,还有一个地方需要配置,就是动作

  • 创建动作

  • mark

  • 设置动作,“配置”,“动作”,“创建动作”,名称写“sendmail”(自定义),“操作”页面,内容如下:

  • 1、“维护状态 非在 维护” // 维护状态机器不进行发邮件

  • 2、“触发器示警度”>=未分类 // 即任何情况都进行发邮件

  • mark

  • mark

  • mark

  • 修改发邮件的模板

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
  • mark

  • mark

  • mark

  • “操作”,选择发送的用户为刚创建的用户,仅送到选择“baojing”

  • mark

  • mark

  • 再来看恢复操作

  • mark

  • 切换到“恢复操作”,把信息改成如下 (客户端状态恢复了,需要确认已经恢复状态)

  • 修改默认信息,和刚刚操作里面是一样的

HOST:{HOST.NAME} {HOST.IP}TIME:{EVENT.DATE}  {EVENT.TIME}
LEVEL:{TRIGGER.SEVERITY}
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}
  • mark

  • mark

  • mark

  • mark

  • mark

  • 咱们报警的准备的工作已经做好了,剩下的就是要验证一下,到底设置的报警有没有生效

19.15 测试告警

  • 下面来做实验 ,手动调节触发器,以实现报警,发邮件

  • mark

  • 检查到上一节的aming用户没有设置报警媒介,给设置好

  • mark

  • mark

  • mark

  • 自定义配置一个触发器,


  • mark

  • mark

  • mark

  • mark

  • 查看邮箱

  • mark

  • mark

  • 已经告警了,说明成功了,那现在我们把它改好

  • mark

  • mark

  • 刷新浏览器 发现没有问题了

  • mark

  • mark

  • mark

  • mark

19.16 不发邮件的问题处理

  • 因为虚拟机,可能存在一些bug,第一次配置的时候,经常会出现zabbix发现问题,做了邮件告警,但是邮箱却没有收到邮件的问题;重新恢复快照以后再做一次,就又能正常发送邮件,接收邮件了 配置邮件告警总结

  • 1、到163邮箱开启SMTP服务,并记录授权码,没有开启,脚本里面就没有写的密码

  • 2、设置邮件告警 首先设置一个报警媒介;三个参数必须填写正确,顺序也不能错误

  • 3、编辑邮件告警脚本 /usr/lib/zabbix/alertscripts

  • 路径不能错误,必须在这个路径下,添加一个脚本,创建好之后,记得给脚本755权限

  • 4、配置用户 配置用户之前,把用户群组的权限改一下,让组有一个读写权限 用户加到指定的群组里 报警媒介,添加自己的邮箱,自己给自己发,这个成功率会比较高

  • 5、配置动作 操作修改默认信息(发送邮件的格式),操作需要添加一个“新的”给谁发邮件;恢复操作同样

  • 6、测试一下告警是否能成功发送邮件 人为创建一个触发器,设置一个系统最低运行都会触发报警的触发器 也可以在客户端上断开连接(停止客户端的zabbix服务) PS: 客户端主动模式和被动模式,在监控项里,选择一个监控项打开,选择类型是客户端主动,客户端;客户端主动即为主动模式,客户端为被动模式