我编写了一个原型脚本,开始使用 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 配置问题。