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. C#中Base64之编码,解码方法

    原文:C#中Base64之编码,解码方法 1.base64  to  string string strPath =  "aHR0cDovLzIwMy44MS4yOS40Njo1NTU3L1 ...

  2. FOJ 1607 Greedy division 数学题

    题目地址: http://acm.fzu.edu.cn/problem.php?pid=1607 给定一个n,将n平均分成m份,问有几种方法,每种方法中找出最大的数.思路:就是求n的因子数.先将每个数 ...

  3. 【从零学习openCV】opecv操作像素

    1. 存取像素值 在opencv中能够直接对cv::Mat类型的图像调用at函数读取或赋值某个像素,我们用个简单的案例来说明: //在一张图像上增加椒盐噪声,image为输入图像.n为噪点个数 voi ...

  4. 【Python】Python 基础知识

    数字和表达式 >>> 2+3 5 >>> 1.0/2.0 0.5 >>> 1.0//2.0 # // 0.0 >>> 1%2 # ...

  5. 用Python实现QQ找茬游戏外挂工具

    源地址:http://cpiz.net/blog/2012/03/a_qq_zhaocha_assistant_by_python/ (原创作品,转载请注明出处)好久没写技术相关的博文,这次写篇有意思 ...

  6. JSF之经常使用注解

    @ManagedBean 以托管 bean 的形式注冊一个类实例.然后将其放入到使用当中一个 @...Scoped 凝视指定的范围内.假设没有指定不论什么范围.JSF 将把此 bean 放入请求范围. ...

  7. 深刻:截获windows的消息并分析实例(DefWindowProc),以WM_NCHITTEST举例(Windows下每一个鼠标消息都是由 WM_NCHITTEST 消息产生的,这个消息的参数包含了鼠标位置的信息)

    1,回调函数工作机制 回调函数由操作系统自动调用,回调函数的返回值当然也是返回给操作系统了. 2,截获操作系统发出的消息,截获到后,将另外一个消息返回给操作系统,已达到欺骗操作系统的目的. 下面还是以 ...

  8. Java按钮设计

    package com.han; import javafx.application.Application; import javafx.geometry.Insets; import javafx ...

  9. 用C语言写解释器(一)——我们的目标

    声明 为提高教学质量,我所在的学院正在筹划编写C语言教材.<用C语言写解释器>系列文章经整理后将收入书中"综合实验"一章.因此该系列的文章主要阅读对象定为刚学完C语言的 ...

  10. 新闻专栏~ART让Android更流畅

    潘鹏在CSDN上原创,如其它站点转载请注意排版和写明出处: ART.Android新的内存垃圾回收机制 ART的优点:代码加载速度加快----编译次数降低 Android的卡顿是由于内存垃圾回收机制. ...