穆宁的智能插件过去一直报错因为退出码

aki*_*irk 6 munin smart

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

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

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

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

aki*_*irk 5

最终我求助于修补智能插件。根据您的版本,有一些像这样的代码:

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

用这个替换它

        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 :
Run Code Online (Sandbox Code Playgroud)

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

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