Nagios+pnp4nagios+rrdtool 安装配置为nagios添加自定义插件(三)
nagios博大精深,可以以shell、perl等语句为nagios写插件,来满足自己监控的需要。本文写mysql中tps、qps的插件,并把收集到的结果以图形形式展现出来,这样输出的结果就有一定的要求了。
编写插件tps qps
check_qps 插件如下内容
#!/bin/sh
mytool="/usr/local/mysql/bin/mysql-umy_perfor -pmy_perfor"
state_ok=0
state_warning=1
state_critical=2
state_unknown=3
Uptime=`echo "show /*50000 global */ status like'uptime'"|$mytool -N`
for i in $Uptime
do
uptime_new=$i
done
$mytool -e "select total_numfrom test.monitor_status where statu_item='Uptime' order by id desc limit1">/home/zhaohp/monitor.txt
sed -i -e '1d'/home/zhaohp/monitor.txt
uptime_old=`cat/home/zhaohp/monitor.txt`
$mytool -e "insert intotest.monitor_status values (0,'Uptime',$uptime_new,now())"
if [ -n "$uptime_old" ]
then
uptime=$[$uptime_new-$uptime_old]
# echo $uptime
fi
# ***********************check_qps*******************************
Question=`echo "show /*50000 global */ status like'Queries'"|$mytool -N`
for i in $Question
do
queries_new=$i
done
$mytool -e "select total_numfrom test.monitor_status where statu_item='Question' order by id desc limit1" >/home/zhaohp/monitor.txt
sed -i -e '1d'/home/zhaohp/monitor.txt
queries_old=`cat/home/zhaohp/monitor.txt`
$mytool -e "insert intotest.monitor_status values (0,'Question',$queries_new,now())"
if [ -n "$uptime_old" ]
then
qps=$((($queries_new-$queries_old)/$uptime))
# echo $queries_new
# echo $queries_old
# echo $uptime
if [ $qps -le 10000 ]; then
echo "qps is ok - qps is $qps |qps=$qps;15000;20000"
exit $state_ok
elif [ $qps -le 15000 ]; then
echo "warning - qps is $qps |qps=$qps;15000;20000"
exit $state_warning
elif [ $qps -le 20000 ]; then
echo " critical - qps is $qps |qps=$qps;15000;20000"
exit $state_critical
else
echo "unkown"
exit $state_unknown
fi
fi
check_tps 插件如下内容
#!/bin/sh
mytool="/usr/local/mysql/bin/mysql-umy_perfor -pmy_perfor"
state_ok=0
state_warning=1
state_critical=2
state_unknown=3
Uptime=`echo "show /*50000 global */ status like'uptime'"|$mytool -N`
for i in $Uptime
do
uptime_new=$i
done
$mytool -e "select total_numfrom test.monitor_tps where statu_item='Uptime' order by id desc limit1">/home/zhaohp/monitor_uptime.txt
sed -i -e '1d'/home/zhaohp/monitor_uptime.txt
uptime_old=`cat/home/zhaohp/monitor_uptime.txt`
$mytool -e "insert intotest.monitor_tps values (0,'Uptime',$uptime_new,now())"
if [ -n "$uptime_old" ]
then
uptime=$[$uptime_new-$uptime_old]
# echo $uptime
fi
# *********************** TPS monitor********************************
commit=`echo "show globalstatus like 'Com_commit'"|$mytool -N`
for i in $commit
do
commit_new=$i
done
rollback=`echo "show globalstatus like 'Com_rollback'"|$mytool -N`
for i in $rollback
do
rollback_new=$i
done
$mytool -e "select total_numfrom test.monitor_tps where statu_item='com_commit' order by id desc limit1" >/home/zhaohp/monitor_commit.txt
sed -i -e '1d'/home/zhaohp/monitor_commit.txt
commit_old=`cat/home/zhaohp/monitor_commit.txt`
# echo "commit_old is$commit_old "
$mytool -e "select total_numfrom test.monitor_tps where statu_item='com_rollback' order by id desc limit1" >/home/zhaohp/monitor_rollback.txt
sed -i -e '1d'/home/zhaohp/monitor_rollback.txt
rollback_old=`cat/home/zhaohp/monitor_rollback.txt`
# echo " rollback is $rollback_old"
$mytool -e "insert intotest.monitor_tps values (0,'com_commit',$commit_new,now())"
$mytool -e "insert intotest.monitor_tps values (0,'com_rollback',$rollback_new,now())"
if [ -n "$uptime_old" ]
then
#tps=$((($commit_new+$rollback_new-$commit_old-$rollback_old)/$uptime))
total_new=$(($commit_new+$rollback_new))
# echo "total_new is $total_new"
total_old=$(($commit_old+$rollback_old))
# echo "total_old is $total_old"
tps=$((($total_new-$total_old)/$uptime))
if [ $tps -le 500 ]; then
echo "tps is ok - tps is$tps | tps=$tps;600;700"
exit $state_ok
elif [ $tps -le 600 ]; then
echo "warning - tps is $tps |tps=$tps;600;700"
exit $state_warning
elif [ $tps -le 700 ]; then
echo " critical - tps is $tps |tps=$tps;600;700"
exit $state_critical
else
echo "unkown"
exit $state_unknown
fi
fi
需要两张表 放在test库
CREATETABLE `monitor_status` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`statu_item` varchar(50) DEFAULT '',
`total_num` bigint(20) DEFAULT '0',
`CreateDate` timestamp NOT NULL DEFAULT'0000-00-00 00:00:00',
PRIMARY KEY (`id`)
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATETABLE `monitor_tps` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`statu_item` varchar(50) DEFAULT '',
`total_num` bigint(20) DEFAULT '0',
`CreateDate` timestamp NOT NULL DEFAULT'0000-00-00 00:00:00',
PRIMARY KEY (`id`)
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
创建用户,创建的用户既用于此脚本又用于check_mysql_health插件
grantselect,update,insert,delete on test.* to 'my_perfor'@'localhost' identified by'my_perfor';
给脚本 check_qps、check_tps 赋权
chmod 755 /usr/local/nagios/libexec/check_qps
chmod 755 /usr/local/nagios/libexec/check_tps
创建存放文件目录
mkdir /home/zhaohp/
改变属主和权限
chown-R nagios.nagios /home/zhaohp/
chmod-R 777 /home/zhaohp/
注意脚本插件输出格式,不然pnp 脚本抓取不到数据
为什么不能出图
FAQ :
、为什么/usr/local/nagios/share/perfdata/目录中生成不出数据
确认是否是权限问题。因为当时装好PNP时太性急了,看到PERFDATA目录没有生成数据就自己手动创建了两个主机名称的目录,(因为RRDTOOL需要过一会才会创建数据),这样导致权限不对,无法生成数据
因为创建这两目录所属用户和组成了root, nagios用户没有权限写入到root权限的目录中。
所以才创建不出数据。
、为什么/usr/local/nagios/share/perfdata目录中还是没有数据生成,
解决方法:安装pnp的时候是否make install-config安装了模板安装了这些模板后进入/usr/local/nagios/etc/pnp目录中去掉后面的扩展。
是否在services.cfg文件中为服务添加了process_perf_data 1
这一项。否则不会生成数据的
我们在做完上面的这些后发现还是没有数据产生,这时你就要等五分到十分钟。因为pnp需要这么久才能产生数据,才能出图。
Nagios+pnp4nagios+rrdtool 安装配置为nagios添加自定义插件(三)的更多相关文章
- Nagios+pnp4nagios+rrdtool 安装配置nagios(一)
基于的软件版本 Apache-2.0.63 php-5.3.2 nagios-3.2.3 nagios-plugins-1.4.15 rrdtool-1.4.5 nrpe-2.12 pnp4na ...
- Nagios+pnp4nagios+rrdtool 安装配置nagios被监控端NRPE配置(二)
NRPE监控插件基础 NRPE总共由两部分组成: (1).check_nrpe插件,运行在监控主机上. (2).NRPE daemon,运行在远程的linux主机上(通常就是被监控机) 整个的监控过程 ...
- centos 邮件服务 腾讯企业邮箱(免费) 使用iRedmail 需要有公网的centos主机 发邮件协议:smtp 端口25 收邮件协议:pop3 端口110 iredmail安装配置 使用邮箱系统 第三十一节课
centos 邮件服务 腾讯企业邮箱(免费) 使用iRedmail 需要有公网的centos主机 发邮件协议:smtp 端口25 收邮件协议:pop3 端口110 iredmail安装配置 ...
- Nagios的基本安装配置
//////////////////////nagios//////////////////////nagios原理:http://www.linuxidc.com/Linux/2013-11/927 ...
- linux下安装配置apache+nagios
1.安装依赖包 yum install -y gcc glibc glibc-common gd gd-devel xinetd openssl-devel 2.创建nagios用户和用户组 # us ...
- 1.Maven+SpringMVC+Eclipse软件安装配置,Maven报插件错误,Eclipse总是卡死的解决办法,导入一个maven工程后 一直显示importing maven project
使用Maven+SpringMVC+Eclipse软件安装配置过程中的问题: 1.Eclipse总是卡死的解决办法: 一:内存不足所以会卡死,配置一下eclipse.ini修改这几个值就好了-X ...
- 安装配置Eclipse Python开发插件PyDev
一.PyDev安装的版本要求 PyDev是支持在Eclipse中进行Python程序开发的插件,Pydev官方的说法是需要安装 java 8 and Eclipse 4.6 (Neon),当然,你也可 ...
- jupyter notebook 安装配置使用,+目录插件安装
1.安装 pip3 install jupyter 2.配置 2.1. 生成一个 notebook 配置文件 jupyter notebook --generate-config /root/.jup ...
- nagios安装配置
http://www.codeweblog.com/nagios%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE/ 上线的服务器有时会被人攻击,导致服务不可用,今天安装配置了 ...
随机推荐
- KMP poj
题目来自:http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2315188.html KMP算法开始是判断字符串b是否是字符串a的子串,朴素的算法是枚举 ...
- (step6.3.3)hdu 1150(Machine Schedule——二分图的最小点覆盖数)
题目大意:第一行输入3个整数n,m,k.分别表示女生数(A机器数),男生数(B机器数),以及它们之间可能的组合(任务数). 在接下来的k行中,每行有3个整数c,a,b.表示任务c可以有机器A的a状态或 ...
- Swift - 继承UIView实现自定义可视化组件(附记分牌样例)
在iOS开发中,如果创建一个自定义的组件通常可以通过继承UIView来实现.下面以一个记分牌组件为例,演示了组件的创建和使用,以及枚举.协议等相关知识的学习. 效果图如下: 组件代码:Score ...
- 利用开源HTML5引擎lufylegend.js结合javascript实现的五子棋人机对弈
前言 本文主要介绍利用开源引擎 lufylegend.js开发基于Html5的游戏--五子棋,主要叙述其详细开发过程. 游戏规则 玩过五子棋的都应该知道五子棋的规则,这里就简单介绍其规则. 1 ...
- HDU 4707 Pet(DFS(深度优先搜索)+BFS(广度优先搜索))
Pet Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...
- Android应用开发学习笔记之ContentProvider
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz ContentProvider用于为其它应用程序提供共享数据,它为不同应用程序间共享数据提供了统一的操作接口. 一. ...
- 搭建实时同步data guard的最高可用-切换主备
搭建实时同步data guard的最高可用-切换主备 首先保证主库在归档模式下:错过N次了 准备二台机器(hostname gw hosts ech0)host-only [root@node1 ~] ...
- PHP JSON_ENCODE 不转义中文汉字的方法
ios程序中不识别读取到的JSON数据中 \u开头的数据. PHP 生成JSON的时候,必须将汉字不转义为 \u开头的UNICODE数据. 网上非常多,可是事实上都是错误的,正确的方法是在json_e ...
- QT操作Excel(通过QAxObject使用了OLE,前提是本地安装了Excel)
新建QT GUI项目,在选择选项中勾选ActiveQT Container. #include <qaxobject.h> QAxObject *obj = new QAxObject(& ...
- 循环获取json对象的属性名
今天做项目遇到一个难题,asp.net 项目,数据库中一个表有八十多个字段,我已经在前台将表转化为了json字符数组,我要在前台循环这八十多个字段,我只能根据属性名来处理,一筹莫展,最终解决,收益颇多 ...