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添加自定义插件(三)的更多相关文章

  1. 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 ...

  2. Nagios+pnp4nagios+rrdtool 安装配置nagios被监控端NRPE配置(二)

    NRPE监控插件基础 NRPE总共由两部分组成: (1).check_nrpe插件,运行在监控主机上. (2).NRPE daemon,运行在远程的linux主机上(通常就是被监控机) 整个的监控过程 ...

  3. centos 邮件服务 腾讯企业邮箱(免费) 使用iRedmail 需要有公网的centos主机 发邮件协议:smtp 端口25 收邮件协议:pop3 端口110 iredmail安装配置 使用邮箱系统 第三十一节课

    centos   邮件服务  腾讯企业邮箱(免费) 使用iRedmail 需要有公网的centos主机 发邮件协议:smtp 端口25  收邮件协议:pop3 端口110  iredmail安装配置 ...

  4. Nagios的基本安装配置

    //////////////////////nagios//////////////////////nagios原理:http://www.linuxidc.com/Linux/2013-11/927 ...

  5. linux下安装配置apache+nagios

    1.安装依赖包 yum install -y gcc glibc glibc-common gd gd-devel xinetd openssl-devel 2.创建nagios用户和用户组 # us ...

  6. 1.Maven+SpringMVC+Eclipse软件安装配置,Maven报插件错误,Eclipse总是卡死的解决办法,导入一个maven工程后 一直显示importing maven project

     使用Maven+SpringMVC+Eclipse软件安装配置过程中的问题: 1.Eclipse总是卡死的解决办法: 一:内存不足所以会卡死,配置一下eclipse.ini修改这几个值就好了-X ...

  7. 安装配置Eclipse Python开发插件PyDev

    一.PyDev安装的版本要求 PyDev是支持在Eclipse中进行Python程序开发的插件,Pydev官方的说法是需要安装 java 8 and Eclipse 4.6 (Neon),当然,你也可 ...

  8. jupyter notebook 安装配置使用,+目录插件安装

    1.安装 pip3 install jupyter 2.配置 2.1. 生成一个 notebook 配置文件 jupyter notebook --generate-config /root/.jup ...

  9. nagios安装配置

     http://www.codeweblog.com/nagios%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE/ 上线的服务器有时会被人攻击,导致服务不可用,今天安装配置了 ...

随机推荐

  1. CentOS6.4 安装Mysql

    虽说,新版的数据包可能会带上一些新特性,但是数据库对我而言,还是稳定版优先.因为新特性不一定我会用到.. 下载安装: yum list | grep mysql 因为是准备搞开发用的,所以只要安装my ...

  2. 实用Shell命令备忘

    开场白:这里简单记录一些常用的bash命令,一则备忘,二来希望可以帮助别人解决一些问题. 1.检测文件是否存在 if [ -f ./foo.txt ] then echo the file exist ...

  3. Swift - 点击输入框外部屏幕关闭虚拟键盘

    我们如果把文本框的Return Key设置成Done,然后在storyboard中将文本框的Did End On Exit事件在代码里进行关联.同时关联代码里调用文本框的resignFirstResp ...

  4. Swift - 类型嵌套(以扑克牌结构体为例)

    类型嵌套,简单来说实在一个类型中包含另外一个类型.我们拿一副扑克来说明. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 //类 ...

  5. ios添加pre和post build action

    再vs中,我们可以很方便的再build前.后执行一些脚本为我们做点什么事情.再ios中怎么搞呢,哪必然是对xcode进行操作了.再google搜索了一把,有说操作Scheme的也有说再直接再targe ...

  6. 斐讯K2 V22.X.X.X 新版固件 刷机教程 (开telnet,安装SSH,adbyby,刷breed,华硕Padavan)

    源:http://www.right.com.cn/forum/thread-191833-1-1.html 属于我的上一个帖子的升级版,基本属于无脑操作,点击恢复就可以自动刷好breed,浏览上传新 ...

  7. 【ASP.NET Web API教程】3.4 HttpClient消息处理器

    原文:[ASP.NET Web API教程]3.4 HttpClient消息处理器 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. 3.4 ...

  8. JSP中两种include的区别

    首先说明这两种都是什么: <%@ include file=”relativeURI”%> 可以叫作静态include(静态包含),是jsp指令中的一种,(JSP指令控制JSP编译器如何去 ...

  9. linux exec和文件描述符妙用技巧(转)

    最近在看<精通unix shell脚本编程>时,看到exec<$1 exec 1>$OUTFILE,一下看的我就蒙了.网上看了大半天,终于搞定,记录如下.对于 Linux 而言 ...

  10. 14.5.7 Storing InnoDB Undo Logs in Separate Tablespaces 存储InnoDB Undo logs 到单独的表空间

    14.5.7 Storing InnoDB Undo Logs in Separate Tablespaces 存储InnoDB Undo logs 到单独的表空间 在MySQL 5.6.3,你可以存 ...