一、添加自定义监控项目 获取80端口并发连接数的命令: [root@linux-02 ~]# netstat -ant |grep ':80 ' |grep -c ESTABLISHED web访问大部分状态都是TIME_WAIT,而ESTABLISHED很少,如果ESTABLISHED值很大,证明服务器有异常,要么是有×××,要么硬件不够了 [root@linux-02 ~]# netstat -ant |grep ':80 ' |grep ESTAB 可以查看80端口下ESTABLISHED这个状态的连接有多少个,基本上一台正常服务器不会超过100 [root@linux-02 ~]# vim /usr/local/sbin/estab.sh //脚本的路径和名称都可以自定义,写入如下内容 #!/bin/bash ##获取80端口并发连接数 netstat -ant |grep ':80 ' |grep -c ESTABLISHED [root@linux-02 ~]# chmod 755 /usr/local/sbin/estab.sh //记得给脚本755权限 [root@linux-02 ~]# ps aux |grep zabbix 最终是zabbix用户去执行这个脚本 [root@linux-02 ~]# vim /etc/zabbix/zabbix_agentd.conf //客户端编辑配置文件 在# UnsafeUserParameters=0下面一行添加 UnsafeUserParameters=1 ,表示使用自定义脚本 在# UserParameter=下面一行添加 UserParameter=my.estab.count[],/usr/local/sbin/estab.sh ,这个是用来定义自定义的脚本在什么路径下,my.estab.count是监控项里面的键值,[],/usr/local/sbin/estab.sh是固定格式,[]表示没有参数,如果写的脚本里面带参数,把参数写在[]里面,使用逗号分隔,如果没有参数,使用代替 [root@linux-02 ~]# systemctl restart zabbix-agent //重启zabbix-agent服务 首先到服务端验证,执行如下命令 [root@linux-01 ~]# zabbix_get -s 192.168.238.130 -p 10050 -k 'my.estab.count' 还需要注意没有防火墙规则和selinux [root@linux-01 ~]# iptables -nvL [root@linux-01 ~]# getenforce [root@linux-02 ~]# getenforce 在zabbix监控中心(浏览器)配置增加监控项目 在linux-02主机里面选择“监控项”----创建监控项-----名称写:并发连接数-----键值写:my.estab.count(可以自定义),历史数据保留时长要根据自己实际情况填写,趋势数据存储周期时间就是成图像的周期---------添加 添加完成之后,还需要给它添加一个图形,名称:并发连接数--------监控项“添加”-----选中“并发连接数”--------添加,就可以在图形里面查看到图像了 也可以为他添加一个触发器,名称:并发连接数,严重性选择警告,点击表达式右侧的添加 当并发数的值大于200,开始告警 自定义监控项思路: 首先要写一个脚本获取到数据,然后给脚本755权限,使用zabbix_get -s 192.168.238.130 -p 10050 -k 'my.estab.count'命令在服务端获取数值,再到监控中心创建监控项目,创建图形,有需要告警再创建触发器 二、配置邮件告警 这里使用163邮箱发告警邮件 需要在163邮箱里面设置一下,邮箱里面点击“设置”---POP3/SMTP/IMAP----下图两个打对勾 查看客户端授权密码是否已开启,然后到服务端去写一个发邮件的脚本 写脚本前先做监控中心点击“管理”------报警媒介类型-----创建媒介类型-----名称:baojing(指报警媒介类型的名称)-----类型选择“脚本”-------脚本名称:mail.py(自定义)-------基本参数需要填写三个:第一个参数:{ALERT.SENDTO} 是发给谁,接收邮件的邮箱地址;第二个参数:{ALERT.SUBJECT} 是主题;第三个参数:{ALERT.MESSAGE} 是邮件内容-------这三个参数分布在Python脚本的参数里----添加 配置告警 [root@linux-01 ~]# vi /etc/zabbix/zabbix_server.conf //在服务端配置文件中查看脚本路径需要定义到哪里 找到 AlertScriptsPath=/usr/lib/zabbix/alertscripts 这一行,也就是说自定义邮件告警脚本mail.py必须放到/usr/lib/zabbix/alertscripts 这个路径下 [root@linux-01 ~]# ls /usr/lib/zabbix/alertscripts/ //查看它下面是空的 [root@linux-01 ~]# cd /usr/lib/zabbix/alertscripts/ [root@linux-01 alertscripts]# vi mail.py //创建mail.py 脚本内容从这里获取:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/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['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('xxx@163.com','邮箱授权密码','xxx@163.com',to,subject,content)

if name == "main": main()

