`

【Python真的很强大】使用telnetlib编写nagios命令来监控远程主机cpu-load

阅读更多

      需求: 远程unix主机cpu load 有时过高,现在需要监控它,当超过阀值则email报警. 访问该主机只能通过telnet,不能安装其他任何library。

      现有资源: 已经有nagios环境,python已自带telnetlib模块,可以通过执行uptime命令获取1(5,10)分钟平均cpu load。

     

       通常,用shell script 编写nagios命令规范如下:

 

     

echo "OK status: ….”
     exit 0
echo "WARNING status: ….”
     exit 1
echo "CRITICAL status: ….”
     exit 2
echo "UNKNOWN status: ….”
     exit 3

 

 

   接口规范依赖exit code.

 

   完成后的python(2.7) 代码如下:

 

 

#!/usr/bin/python
# -*- coding: utf-8 -*-
import telnetlib
import sys,os
import datetime
import traceback
import logging
import logging.handlers
import getopt



def script_path():
    path = os.path.realpath(sys.argv[0])
    if os.path.isfile(path):
	path = os.path.dirname(path)
    return os.path.abspath(path)


LOGGING_MSG_FORMAT  = '[%(asctime)s] [%(levelname)s] [%(module)s] [%(funcName)s] [%(lineno)d] %(message)s'
LOGGING_DATE_FORMAT	= '%Y-%m-%d %H:%M:%S'

logging.basicConfig(level=logging.DEBUG,format=LOGGING_MSG_FORMAT,datefmt=LOGGING_DATE_FORMAT)
log = logging.getLogger('check_cpu_load_average_via_telnet')
if os.path.exists("/usr/local/nagios"):
    log_path = os.path.join("/usr/local/nagios",'logs')
else:
    log_path = os.path.join(script_path(),'logs')
if not os.path.exists(log_path):
    os.makedirs(log_path)
log_file = os.path.join(log_path,'check_cpu_load_average_via_telnet.log')
logger = logging.handlers.TimedRotatingFileHandler(log_file,'midnight',1)
logger.setFormatter(logging.Formatter(LOGGING_MSG_FORMAT))
log.addHandler(logger)


if __name__ == '__main__':
    try:
        reload(sys)
        sys.setdefaultencoding("utf-8")
	#accept -t via command check_nrpe
	opts, args = getopt.getopt(sys.argv[1:],"t:", ["host=","port=","user=","password=","cpuLoadLimit=","timeout="])
	host = None
	port = 23
	username = None
	password = None
	cpuLoadLimit = None
	login_Timeout = 30
	for a,o in opts:
	    if a in ('--host'):
		host=o
	    elif a in ('--port'):
		port=int(o)
	    elif a in ('--user'):
		username=o 
	    elif  a in ('--password'):
		password=o
	    elif a in ('--cpuLoadLimit'):
		cpuLoadLimit=float(o)
	    elif a in ('-t',"--timeout"):
		login_Timeout = round(float(o))
	    
        log.info("telnet %s:%s with user:%s, set cpu load limit=%s,timeout=%s", host,str(port),username,str(cpuLoadLimit),str(login_Timeout))
        CRLF = '\r\n'
        finish = 'telecom> '
	#finish = '$ '
        
        tn = telnetlib.Telnet(host=host,port=port, timeout=login_Timeout)
        
        #tn.set_debuglevel(2)
        tn.read_until('login: ',timeout=5)
        tn.write(username + CRLF)
        
        tn.read_until('Password: ',timeout=5)
        tn.write(password + CRLF)
        
        tn.read_until(finish,timeout=5)
        
        tn.write('uptime && sleep 1 '+CRLF)
        log.info("run command: uptime")
        
        tn.write("exit && sleep 1" + CRLF)
        log.info("run command: exit")
        
        resultOfCommands = tn.read_all()
        log.info("Result of Commands:%s",resultOfCommands)
	cpu_load_1_minute = resultOfCommands.split('load average:')[-1].strip().split(",")[0]
	try:
	    cpu_load_1_minute = float(cpu_load_1_minute)
	except:
	    print "exception occured while parsing the cpu_load_1_minute"
	    sys.exit(3) 
	    log.error(traceback.format_exc())
        tn.close()
	if cpu_load_1_minute < cpuLoadLimit:
	    print "[ok] cpu load = %s for %s" % (str(cpu_load_1_minute), host)
	    sys.exit(0)
	elif cpu_load_1_minute  == cpuLoadLimit:
	    print "[warn] cpu load approach to %s for %s" % (str(cpu_load_1_minute),  host)
	    sys.exit(1)
	else:
	    print "[Not ok] cpu load = %s[limit:%s] for %s" % (str(cpu_load_1_minute),str(cpuLoadLimit), host)
	    sys.exit(2)
    except SystemExit as e:
	sys.exit(e)
    except:
        errMsg = traceback.format_exc()
	print "exception occured, err msg:%s" % errMsg
	exit(3)
	
        

     备注: 防止check_nrpe命令timeout(默认10sec), 加了参数-t 30.

 

  

1
0
分享到:
评论

相关推荐

    Nagios配置之监控远程主机插件安装(案例).pdf

    在这个案例中,我们将深入探讨如何配置Nagios来监控远程主机,特别是针对Windows系统的主机,通过安装NSClient++插件实现。 **操作环境** 监控环境为Ubuntu 12.04作为Nagios服务器,192.168.0.21 (cloud-21) 和192....

    Nagios监控系统插件nagios-plugins-2.3.2.tar.gz

    Nagios监控系统是一款广泛使用的开源网络监控工具,它能够实时监测网络服务、服务器状态以及各种应用程序的运行状况。Nagios的核心功能在于提供报警机制,当系统出现故障时,可以迅速通知管理员,确保问题得到及时...

    向Nagios添加监控主机

    Nagios是一款强大的网络监视系统,它能够实时监控网络服务、主机状态以及各种网络资源,及时发现并报告问题。在本文中,我们将详细介绍如何向Nagios系统添加新的Linux主机进行监控。 首先,在被监控的Linux主机上,...

    nagios-snmp-plugins-1.2.tar.gz

    Nagios能实时监控网络服务、主机状态以及各种网络资源,如带宽、CPU利用率、磁盘空间等,一旦发现异常,就会立即报警,帮助运维人员快速定位并解决问题。而SNMP插件则是在Nagios的基础上,扩展了对支持SNMP协议的...

    CentOS安装Nagios和监控Linux、Windows客户端以及微信报警详细配置

    - 编写一个Shell脚本或Perl/Python程序来实现发送消息的功能。 - 在Nagios配置文件中添加一个新的`command`定义,指向上面编写的脚本。 - 例如,在`/usr/local/nagios/etc/nrpe.cfg`文件中添加: ``` command...

    Python-nagiospluginmongodb检查MongoDB状态的Nagios插件

    总结来说,`nagios-plugin-mongodb`是Nagios监控体系中的一个重要组件,它允许运维人员利用Python的灵活性和MongoDB的丰富API,对MongoDB数据库进行深度检查和性能监控,从而确保数据库服务的高效、可靠运行。...

    Nagios监控CPU脚本

    本次分享的脚本主要用于通过Nagios监控Linux主机的CPU使用情况。 该脚本`check_cpu.sh`的功能在于检测Linux主机的CPU使用率,并根据设定的阈值返回不同的状态信息(正常、警告或严重)。具体来说,脚本会获取当前...

    Nagios监控Windows主机(NSClient++安装与应用

    用户可以使用 NSClient++ 插件来监控 Windows 主机的系统状态、磁盘使用情况、服务状态等。同时,Nagios 服务器可以使用 check_nt 插件来收集 NSClient++ 服务中的数据,并将其展示在 Nagios Web 界面中。 在实际...

    用python编写nagios hadoop监控脚本

    标题 "用python编写nagios hadoop监控脚本" 暗示了本文将探讨如何使用Python编程语言来创建Nagios监控系统针对Hadoop集群的监控脚本。Nagios是一款广泛使用的开源网络监控系统,它能检测各种IT基础设施的状态,包括...

    nagios监控linux主机、web等各种服务,并实现飞信自动报警

    这一步骤的关键在于编写或使用现有的脚本来发送飞信消息。具体步骤包括: 1. **编写飞信发送脚本**:利用飞信API或SDK编写脚本,当Nagios检测到服务状态异常时触发该脚本,从而发送飞信消息给管理员。 2. **配置...

    nagios监控主机内存

    nagios监控主机内存,监控主机开销,主机类型为linux

    nagios+check_logifiles实现日志监控.docx

    Nagios是一款广泛使用的开源监控系统,用于监视网络服务、主机以及各种应用程序的状态。在日志监控方面,虽然Nagios自带了check_logfile插件,但它的功能相对有限。为了更有效地进行日志检查,我们可以选择使用...

    Nagios远程监控Windows服务器的安装与配置

    - **自定义插件支持**:用户可以编写自己的插件来监控特定的情况,如温度监测、警告信息等。 - **远程执行脚本**:可以通过配置Nagios远程执行插件来执行远程脚本。 - **安全通信方式**:支持通过SSH或SSL加密...

    Nagios监控Linux主机

    NRPE(Nagios Remote Plugin Executor)是Nagios的一种扩展工具,主要用于远程监控Linux主机的状态,比如CPU负载、内存使用情况、磁盘空间等。NRPE通过在目标主机上部署守护进程,并配合Nagios监控服务器上的`check_...

    Nagios的平台介绍和监控插件的编写

    Nagios是一款强大的网络监控系统,它主要用于检测网络服务、服务器资源以及各种应用程序的状态,确保IT基础设施的稳定运行。Nagios的核心设计理念是通过定期检查各个服务,收集信息并根据预定义的阈值来判断服务是否...

    nagios配置命令

    它能够监控主机与服务的运行状态,提供灵活的通知机制,支持分布式监控等特性,是目前应用最广泛的监控工具之一。 #### 二、安装与配置Nagios ##### 1. 创建Nagios用户及目录 首先,创建一个名为`nagios`的用户,...

    Nagios 3 Enterprise Network Monitoring Including Plug-Ins and Hardware Devices

    - **自定义脚本**:用户可以根据自己的需求编写脚本来实现特定的监控任务。 #### 四、硬件设备监控 除了软件服务之外,Nagios 3还支持对硬件设备的监控,包括但不限于: - **网络设备**:如路由器、交换机等。 - **...

    nagios的基本使用

    - **灵活的插件支持:**Nagios允许用户根据需求编写自己的插件,这些插件可以通过网络收集数据来监控各种状态(如温度、警告等)。 - **远程监控能力:**支持通过SSH或SSL加密方式实现远程监控。 - **图形化展示:**...

    nagios监控软件中可视化软件-nagvis ,该hover-template模板 提供了节点显示的页面显示信息.zip

    Nagios是一款广泛使用的开源系统监控工具,它能够实时监控网络服务、服务器状态以及各种硬件资源。为了增强Nagios的可读性和易用性,Nagios可视化软件Nagvis应运而生。Nagvis提供了一个直观的界面,通过图形化的方式...

Global site tag (gtag.js) - Google Analytics