четверг, 24 июня 2021 г.

Мониторинг состояния здоровья и температуры жёстких дисков в Windows с помощью smartmontools + telegraf

 У меня уже развёрнута связка influxdb + grafana и тут в сетке появился хост с блядской виндой... Под линуксами всякими снимать инфу о состоянии жёстких дисков оказалось прилично легко, но с виндой пришлось покрутиться... Попытка прикрутить smartmontools в конфиг телеграфа в плагин [[inputs.smart]] провалилась успешно высыпанием кучей ошибок и прочего... Придётся ставить костыли и сегодняшний костыль будет писан на powershell (дабы не усложнять ничего в окружении и т.п.).

 

1. Скачиваем и устанавливаем виндовую версию smartmontools отсюда (все настройки при установке - по умолчанию):

https://builds.smartmontools.org/

2. После того, как smartmontools установлен фигачим скрипт powershell по пути C:\Program Files\telegraf\smartctl.ps1

Содержимое скрипта:

$Getdrives = (cmd.exe /c "c:\Program Files\smartmontools\bin\smartctl.exe" --scan -j) | Out-String | ConvertFrom-Json |select -expand devices|select name,type

foreach ($drive in $Getdrives) {

    $dtype = $drive|select -expand type
    $drivename = $drive|select -expand name
    $driveinfo = (cmd.exe /c "c:\Program Files\smartmontools\bin\smartctl.exe" -a -j -d $dtype $drivename) | Out-String | ConvertFrom-Json
    $smart_status = $driveinfo | select -expand smart_status |select -expand passed
    $temperature = $driveinfo | select -expand temperature |select -expand current

    $drivename = $drivename.replace(',','-')
    $temperature = [string]$temperature

    if ($temperature -ne "0") {
        Write-Output "smartctl,device=$drivename temperature=$temperature"
    }


    if ($smart_status) {
        Write-Output "smartctl,device=$drivename health=1"
    } else {
        Write-Output "smartctl,device=$drivename health=0"
    }

}

Вкратце что делается выше... Забираем перечень дисков и их тип, забираем текущую инфу по каждому винту (состояние здоровья и температуры). У меня оказался один диск, подключенный по usb и по нему инфа о температуре не отдавалась, так что я решил что если нет информации о температуре - не отдавать инфу о температуре по данному жёсткому диску. Что касается здоровья, то шлём 1 если всё в порядке и 0 - если жопа...

 3. Правим конфиг телеграфа (telegraf.conf) и дополняем его следующим блоком:

 # Get smartctl status of hdd's
[[inputs.exec]]

  ## Override default gathering interval
  interval = "1m"

  ## Commands array
  commands = [
     'powershell "C:/\"Program Files\"/telegraf/smartctl.ps1"'
  ]
 
  ## Timeout for each command to complete.
  timeout = "20s"

  ## data format options:
  ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
  data_format = "influx"
  data_type = "string"

Перезапускаем службу телеграфа...

4. Идём в графану и добавляем туда графики... Для начала на состояние здоровья...

И таким образом для остальных дисков (/dev/sdb, /dev/sde...)

Ещё я прикручу алерты (если какой то диск поплохеет - чтобы мне пришло уведомление)...

Добавлем алерт на график в графане

В итоге получаю вот такую красоту:

Готовый график по состоянию здоровья дисков в графане 

 Добавляем про температуру...

Добавляем график температуры жёстких дисков в графану 

И так остальные диски... В Unit выставляем что данные идут в градусах цельсия.

В итоге получаю вот такую красоту:

График температуры жёстких дисков в графане

Комментариев нет:

Отправить комментарий