Мой хостинг-провайдер вставил жесткий диск в мой сервер, который, похоже, имел какую-то ошибку в прошлом, но полная автономная интеллектуальная проверка показала, что на данный момент все в порядке. На сервере есть RAID1, так что я могу смириться с этой ситуацией.
Проблема в том, что (согласно справочной странице) smartctl устанавливает бит номер 6, если в прошлом была ошибка, поэтому теперь, когда все в порядке, код выхода - это число 64.
Умный плагин по умолчанию настроен на порог 0, и хотя я знаю, что могу установить порог до 64, я бы пропустил гораздо более важный бит 3 «диск выходит из строя».
Есть ли способ установить порог таким образом, чтобы munin выполнял побитовое сравнение значения?
В конце концов я прибег к исправлению умного плагина. В зависимости от вашей версии есть такой код:
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.
Единственный способ избежать этой проблемы, не изменяя исходники 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
).