问题描述
有人可以帮助我如何添加 Nagios 逻辑来捕获我下面的 python 脚本的警报吗?
我尝试为所有 OK 和 CRITICAL 添加 sys.exit(0) 和 sys.exit(1),或者请让我知道我应该做什么,以便运行 Nagios 时该脚本捕获 0,1,2并显示消息。
#!/usr/bin/python
import subprocess
import os,sys
#Check python present or not
# dnf install python3.6-stack
# export PATH=/opt/python-3.6/bin:$PATH
def check_Megaraid():
# Next script
Failed=subprocess.run(["sudo /opt/MegaraID/MegaCli/MegaCli64 -AdpAllInfo \ -aALL | grep -i 'Failed disks' | awk -F':' '{print $2}'"],shell=True,stdout=subprocess.PIPE,universal_newlines=True)
Failed_status = Failed.stdout
print("Failed_status is",Failed_status)
critical=subprocess.run(["sudo /opt/MegaraID/MegaCli/MegaCli64 -AdpAllInfo \ -aALL | grep -i 'Critical disks' | awk -F':' '{print $2}'"],universal_newlines=True)
critical_status = critical.stdout
print("critical_status is",critical_status)
if Failed_status.strip() and critical_status.strip() == "0" :
print("Raid check all OK" )
sys.exit(0)
#return 0
else:
print("CRITICAL")
sys.exit(1)
#return 1
def check_raid():
process=subprocess.run(["sudo /sbin/mdadm --detail /dev/md127 | grep -i state | grep -w clean,| awk -F',' '{print $2}' |sed -e 's/^[ \t]*//' "],universal_newlines=True)
output = process.stdout
check_process=subprocess.run(["sudo /sbin/mdadm --detail /dev/md127 | grep -i state | awk -F':' '{print $2}' |sed -e 's/^[ \t]*//' "],universal_newlines=True)
check = check_process.stdout
if output.strip() == 'degraded':
print("Raid disk state is CRITICAL ",output)
#return 1
sys.exit(1)
elif check.strip() == 'clean':
print("Raid check all OK")
#return 0
sys.exit(0)
else:
print("sudo /sbin/mdadm --detail /dev/md127 cmd not found : This is an dataraid machine")
check_Megaraid()
#Check whether system configure raid
process=subprocess.run(["sudo cat /GEO_VERSION | grep -i raid | awk -F'Layout:' '{print $2}' | sed 's/[0-9]*//g' | sed -e 's/^[ \t]*//'"],universal_newlines=True)
raid_value = process.stdout
if raid_value.strip() == 'raid':
print("System configure Raid functions")
check_raid()
else:
print("There is no raid configured in this system")
exit()
解决方法
如果您有兴趣,请参考 https://nagios-plugins.org/doc/guidelines.html。
0 没问题 1 是警告 2 是关键 3 未知
因此您需要做的第一件事是将您的 sys.exit(1)
替换为 sys.exit(2)
我还将用 exit()
替换最后的 sys.exit(3)
以表示这是一个未知退出,这将帮助您识别 UI 中配置错误的服务。
您还需要先指明状态,典型的单行插件输出如下所示:
STATUS: message | perfdata
但看起来您并没有使用性能数据,因此将您的关键出口更改为以字符 CRITICAL:
为前缀,并以 OK:
为您的 OK 状态。