UPD. Материал хоть и позаимствованный, но попользовавшись предложенным решением пару дней, быстро обнаружил неудобные моменты. Мониторинг быстро обнаружил умирающий диск (одновременно и хорошо и плохо), и тут начался праздник, диск, с которым проблемы пришлось искать, т.к. сообщение пришло о сервере, на котором выявлена проблема, но о том, что это за диск... Далее сам текст почти менять не буду, изменён будет только скрипт и XML файл. И да, картинки останутся так-же авторские.
Для мониторинга за жесткими дисками, в том числе за температурой в windows, будем использовать smartmontools под windows. Скрипт для автообнаружения и формирования выдачи в zabbix будет работать на powershell.
Устанавливаем smartmontools. После установки рекомендую сразу проверить работу. Для этого открываем командную строку, переходим в директорию C:\Program Files\smartmontools\bin и выполняем:
# smartctl --scan-open
Вы должны увидеть список всех дисков в системе. Дальше можете посмотреть информацию о дисках, например так:
# smartctl -A /dev/sda # smartctl -i /dev/sda
Если все в порядке, информация о дисках выводится, продолжаем. Нам нужен скрипт для парсинга вывода. Я не стал придумывать свой, к тому же на powershell писать практически не умею, взял за основу готовый, который реализует тот же функционал, что описанный выше для linux.
<# .VERSION 0.2 .SYNOPSIS Script with LLD support for getting data about HHD SMART to Zabbix monitoring system. .DESCRIPTION The script may generate LLD data for SMART HDD .NOTES Author: Pimenov Github: #> Param ( [switch]$version = $false, [ValidateSet("lld","health","state")][Parameter(Position=0, Mandatory=$True)][string]$action, [ValidateSet("HDD","SMART")][Parameter(Position=1, Mandatory=$True)][string]$part, [string][Parameter(Position=3)]$HDDid, [string][Parameter(Position=4)]$SmartCode ) $cli = "c:\Program Files\smartmontools\bin\smartctl.exe" function LLDHDD() { $items =& $cli --scan-open | where {$_ -match "/dev/sd"} foreach ($obj in $items) { [array]$item = & $cli -i $obj.substring(0,8) if (($item | where {$_ -match "SMART support is: Enabled"}) -ne $null) { foreach ($str in $item) { if ($str.contains("Device Model:")) { $HDD_model = (($item[5] -split ':')[1]).Trim() } if ($str.contains("Serial Number:")) { $HDD_sn = (($item[6] -split ':')[1]).Trim() } } $HDD_info = [string]::Format('{{"{{#HDD.ID}}":"{0}","{{#HDD.MODEL}}":"{1}","{{#HDD.SN}}":"{2}"}},',$obj.substring(0,8),$HDD_model, $HDD_sn) $HDD_json += $HDD_info } } $lld_data = '{"data":[' + $($HDD_json -replace ',$') + ']}' return $lld_data } function GetSMARTStatus() { $response = & $cli -A $HDDid| where {$_ -match "^ *$SmartCode"} if ($response -eq "" -or $response -eq $null) { $SMARTRes="0" } if ($response.Length -gt 87) { $SMARTRes = $response.Substring(87) } if ($SMARTRes.Contains("(")) { $SMARTRes = $response.Substring(87,$response.IndexOf("(")-87) } return $SMARTRes } function GetPhysicalDriveStatus() { [array]$response = & $cli -H $HDDid foreach ($item in $response) { if ($item.Contains("SMART overall-health self-assessment test result:")) { if ($item.Contains("PASSED")) { return "PASSED" } return "FAILED!" } } return "FAILED!" } switch($action){ "lld" { switch($part){ "HDD" { write-host $(LLDHDD) } } } "health" { switch($part) { "HDD" { write-host $(GetPhysicalDriveStatus $HDDid) } } } "state" { switch($part) { "SMART" { write-host $(GetSMARTStatus $HDDid $SmartCode) } } } default {Write-Host "ERROR: Wrong argument: use 'lld' or 'health'"} }
Я немного изменил оригинал скрипта, автор почему-то использует smartctl-nc.exe. У меня он вообще ничего не выводит, я не понял, что это за экзешник. Я использовал обычный smartctl.exe. Сохраните скрипт и проверьте его работу. Для того, чтобы система разрешила выполнять неподписанные powershell скрипты, необходимо запустить консоль powershell от администратора и выполнить команду:
Set-ExecutionPolicy RemoteSigned
Если этого не сделать, будете получать ошибку при запуске скрипта на тему того, что выполнение скриптов запрещены для данной системы. Я сохранил скрипт в директорию C:\zabbix\windows.hdd.ps1. Проверим его работу. Запускаем консоль powershell и сам скрипт с разными параметрами.
Все в порядке. Скрипт возвращает список дисков для автообнаружения и различные параметры для запроса. Теперь добавим в конфиг агента UserParameter.
UserParameter=ZScript[*],powershell -File C:\zabbix\windows.hdd.ps1 $1 $2 $3 $4
Не забудьте увеличить таймаут получения данных. По-умолчанию в zabbix стоит 3 секунды. Этого может не хватать. Я обычно ставлю 15 секунд.
Timeout=15
Перезапускаем службу агента и идем на сервер.
На сервере делать ничего не надо, так как все сделал за вас я :) Предлагаю готовый шаблон - zabbix-smart-win-template.xml.
Скачиваете и импортируете в свой сервер. У меня он работает на версии сервера 6.2. В шаблоне настроено автообнаружение дисков, создание итемов и триггеров. Все немного похоже на то, что есть для линукса, но тем не менее отличается, так как делалось в разное время и с разным настроением. В линуксе все более заморочено - сложные триггеры и итемы, которые добавил автор шаблона. Со временем понял, что это не особо надо и не стал заморачиваться с виндой, сделал все по проще, но тем не менее весь основной функционал присутствует.
Более того, в версию с windows я добавил триггер, который срабатывает, если диск исчезает из системы. У меня был один такой диск, который мог просто пропасть. Пришлось сделать оповещение. В linux у меня диски никогда не пропадали просто так, поэтому не догадался с свое время до такого триггера. Ниже список items шаблона.
И тут же триггеры.
И вот такую картинку вы получите на выходе, когда все диски и итемы к ним появятся на хосте и начнут собирать данные.
В общем и целом ничего сложного. Настроить мониторинг SMART и температуры дисков в windows не на много сложнее, чем в linux. Хорошо, что есть одинаковый интерфейс с одним и тем же синтаксисом для обоих дисков. В windows 10 ко всему прочему, есть полноценная система ubuntu, можно было бы и без powershell обойтись, но получилось бы не универсальное решение. Данный способ работает на всех версиях windows, начиная с XP.
опять честно заимствованный материал. Решением на zabbix 6.2 воспользовался ничего не переделывая, только подставляя свои пути.
- Войдите или зарегистрируйтесь, чтобы оставлять комментарии