SNMP 传递脚本有效,但 OID 的 snmpget 没有提供正确的结果

SNMP 传递脚本有效,但 OID 的 snmpget 没有提供正确的结果

我编写了一个原型脚本,开始使用 SNMP 检查服务的状态。脚本本身似乎可以工作,因为我使用 mysql 作为测试示例,但通过 snmpget 请求的 OID 返回了不正确的值。我不知道如何排除故障,因为我没有收到任何日志消息说存在问题。它没有给我有关未知 OID 的错误,所以我相信 OID 已在 snmp 守护程序中注册。示例输出:

sudo service mysql stop
something:~ $ ./snmp-mysql 
.1.3.6.1.2.1.38.1
gauge
0
something:~ $ sudo service mysql start
something:~ $ ./snmp-mysql 
.1.3.6.1.2.1.38.1
gauge
1
something:~ $ snmpget -v2c -c public localhost .1.3.6.1.2.1.38.1
iso.3.6.1.2.1.38.1 = Gauge32: 0

snmpd.conf 的直通 MIB 扩展命令部分包括以下内容:

pass .1.3.6.1.2.1.38.1  /bin/sh /usr/local/bin/snmp-mysql

我还非常小心地确保调用的脚本与目录中的脚本相同,因此排除了错误脚本的可能性。我不知道如何排除此问题,因为我没有从 snmpd 获得任何反馈,也不知道如何将其置于某种详细模式以进行日志记录。关于如何继续,有什么想法吗?

答案1

我修改了脚本,但不确定为什么它会起作用。原始脚本:

#!/bin/bash
if [ "$1" = "-g" ]; then
    echo .1.3.6.1.2.1.38.1
    echo gauge
    OUTPUT="$(service mysql status | grep inactive)"
    if [[ ${OUTPUT} ]]; then
       echo 0
       # it is running
    else
        echo 1
        # it is not
    fi
fi
exit 0

显然,输出不仅仅是 MIB、仪表和结果 1 或 0,因为检查本身输出一条不可见的线。

新文件:

#!/bin/bash
if [ "$1" = "-g" ]; then
    echo .1.3.6.1.2.1.38.1
    echo gauge
    if service mysql status | grep inactive > /dev/null; then
        echo 0
        # it is running
    else
        echo 1
        # it is not
    fi
fi

我偶然发现了类似的链接https://unix.stackexchange.com/questions/52800/how-to-do-an-if-statement-from-the-result-of-an-executed-command其中包括一条引用 /dev/null 的注释。此外,将脚本交换为正在运行的 pass OID 时,我遇到了同样的错误,因此我检查了脚本问题,而不是 snmpd 配置问题。

相关内容