Munin 的智能插件过去一直因为退出代码而报错

Munin 的智能插件过去一直因为退出代码而报错

我的托管服务提供商在我的服务器中插入了一个硬盘,该硬盘过去似乎出现过某种错误,但完整的离线智能检查显示目前一切正常。该服务器有一个 RAID1,所以我可以忍受这种情况。

问题是(根据手册页)如果过去发生错误,smartctl 会设置位 6,因此现在一切正常,退出代码为数字 64。

智能插件默认配置为阈值为 0,虽然我知道我可以将阈值设置为 64,但我会错过更重要的位 3“磁盘出现故障”。

有没有办法设置阈值,以便 munin 对值进行按位比较?

答案1

最终,我只能修补智能插件。根据你的版本,可能会出现类似这样的代码:

        if exit_status!=None :
            # smartctl exit code is a bitmask, check man page.
            num_exit_status=int(exit_status/256)

用这个替换它

        if exit_status!=None :
            # smartctl exit code is a bitmask, check man page.
            num_exit_status=int(exit_status/256)
            # filter out bit 6
            num_exit_status &= 191
            if num_exit_status<=2 :
                exit_status=None

        if exit_status!=None :

最有趣的部分是与 191 进行按位运算的那一行:这是二进制的 0x11011111,因此与当前值执行“与”运算只会将位 6 设置为 0,同时保持其他值不变。

因此,值 64(就像我的一样)将被报告为 0,而值 8 将保留为 8。但同样非常重要的是,值 72(位 6 设置为始终,位 3 设置为因为磁盘出现故障)也会报告 8。

答案2

我发现在不修改 munin 源的情况下避免此问题的唯一方法是避免使用-a带有 smartctl 的选项,例如在中使用如下内容/etc/munin/plugin-conf.d/munin-node

[smart_sda]
env.smartargs -H -i -c -A -l selftest -l selective

(即通常包含的所有选项-a 除了为了-l error)。

相关内容