【问题标题】:Nagios Plugin not WorkingNagios 插件不工作
【发布时间】:2014-01-30 12:57:02
【问题描述】:

当我尝试将我的 bash 脚本移植到 nagios 时遇到问题。当我在控制台上运行时,脚本运行良好,但是当我从 Nagios 运行它时,我得到消息“(null)” - 在 nagios调试日志我看到它很好地解析了脚本,但它返回了错误消息..

我不太擅长编写脚本,所以我想我需要一些帮助

该脚本的目的是检查某些服务器的 *.ears 版本,对它们进行 md5 处理并比较输出以查看版本是否匹配。 为此,我在这些服务器上有一个 json,打印 *.ear 的名称和他的 md5。

so.. 脚本的第一部分使用 curl 从 json 获取该信息,并将 md5 编号存储在 .tempfile 上,然后它比较两个临时文件,如果它们匹配,我得到 $STATE_OK 消息。如果他们不这样做,它会创建一个带有日期的 .datetmp 文件(这样做的目的是在 48 小时不一致后打印一条消息)。然后,我对 .datetmp 文件进行比较,我想检查结果是否小于 48 小时它打印 $STATE_WAR,如果结果超过 48 小时它打印 $STATE_CRI

脚本的语法是“$ sh script.sh nameoftheear.ear server1 server2”

提前致谢

#/bin/bash

#Variables For Nagios
cont=$1
bas1=$2
bas2=$3

## Here you set the servers hostname
svr1= curl -s "http://$bas1.domain.com:7877/apps.json" | grep -Po '"EAR File":.*? [^\\]",' | grep $cont | awk '{ print $5 }' > .$cont-tmpsvr1
svr2= curl -s "http://$bas2.domain.com:7877/apps.json" | grep -Po '"EAR File":.*? [^\\]",' | grep $cont | awk '{ print $5 }' > .$cont-tmpsvr2
file1=.$cont-tmpsvr1
file2=.$cont-tmpsvr2
md51=$(head -n 1 .$cont-tmpsvr1)
md52=$(head -n 1 .$cont-tmpsvr2)
datenow=$(date +%s)

#Error Msg
ERR_WAR="Not updated $bas1: $cont $md51 --- $bas2: $cont $md52 "
ERR_CRI="48 hs un-updated $bas1: $cont $md51 --- $bas2: $cont $md52 "
OK_MSG="Is up to date $bas1: $cont $md51 --- $bas2: $cont $md52 "

STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2


##Matching md5 Files
if cmp -s "$file1" "$file2"
then
    echo $STATE_OK
    echo $OK_MSG
# I do the rm to delete the date tmp file so i can get the $STATE_OK or $STATE_WARNING
    rm .$cont-datetmp
    exit 0

elif
    echo $datenow >> .$cont-datetmp

#Vars to set modification date

datetmp=$(head -n 1 .$cont-datetmp)
diffdate=$(( ($datenow - $datetmp) /60 ))

#This var is to set the time of the critical ERR

days=$((48*60))

[ $diffdate -lt $days ]

then
    echo $STATE_WARNING
    echo $ERR_WAR
    exit 1
 else
    echo $STATE_CRITICAL
    echo $ERR_CRI
    exit 2
 fi

【问题讨论】:

    标签: bash plugins nagios


    【解决方案1】:

    我猜是某种权限问题——更具体地说,我认为 nagios 用户不能写入它自己的主目录。您要么修复这些权限,要么写入 /tmp 中的文件(并考虑使用mktemp?)。 ...但理想情况下,您会跳过编写所有这些文件,据我所知,所有这些比较等都可以保存在内存中。

    更新

    再次查看您的脚本 - 我发现您可以查看一些明显的错误:

    • 您在打印消息之前打印出退出值。
    • 您打印退出值而不是使用退出值退出。

    ...所以这个:

    echo $STATE_WARNING
    echo $ERR_WAR
    exit 1
    

    应该是:

    echo $ERR_WAR
    exit $STATE_WARNING
    

    我还想知道这是否真的是脚本,或者您在粘贴时是否遗漏了某些内容。您的最后一段代码中似乎缺少“if”以及多余的换行符?应该是:

    if [ $diffdate -lt $days ]
    then
      ...
    else
      ...
    fi
    

    【讨论】:

    • 嗨,我已经检查了权限,并且我还修改了脚本以在 tmp 字段上写入,但问题仍然存在,nagios 插件显示在警告中并且输出为(null),它也创建临时文件。我是这样做的,因为我需要设置这个插件来检查很多服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多