使用python的免费磁盘Nagios插件

时间:2014-12-19 03:57:05

标签: nagios

如果有人可以帮我修改下面的脚本。我正在尝试使用Python脚本来检查 文件系统上的磁盘空间警报,但现在脚本只检查根“/”文件系统。我想用脚本检查服务器上可用的所有文件系统。这是一个nagios文件系统磁盘空间,脚本只检查“df /”。如果任何人可以帮助找到解决方案。

#!/usr/bin/python
import re,sys,commands

#################
#Set variables
command = "df /"
critical = 95.0
warning = 75.0
#################

#build regex
dfPattern = re.compile('[0-9]+')

#get disk utilization
diskUtil = commands.getstatusoutput(command)

#split out the util %
diskUtil = diskUtil[1].split()[11]

#look for a match. If no match exit and return an
#UNKNOWN (3) state to Nagios

matchobj = dfPattern.match(diskUtil)
if (matchobj):
    diskUtil = eval(matchobj.group(0))
else:
    print "STATE UNKNOWN"
    sys.exit(3)

#Determine state to pass to Nagios
#CRITICAL = 2
#WARNING = 1
#OK = 0
if diskUtil >= critical:
    print "FREE SPACE CRITICAL: '/' is %.2f%% full" % (float(diskUtil))
    sys.exit(2)
elif diskUtil >= warning:
    print "FREE SPACE WARNING: '/' is %.2f%% full" % (float(diskUtil))
    sys.exit(1)
else:
    print "FREE SPACE OK: '/' is %.2f%% full" % (float(diskUtil))
    sys.exit(0)

2 个答案:

答案 0 :(得分:0)

Nagios已经附带了文件系统磁盘空间检查。我的第一个建议就是使用它。

要回答您的具体问题,脚本正在运行“df /”,因此您只能获得该文件系统的结果。

为什么不只运行“df”,它会返回多行,然后你可以循环?

您也可以考虑在原生python中编写它:

s = os.statvfs('/')
(s.f_bavail * s.f_frsize) / 1024

答案 1 :(得分:0)

您的查询返回/的结果,因为在command="df /"语句

中明确调出了该结果

你可以:
a)替换/command="df /"的命令行选项,以便您选择分区
b)制作明确查看不同分区/, /home, /var等的多个版本 c)使用内置的nagios d)将它写在shell / awk中,因为你只想评估shell命令的输出