Raid alert catch python 脚本需要添加 Nagios 逻辑

问题描述

有人可以帮助我如何添加 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 状态。