




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】nagios监控haproxy插件--用shell自定义nagios插件
最近用shell写了个监控haproxy状态的脚本,记录一下以备后用。1、首先明确需求。我们需要什么功能,常规方式是怎么实现的,使用脚本又该怎么实现。只需要监控5个状态:当前连接数Sessionrate下的Cur;错误状态Errors下的三种状态Req,Conn,Resp;服务状态Status。状态页面如图:那么如何用脚本的形式把这些展示出来呢?重要的是,如何让nagios能够获取到这些数据?这就是接下来需要做的事情。获取这些数据有两种方法:其一,通过wget或者curl来访问状态页面,然后筛选数据;其二,通过sock来获取状态,然后筛选。我先采用第二种方式来获取数据。从sock获取数据,需要安装socat这个软件,具体使用省略。echo"showstat"|socat/var/lib/haproxy/statsstdio
#/var/lib/haproxy/stats是haproxy路径可以看到以csv格式的状态pxname,svname,qcur,qmax,scur,smax,slim,stot,bin,bout,dreq,dresp,ereq,econ,eresp,wretr,wredis,status,weight,act,bck,chkfail,chkdown,lastchg,downtime,qlimit,pid,iid,sid,throttle,lbtot,tracked,type,rate,rate_lim,rate_max,check_status,check_code,check_duration,hrsp_1xx,hrsp_2xx,hrsp_3xx,hrsp_4xx,hrsp_5xx,hrsp_other,hanafail,req_rate,req_rate_max,req_tot,cli_abrt,srv_abrt,
admin_status,FRONTEND,,,1,1,20480,31,12757,354568,0,0,0,,,,,OPEN,,,,,,,,,1,1,0,,,,0,1,0,10,,,,0,29,1,0,0,0,,1,10,31,,,
admin_status,BACKEND,0,0,0,0,20480,0,12757,354568,0,0,,0,0,0,0,UP,0,0,0,,0,773,0,,1,1,0,,0,,1,0,,0,,,,0,0,0,0,0,0,,,,,0,0,
http_80_in,FRONTEND,,,0,1,20480,4,348,848,0,0,0,,,,,OPEN,,,,,,,,,1,2,0,,,,0,0,0,1,,,,0,0,0,0,4,0,,0,1,4,,,
web,web1,0,0,0,0,,0,0,0,,0,,0,0,0,0,UP,1,1,0,0,0,773,0,,1,3,1,,0,,2,0,,0,L7OK,200,0,0,0,0,0,0,0,0,,,,0,0,
web,web2,0,0,0,0,,0,0,0,,0,,0,0,0,0,DOWN,2,1,0,0,1,771,771,,1,3,2,,0,,2,0,,0,L4TOUT,,1502,0,0,0,0,0,0,0,,,,0,0,
web,BACKEND,0,0,0,0,0,0,0,0,0,0,,0,0,0,0,UP,1,1,0,,0,773,0,,1,3,0,,0,,1,0,,0,,,,0,0,0,0,0,0,,,,,0,0,需要的数据:当起连接数rate在第34域;err相关的ereq、econ、eresp在第13、14、15域;状态status在第18域。用awk筛选数据:rate=`echo"showstat"|socat/var/lib/haproxy/statsstdio|awk-F,'$2=="web1"{print$34}'`
ereq=`echo"showstat"|socat/var/lib/haproxy/statsstdio|awk-F,'$2=="web1"{print$34}'`
econ=`echo"showstat"|socat/var/lib/haproxy/statsstdio|awk-F,'$2=="web1"{print$34}'`
eresp=`echo"showstat"|socat/var/lib/haproxy/statsstdio|awk-F,'$2=="web1"{print$34}'`
status=`echo"showstat"|socat/var/lib/haproxy/statsstdio|awk-F,'$2=="web1"{print$34}'`数据现在已经可以获取了,接下来就要让nagios能够接受到数据。2、了解插件规范。nagios的插件规范有两点:(1)、需要一个返回值来确定状态(2)、在报警处输出定义的说明,默认大小4K,见红框位置:了解了编写规范,现在就开始写脚本。3、脚本实例#########################################################################
#FileName:check_haproxy.sh
#Author:jc
#CreatedTime:2014年03月01日星期六14时36分23秒
#########################################################################
#!/bin/bash
#定义返回状态
ST_OK=0
ST_WR=1
ST_CR=2
ST_UK=3
#sock的默认路径
sock_path=/var/lib/haproxy/stats
#默认检查sock是否存在
#sock_check=1
#帮助信息函数
print_help(){
echo"--sock|-s)"
echo"haproxy的sock路径,默认路径:/var/lib/haproxy/stats"
echo"-m/--mode)"
echo"haproxy的状态项,目前只支持:rate,ereq,econ,eresp,status"
#echo"-n/--no-check-sock)"
#echo"检查sock存在与否,1检查,0不检查"
exit$ST_UK
}
#获取输入的选项
whiletest-n"$1";do
case"$1"in
-help|-h)
print_help
exit$ST_UK
;;
--sock|-s)
sock=$2
shift
;;
--mode|-m)
mode=$2
shift
;;
--no-sock-check|-n)
sock_check=0
;;
--hostname|-H)
hostname=$2
shift
;;
--warning|-w)
warning=$2
shift
;;
--critical|-c)
critical=$2
shift
;;
*)
echo"Unknownargument:$1"
print_help
exit$ST_UK
;;
esac
shift
done
#sock检测
#check_sock(){
#echo"showstat"|socat/var/lib/haproxy/statsstdio>/tmp/hap_sta.txt
#if[-s"/tmp/hap_sta.txt"]
#then
#con=1
#else
#con=2
#fi
#}
#获取数据
get_val(){
case$modein
rate)
val=`echo"showstat"|socat$sock_pathstdio|awk-F,'$2=="web1"{print$34}'`
;;
ereq)
val=`echo"showstat"|socat$sock_pathstdio|awk-F,'$2=="web1"{print$13}'`
if[-z$val]
then
val=0
fi
;;
econ)
val=`echo"showstat"|socat$sock_pathstdio|awk-F,'$2=="web1"{print$14}'`
;;
eresp)
val=`echo"showstat"|socat$sock_pathstdio|awk-F,'$2=="web1"{print$15}'`
;;
status)
val=`echo"showstat"|socat$sock_pathstdio|awk-F,'$2=="web1"{print$18}'`
;;
*)
echo"暂时不能检测此项,请重新输入"
;;
esac
}
#显示的文字信息
out_pr(){
output="haproxyisrunning.$mode'skeyis$val"
}
#开始执行
##检查sock是否能够连上
#if[$sock_check=1]
#then
#check_sock
#if["$con"=2]
#then
#echo"ERR!!连接haproxy被拒绝,请确认服务已经开启,或者检查sock路径/权限是否正确!"
#exit$ST_CR
#fi
#fi
get_val
out_pr
#get_stat(){
if["$val"-ge"$warning"]&&["$val"-lt"$critical"]
then
echo"WARNING-$output"
exit$ST_WR
elif["$val"-ge"$critical"]
then
echo"CRITICAL-$output"
exit$ST_CR
else
echo"OK-$output"
exit$ST_OK
fi脚本完成,先在命令行测试:[root@webtest-250libexec]#/opt/nagios/libexec/check_haproxy.sh-mrate-w10-c20
OK-haproxyisrunning.rate'skeyis0注意,以下两步相当重要,如果不给nagios用户添加权限,在页面会看不到值,如(1)、更改/etc/sudoers,把nagios启动用户添加进去nagiosALL=(ALL)NOPASSWD:/usr/local/nagios/libexec/check_hap.sh(2)、更改/etc/sudoers把这一行注释,否则在后台运行sudo会报错#Defaultsrequiretty现在切换到nagios的用户执行就正确了。4、添加插件至nagios(1)、修改commands.cfg,添加##haproxy
definecommand{
command_namecheck_haproxy
command_line/opt/nagios/libexec/check_haproxy.sh-s$ARG1$-m$ARG2$-w$ARG3$-C$ARG4$
}(2)、修改服务配置文件,我是在本机监控故只改localhost.cfg,添加以下监控##haproxycheck
defineservice{
uselocal-service;Nameofservicetemplatetouse
host_namelocalhost
service_descriptionhaproxy-Session-cur
check_commandcheck_haproxy!/var/lib/haproxy/stats!rate!10!20
notifications_enabled0
}
defineservice{
uselocal-service;Nameofservicetemplatetouse
host_namelocalhost
service_descriptionhaproxy-Errors-req
check_commandcheck_haproxy!/var/lib/haproxy/stats!ereq!3!5
notifications_enabled0
}
defineservice{
uselocal-service;Nameofservicetemplatetouse
host_namelocalhost
service_descriptionhaproxy-Errors-con
check_commandcheck_haproxy!/var/lib/haproxy/stats!econ!3!5
notifications_enabled0
}
defineservice{
uselocal-service;Nameofservicetemplatetouse
host_namelocalhost
service_descriptionhaproxy-Errors-resp
check_commandcheck_haproxy!/var/lib/haproxy/stats!eresp!3!5
notifications_enabled0
}(3)、添加进nrpe.cfg,这些报警阈值是为了方便测试设得比较小,根据实际应用更改command[check_haproxy]=/usr/bin/sudo/opt/nagios/libexec/check_haproxy.sh-s/var/lib/haproxy/stats-mrate--warning10--critical20
command[check_haproxy]=/usr/bin/sudo/opt/nagios/libexec/check_haproxy.sh-s/var/lib/haproxy/stats-mereq--warning3--critical5
command[check_haproxy]=/usr/bin/sudo/opt/nagios/libexec/check_haproxy.sh-s/var/lib/haproxy/stats-mecon--warning3--critical5
command[check_haproxy]=/usr/bin/sudo/opt/nagios/libexec/check_haproxy.sh-s/var/lib/haproxy/stats-meresp--warning3--critical5重启nagios服务,登陆web界面,已经可以看到监控项了:现在来测试下是否能够正常报警,使用siege测试:./bin/siege-c50-n50-t3050/stat.php,等几分钟看界面,已经有报警了:完毕附:通过curl访问haproxy状态页面来获取数据脚本:#########################################################################
#FileName:check_haproxy-url.sh
#Author:jc
#CreatedTime:2014年03月01日星期六17时27分03秒
#########################################################################
#!/bin/bash
ST_OK=0
ST_WR=1
ST_CR=2
ST_UK=3
url_check=1
print_help(){
echo"--url|-u)"
echo"haproxy监控页面的链接"
echo"-m/--mode)"
echo"haproxy的状态项,如:rate,ereq,econ,eresp,status"
echo"-n/--no-url-check|)"
echo"是否检查haproxy的url:1检测(默认),0不检查"
exit$ST_UK
}
whiletest-n"$1";do
case"$1"in
-help|-h)
print_help
exit$ST_UK
;;
--mode|-m)
mode=$2
shift
;;
--no-url-check|-n)
url_check=0
;;
--url|-u)
hap_url=$2
shift
;;
--warning|-w)
warning=$2
shift
;;
--critical|-c)
critical=$2
shift
;;
*)
echo"Unknownargument:$1"
print_help
exit$ST_UK
;;
esac
shift
done
#check_url(){
#curl-o/tmp/stats.csv$url>/dev/null2>&1
#if[-sstats.csv]
#then
#con=1
#else
#con=2
#fi
#}
curl-o/tmp/stats.csv$hap_url>/dev/null2>&1
ch_val(){
if[-z$val]
then
val=0
else
val=$val
fi
}
get_val(){
case$modein
rate)
val=`cat/tmp/stats.csv|grepweb1|awk-F'<trclass=''{print$3}'|awk-F'</td><td>''{print$5}'`
ch_val
;;
ereq)
val=`cat/tmp/stats.csv|grepweb1|awk-F'<trclass=''{print$3}'|awk-F'</td><td>''{print$16}'`
ch_val
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《跨境电商英语》课件- on going an inquiry
- 2025年汽车车身、挂车项目建议书
- 2022年北京市初三一模历史试题汇编:隋唐时期-繁荣与开放的时代
- 2025至2030年中国自动烹饪锅数据监测研究报告
- 速冻食品企业数字化转型与智慧升级战略研究报告
- 农、林、牧、渔产品批发企业ESG实践与创新战略研究报告
- 铁路信号管理服务企业ESG实践与创新战略研究报告
- 棋牌室合伙人二零二五年度财务管理合作协议
- 农林牧渔生产性服务企业县域市场拓展与下沉战略研究报告
- 宠物食品批发企业ESG实践与创新战略研究报告
- SYT 6680-2021 石油天然气钻采设备 钻机和修井机出厂验收规范-PDF解密
- 华为供应链管理岗位笔试题目含笔试技巧
- 2024年常州机电职业技术学院单招职业适应性测试题库及答案解析
- 任务4 聚酯缩聚生产操作-生产操作规程
- 湖南天壹名校联盟2024年高二3月大联考数学试题+答案
- 铁路少年-练习及答案
- 2024年人教版小学语文六年级下册第二单元测试卷(含答案解析)【可编辑打印】
- 统编版八年级语文下册 24 唐诗三首练习题 (含答案)
- 混凝土抗压强度统计评定表(自动计算-数理-非数理)
- 公司清洁生产的审核报告书
- 货运车辆交通安全讲座教案
评论
0/150
提交评论