文档章节

nagios插件check_mysql_qps

jastme
 jastme
发布于 2014/07/04 14:37
字数 412
阅读 520
收藏 2
#!/usr/bin/python
# -*- coding:utf-8 -*-
from optparse import OptionParser
import subprocess,sys
from datetime import datetime
"""
    Nagios plugin to report the mysql QPS
    by jastme
"""

try:
    f=open('/usr/local/nagios/etc/qps.txt')
except IOError:
    f=open('/usr/local/nagios/etc/qps.txt','w')
    print 'wait next check,initialize the date'
finally:	
    f.close()

try:
    f1=open('/usr/local/nagios/etc/time.txt')
except IOError:
    f1=open('/usr/local/nagios/etc/time.txt','w')
    print 'wait next check,initialize the date'
finally:    
    f1.close()

parser = OptionParser(usage="%prog -w <warning threshold> -c <critical threshold> [ -h ]\n\nBefore use the script,please execute 'grant usage on *.* to monitor@'127.0.0.1' identified by 'monitor';\nflush privileges",version="%prog ")

parser.add_option("-w", "--warning",action="store", type="string", dest="warn_threshold", help="Warning threshold in percentage")

parser.add_option("-c", "--critical",action="store", type="string", dest="crit_threshold", help="Critical threshold in percentage")

(options, args) = parser.parse_args()

def QPS():
    '''mysql qps'''
    d=time_delay()
    fff=open('/usr/local/nagios/etc/qps.txt','r')
    qpsbefore=fff.read()
    fff.close()
    now=subprocess.Popen('''mysql -umonitor -pmonitor -h 127.0.0.1 -e "show global status like 'Questions'" | awk 'NR==2{print $2}' ''',shell=True,stdout=subprocess.PIPE)
    now.wait()
    qpsnow=now.communicate()[0][:-1]
    if qpsbefore=='':
        fffw=open('/usr/local/nagios/etc/qps.txt','w')
        fffw.write(qpsnow)
        fffw.close()
    else:
        mysqlqps=(int(qpsnow)-int(qpsbefore))/int(d)
        fffw=open('/usr/local/nagios/etc/qps.txt','w')
        fffw.write(qpsnow)
        fffw.close()
        return mysqlqps
    
def time_delay():
    '''Compute the time difference'''
    time_now=datetime.now()
    ff=open('/usr/local/nagios/etc/time.txt','r')
    time_before_str=ff.read()
    ff.close()
    if time_before_str=='':
        ffw=open('/usr/local/nagios/etc/time.txt','w')
        ffw.write(str(time_now))
        ffw.close()
    else:
        time_before=datetime.strptime(time_before_str,"%Y-%m-%d %H:%M:%S.%f")
        delay=(time_now-time_before).seconds
        ffw=open('/usr/local/nagios/etc/time.txt','w')
        ffw.write(str(time_now))
        ffw.close()
        return delay
    
def jastme():
    q=QPS()
    if not options.crit_threshold:
        print "UNKNOWN: Missing critical threshold value."
        sys.exit(3)
    if not options.warn_threshold:
        print "UNKNOWN: Missing warning threshold value."
        sys.exit(3)

    if q==None:
        print 'wait next check,initialize the date'
        sys.exit(3)

    elif int(q) >= int(options.crit_threshold):
        print 'Criticl,The QPS is %s | QPS=%stimes;%s;%s;0' %(q,q,options.warn_threshold,options.crit_threshold)
        sys.exit(2)
    
    elif int(options.crit_threshold) > int(q) >= int(options.warn_threshold):
        print 'Warning,The QPS is %s | QPS=%stimes;%s;%s;0' %(q,q,options.warn_threshold,options.crit_threshold)
        sys.exit(1)

    else:
        print 'OK,The QPS is %s | QPS=%stimes;%s;%s;0' %(q,q,options.warn_threshold,options.crit_threshold)
        sys.exit(0)

if __name__ == '__main__':
    jastme()


© 著作权归作者所有

共有 人打赏支持
上一篇: check_slave_lag
下一篇: 小需求,巧思路
jastme
粉丝 36
博文 135
码字总数 61896
作品 0
成都
程序员
私信 提问
第 20 章 Nagios

目录 20.1. Install 20.2. nagios 20.3. nrpe node 20.4. 配置 Nagios 20.5. 配置监控设备 20.6. Nagios Plugins 20.7. FAQ homepage: http://www.nagios.org/ Nagios 是一种开放源代码监视软......

玄学酱
01/01
0
0
nagios添加主机和写mysql插件

在nagios服务器上添加监控的主机及服务: Nagios配置文件: [root@a etc]# cd objects/ [root@a objects]# ls commands.cfg(定义监控命令) localhost.cfg(定义监控什么) switch.cfg(定义...

技术小阿哥
2017/11/27
0
0
监控利器Nagios之一:监控本地NFS和外部HTTP、MySQL服务

监控利器Nagios之一:监控本地NFS和外部HTTP、MySQL服务 Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务...

于学康
2017/06/20
0
0
Nagios详解(基础、安装、配置文件解析及监控实例)

一、Nagios基础 1.简介 Nagios是一款开源网络监视工具。 可监控网络服务(SMTP、POP3、HTTP、NNTP、ICMP、SNMP、FTP、SSH、PING~~~)、监控主机资源、根据需求设置相关插件监控、通过Ema...

卡子火
2017/01/23
0
0
Linux下nagios的搭建及相关配置

一、LAMP环境部署 1、安装php 1.安装yum源 rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm -Uvh http://rpms.famillecollet.com/enterpri......

yhLin丶
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

小白带你认识netty(三)之NioEventLoop的线程(或者reactor线程)启动(一)

在第一章中,我们看关于NioEventLoopGroup的初始化,我们知道了NioEventLoopGroup对象中有一组EventLoop数组,并且数组中的每个EventLoop对象都对应一个线程FastThreadLocalThread,那么这个...

天空小小
今天
3
0
PHP动态扩展Redis模块

查看已有模块 [root@test-a ~]# /usr/local/php/bin/php -m[PHP Modules]bz2Core...zlib[Zend Modules] 下载包,解压,生成configure文件 [root@test-a ~]# cd /usr/local/src/[ro......

野雪球
今天
4
0
在Ignite中使用线性回归算法

在本系列前面的文章中,简单介绍了一下Ignite的机器学习网格,下面会趁热打铁,结合一些示例,深入介绍Ignite支持的一些机器学习算法。 如果要找合适的数据集,会发现可用的有很多,但是对于...

李玉珏
今天
5
0
Mybatis应用学习——简单使用示例

1. 传统JDBC程序中存在的问题 1. 一个简单的JDBC程序示例: public class JDBCDemo {public static void main(String[] args) {Connection con=null;PreparedStatement statemen...

江左煤郎
今天
5
0
使用JavaScript编写iOS应用业务逻辑

JSAUIKitCocoa使你可以使用JavaScript编写对性能要求不高但可能变动性很大的iOS应用的业务逻辑部分,View组件、需要多线程支持的Model等则直接使用原生对象。 编写方式与React Native相似,但...

neal01
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部