需求: 远程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.
相关推荐
在这个案例中,我们将深入探讨如何配置Nagios来监控远程主机,特别是针对Windows系统的主机,通过安装NSClient++插件实现。 **操作环境** 监控环境为Ubuntu 12.04作为Nagios服务器,192.168.0.21 (cloud-21) 和192....
Nagios监控系统是一款广泛使用的开源网络监控工具,它能够实时监测网络服务、服务器状态以及各种应用程序的运行状况。Nagios的核心功能在于提供报警机制,当系统出现故障时,可以迅速通知管理员,确保问题得到及时...
Nagios是一款强大的网络监视系统,它能够实时监控网络服务、主机状态以及各种网络资源,及时发现并报告问题。在本文中,我们将详细介绍如何向Nagios系统添加新的Linux主机进行监控。 首先,在被监控的Linux主机上,...
Nagios能实时监控网络服务、主机状态以及各种网络资源,如带宽、CPU利用率、磁盘空间等,一旦发现异常,就会立即报警,帮助运维人员快速定位并解决问题。而SNMP插件则是在Nagios的基础上,扩展了对支持SNMP协议的...
- 编写一个Shell脚本或Perl/Python程序来实现发送消息的功能。 - 在Nagios配置文件中添加一个新的`command`定义,指向上面编写的脚本。 - 例如,在`/usr/local/nagios/etc/nrpe.cfg`文件中添加: ``` command...
总结来说,`nagios-plugin-mongodb`是Nagios监控体系中的一个重要组件,它允许运维人员利用Python的灵活性和MongoDB的丰富API,对MongoDB数据库进行深度检查和性能监控,从而确保数据库服务的高效、可靠运行。...
本次分享的脚本主要用于通过Nagios监控Linux主机的CPU使用情况。 该脚本`check_cpu.sh`的功能在于检测Linux主机的CPU使用率,并根据设定的阈值返回不同的状态信息(正常、警告或严重)。具体来说,脚本会获取当前...
用户可以使用 NSClient++ 插件来监控 Windows 主机的系统状态、磁盘使用情况、服务状态等。同时,Nagios 服务器可以使用 check_nt 插件来收集 NSClient++ 服务中的数据,并将其展示在 Nagios Web 界面中。 在实际...
标题 "用python编写nagios hadoop监控脚本" 暗示了本文将探讨如何使用Python编程语言来创建Nagios监控系统针对Hadoop集群的监控脚本。Nagios是一款广泛使用的开源网络监控系统,它能检测各种IT基础设施的状态,包括...
这一步骤的关键在于编写或使用现有的脚本来发送飞信消息。具体步骤包括: 1. **编写飞信发送脚本**:利用飞信API或SDK编写脚本,当Nagios检测到服务状态异常时触发该脚本,从而发送飞信消息给管理员。 2. **配置...
Nagios是一款强大且跨平台的开源监控系统,它能够对本地或远程主机及服务进行监控,并在发现异常时发送通知。Nagios支持多种操作系统,如Linux/Unix,并提供了一个基于Web的界面供用户查看系统的状态、问题以及日志...
nagios监控主机内存,监控主机开销,主机类型为linux
Nagios是一款广泛使用的开源监控系统,用于监视网络服务、主机以及各种应用程序的状态。在日志监控方面,虽然Nagios自带了check_logfile插件,但它的功能相对有限。为了更有效地进行日志检查,我们可以选择使用...
- **自定义插件支持**:用户可以编写自己的插件来监控特定的情况,如温度监测、警告信息等。 - **远程执行脚本**:可以通过配置Nagios远程执行插件来执行远程脚本。 - **安全通信方式**:支持通过SSH或SSL加密...
NRPE(Nagios Remote Plugin Executor)是Nagios的一种扩展工具,主要用于远程监控Linux主机的状态,比如CPU负载、内存使用情况、磁盘空间等。NRPE通过在目标主机上部署守护进程,并配合Nagios监控服务器上的`check_...
Nagios是一款强大的网络监控系统,它主要用于检测网络服务、服务器资源以及各种应用程序的状态,确保IT基础设施的稳定运行。Nagios的核心设计理念是通过定期检查各个服务,收集信息并根据预定义的阈值来判断服务是否...
它能够监控主机与服务的运行状态,提供灵活的通知机制,支持分布式监控等特性,是目前应用最广泛的监控工具之一。 #### 二、安装与配置Nagios ##### 1. 创建Nagios用户及目录 首先,创建一个名为`nagios`的用户,...
- **自定义脚本**:用户可以根据自己的需求编写脚本来实现特定的监控任务。 #### 四、硬件设备监控 除了软件服务之外,Nagios 3还支持对硬件设备的监控,包括但不限于: - **网络设备**:如路由器、交换机等。 - **...
- **灵活的插件支持:**Nagios允许用户根据需求编写自己的插件,这些插件可以通过网络收集数据来监控各种状态(如温度、警告等)。 - **远程监控能力:**支持通过SSH或SSL加密方式实现远程监控。 - **图形化展示:**...
Nagios是一款广泛使用的开源系统监控工具,它能够实时监控网络服务、服务器状态以及各种硬件资源。为了增强Nagios的可读性和易用性,Nagios可视化软件Nagvis应运而生。Nagvis提供了一个直观的界面,通过图形化的方式...