Ad Widget

Collapse

Zabbix Agent 2 Smart plugin Windows

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • sonorrr
    Junior Member
    • Mar 2021
    • 1

    #1

    Zabbix Agent 2 Smart plugin Windows

    Добрый день, столкнулся с такой проблемой.
    Попытка использования плагина smart на рабочих станциях HP Z, встроенный контроллер Intel C600/C220
    smartctl выдает список устройств:
    Code:
    smartctl.exe --scan
    /dev/sda -d sat # /dev/sda [SAT], ATA device
    /dev/sdb -d sat # /dev/sdb [SAT], ATA device
    /dev/sdc -d scsi # /dev/sdc, SCSI device
    /dev/sdd -d scsi # /dev/sdd, SCSI device
    /dev/sde -d scsi # /dev/sde, SCSI device
    /dev/csmi0,0 -d ata # /dev/csmi0,0, ATA device
    /dev/csmi1,0 -d ata # /dev/csmi1,0, ATA device
    /dev/csmi1,1 -d ata # /dev/csmi1,1, ATA device
    Первые 2 устройства это физические диски, у них тип устройства SAT.
    Дальше буду опираться на то как понял написанное в исходниках smartfs.go.
    Плагин их определяет в список "raidDev", и дальше пытается работать с ним как с рейд массивом, пытаясь перебором определить тип контроллера:
    Code:
    raidTypes:=[]string{"3ware","areca","cciss","megaraid","sat"}
    ...
    for_,rDev:=range raidDev {
       for_,rType:=range raidTypes {
          r.raids <- raidParameters{rDev.Name, rType}
       }
    }
    Далее по этому списку запускается smartctl в цикле, с увеличение порядкового номера диска в массиве, в ожидании достигнуть конца рейд массива, получив ошибку от smartctl.
    Code:
    // getRaidDevices sets raid device information returned by smartctl.
    // Works by incrementing raid disk number till there is an error from smartctl.
    Вот только ни один из указанных raidTypes не поддерживает smartctl в Windows в таком виде вызова, который прописан в коде плагина (в плагине инструментарий вызова для Linux): https://www.smartmontools.org/wiki/S...ID-Controllers
    В итоге мы получаем такое сообщение, которое не воспринимается ожидаемой ошибкой и цикл не завершается:
    Code:
    "string": "/dev/sda: Unknown device type 'cciss,1'",
    "severity": "error"
    Теперь собственно сама проблема:
    Код в smartfs.go не обрабатывает это сообщение как ошибку, не останавливает цикл проверки предполагаемного рейд массива, по итогу мы получаем бесконечный цикл в функции getRaidDevices который во все ядра cpu запускает smartctl.exe, практически вешая систему.
    Возможно тут требуется отправить баг репорт, но я не умею этого делать, помогите кто может.
    Можно ли как-то исправить без пересборки Агента из исходников? Закостылить проблему я понял как, например, как частный случай убрать вообще рассмотрение рейдов, например, посредствам комментирования блока формирования списка предполагаемых массивов:
    Code:
    raid:
    for_,tmp:=range basicTmp {
       //for _, r := range raid {
          //if tmp.Name == r.Name {
             //continue raid
          //}
       //}
    
       basic=append(basic, tmp)
    }
    Но это костыль для частного случая, хотелось бы качественного решения, для этого моих навыков программирования не хватит.
    Мне кажется необходимо в целом пересмотреть логику плагина для Windows.
Working...