#####脚本使用说明###### #1. 首先定义好脚本中的邮箱账号和密码 #2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容" 脚本注释: gserver = 'smtp.163.com'是发邮件服务器的域名; sendqqmail('xxx@163.com','邮箱授权密码','xxx@163.com',to,subject,content) 写上自己的邮箱,邮箱客户端授权密码 [root@linux-01 alertscripts]# chmod 755 mail.py //给脚本755权限 [root@linux-01 alertscripts]# python mail.py djnzjhll@163.com "abcdef" "12121212" //测试给自己邮箱发邮件,到163邮箱检查有没有收到测试邮件,收到邮件表示脚本没有问题

创建一个接收邮件告警的用户 点击“管理”----“用户”-----“创建用户”-----别名:aming-----用户名第一部分:aming-------姓氏:li-------群组选择:Zabbix administrators---------密码我这里设置为:zabbix---------语言选择:中文-----添加 这里选择aming用户的报警媒介,类型选择baojing,收件人填写自己邮箱,剩下的保持默认全选 还需要修改aming用户的权限那一项,权限如果是无的话也收不到告警邮件,这个需要到用户组里面去修改Zabbix administrators用户群组的权限,记得选择里面选择所有,权限选择:读写,点击更新 再查看aming用户的权限就有读写权限了 需要配置动作:点击“配置”------“动作”-------创建动作----------名称:sendmail--------条件:维护状态不等于 维护(好多客户机有时会处在一个维护状态,比如重启服务,在重启服务的时间段内,或者在配置服务的时间段内,我不需要告警,如果处于监控状态,属于误报,这个时候需要把它改为维护状态,让它在维护状态不要发邮件了)-----------添加一个新的条件:触发器示警度,> = ,未分类------添加 点击:操作那一项-------修改默认信息:删除原来自带的信息,添加如下内容: HOST:{HOST.NAME} {HOST.IP} //自定义的hostname TIME:{EVENT.DATE} {EVENT.TIME} //发生时间 LEVEL:{TRIGGER.SEVERITY} //上面定义的示警度 NAME:{TRIGGER.NAME} //自定义的key值 messages:{ITEM.NAME}:{ITEM.VALUE} //发生告警出现的状态码 ID:{EVENT.ID} //事件的ID 维护期间暂停操作打对勾 点击“新的”---------发送到用户:aming------仅送到: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} 发到用户选择:aming----------仅发送到:baojing---------默认信息:打对勾--------点击添加 检查下:动作、操作、恢复操作三项没问题点击添加,至此,报警准备工作已经做好,接下来需要验证设置的报警有没有生效

三、测试告警(做实验测试能不能邮件告警) 点击“配置”-------主机---------触发器---------创建触发器(做实验为了让它告警)------名称:系统负载------严重性:警告-------表达式:添加----选择监控项:Processor load(1 min average per core)-------功能:最小的T值<N-----------N:设置为1(当它<1的时候告警)-------插入 其他不用修改,直接点击:添加 检测中-------仪表盘中查看有么有告警,稍等一会,报警有问题 在163邮箱中查看有没有收到邮件,如果邮件编码有乱码,选择编码:UTF-8 这时候我把 配置-----主机-----linux-02的触发器--------系统负载-------表达式中的<1修改为>1-------再去检测中------仪表板查看有没有问题------也可以在问题中查看是不是已经恢复了,问题恢复了查看下有没有发送邮件给163邮箱 上图看到恢复完成之后邮件已经发送出去,回到163邮箱查看下有没有收到系统负载恢复 四、不发邮件的问题处理 不发邮件时先在仪表盘中有出现问题告警时,查看它的动作是空的/失败/已完成,空的有可能是报警脚本权限问题,看下是不是755权限,失败证明邮件没有发出去,需要逐一排查问题,已完成表示发送成功 总结发送告警邮件操作步骤: 1、登录163邮箱设置开启POP3、IMAP、SMTP服务并记录客户端授权密码 2、监控中心设置邮件告警,新增报警媒介,报警名称、类型、脚本名称、脚本参数(移动要写对) 3、在/usr/lib/zabbix/alertscripts/目录下创建并编辑mail.py,脚本内容参考上面,也可以从这里获取:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py 修改里面的,注意自己使用的邮箱,配置文件做对应修改,记得给脚本修改755权限 4、配置用户,修改用户组的权限,加入到zabbix administrators的组里面,给这个组修改读写的权限,报警媒介填写自己的邮箱地址 5、配置动作,动作操作里面的默认信息记得修改格式 6、配置里面主机添加触发器 7、配置完成之后等待仪表盘中的变化,会弹出来问题,然后查看163邮箱有没有收到邮件