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 воспользовался ничего не переделывая, только подставляя свои пути.
- Войдите или зарегистрируйтесь, чтобы оставлять комментарии




