本文共 5941 字,大约阅读时间需要 19 分钟。
一、添加自定义监控项目
获取80端口并发连接数的命令:[root@linux-02 ~]# netstat -ant |grep ':80 ' |grep -c ESTABLISHEDweb访问大部分状态都是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脚本内容从这里获取:脚本内容如下:#!/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 *def sendqqmail(username,password,mailfrom,mailto,subject,content):
gserver = 'smtp.163.com'gport = 25try: 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} //自定义的hostnameTIME:{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,脚本内容参考上面,也可以从这里获取:修改里面的,注意自己使用的邮箱,配置文件做对应修改,记得给脚本修改755权限4、配置用户,修改用户组的权限,加入到zabbix administrators的组里面,给这个组修改读写的权限,报警媒介填写自己的邮箱地址5、配置动作,动作操作里面的默认信息记得修改格式6、配置里面主机添加触发器7、配置完成之后等待仪表盘中的变化,会弹出来问题,然后查看163邮箱有没有收到邮件转载于:https://blog.51cto.com/13669226/2140724