Zabbix smart hdd windows

Время на прочтение3 мин

Количество просмотров11K

Скачаем и установим нижеследующие программы.

Python 3.6.4
SMART montools

Не забудьте поменять %username% на имя пользователя в системе. Полный путь можно получить при установке Python 3.6.4

Не забудьте, что запускать установку нужно от лица администратора системы.

Код принимает два параметра из командной строки — имя диска и параметр который нужно вывести. В случае запуска без параметров — происходит обнаружение дисков и на выходе получаем готовый формат который принимает zabbix-server.

Выкладываем код в любую доступную вам директорию. Главное указать этот же путь в UserParameter

from subprocess import Popen, PIPE, check_output
import re
import json
import sys
import hashlib

path = '\"C:\\Program Files\\smartmontools\\bin\\smartctl\"'  # for linux use 'sudo smartctl'
smart_params = ['Model_Family', 'Device_Model', 'Serial_Number', 'test_result', 'Firmware_Version']  # if u need more \
# add ur data to this list
codec = 'windows-1252'  # for linux use utf8


def params(disk_name, raw_data=""):
    # Pars output from smartctl
    if raw_data not in smart_params and raw_data != "":
        # Pars smartctl data from sensors (smartctl -A /dev/sd*)
        out_data = re.findall(r'{}.*- *(\d+)'.format(raw_data),
                              Popen('{} -x /dev/{}'.format(path, disk_name), shell=True, stdout=PIPE,
                                    ).communicate()[0].decode(codec))
        return out_data[0]
    elif raw_data != "" and raw_data in smart_params:
        # Pars smartctl information about disks (smartctl -i /dev/sd*)
        out_data = re.findall(r'{}. *(.*)'.format(raw_data.replace('_', ' ')),
                              Popen('{} -x /dev/{}'.format(path, disk_name), shell=True, stdout=PIPE,
                                    ).communicate()[0].decode(codec))
        return out_data[0]
    elif raw_data == "":
        # check sum of smartctl --scan
        hash_object = hashlib.sha224(check_output(path + " --scan"))
        return hash_object.hexdigest()


try:
    # if no argumens from cli works as discovery
    try:
        if sys.argv[1] and sys.argv[2]:
            print(params(sys.argv[1], sys.argv[2]))
    except IndexError:
        print(params(sys.argv[1]))

except IndexError:
    # Discovery for disks
    data = check_output(path + " --scan").decode(codec)
    disks = set(re.findall(r'/dev/(.{3})', data))
    output = []

    for disk in disks:
        smart = check_output(path + " -i /dev/{}".format(disk)).decode(codec)
        if smart:
            output.append({"{#DISKNAME}": disk, "{#SMART_ENABLED}": "1"})
        else:
            output.append({"{#DISKNAME}": disk, "{#SMART_ENABLED}": "0"})
    output = {"data": output}
    print(json.dumps(output))

На наблюдаемый хост в zabbix-agentd.conf или, если у вас открыта секция Include то в определенный в ней файл, добавить UserParameters указанные ниже

UserParameter=uHDD.discovery,C:\\Users\\%username%\\AppData\\Local\\Programs\\Python\\Python36-32\\python.exe C:\\zabbix\\lld\\hdd_discovery.py
UserParameter=uHDD[*],C:\\Users\\%username%\\AppData\\Local\\Programs\\Python\\Python36-32\\python.exe C:\\zabbix\\lld\\hdd_discovery.py $1 $2

Добавление шаблона на сервер »Zabbix»

Выложил на git — не думаю что вся репа очень позитивна — я учусь :)

Скачиваем шаблон — импортируем на сервер и добавляем на наблюдаемый хост.
Можно добавлять свои элементы данных. Логика такова — элемент данных отправляет параметры скрипту, который в свою очередь парсит вывод smartctl, если хотите что то добавить свое, нет проблем — в коде есть комментарии, которые помогут вам это сделать.

P.S. Скрипт для ленивых. С Linux уже как год работает такой же мониторинг таких же дисков, до Windows руки только дошли.

Наткнулся на статью сис.админа Zerox на счёт мониторинга S.M.A.R.T. диска средствами Zabbix. Но что-то у меня никак не получалось по его записи. Поэтому я опишу свой опыт настройки это необходимой вещи.

Будем разворачивать решение с Github. По сути, эта запись просто перевод с небольшими пояснениями. :)

Все необходимые компоненты я сложил в архив, который можно скачать с Я.Диска (если ссылка сломалась пишите к комменты, стучите на почту, смотрите на github).

Содержание

Возможности решения

Данное решает такие задачи:

  1. Мониторинг состояние S.M.A.R.T диска (почти всех показателей);
  2. Мониторинг оставшегося ресурса SSD;
  3. Мониторинг температуры;
  4. Мониторинг производителя, партийного номера, серийного номера (Zabbix вас оповестит, если диск был заменен), что позволяет настроить инвентаризацию;
  5. Мониторинг количество неисправных секторов на диске;

Подготовка Zabbix-Server

Всё, что Вам потребуется, это добавить замечательный шаблон в свой Zabbix.

Подготовка Zabbix-Agent Windows

Установка smartmontools

Ничего необычного, просто устанавливаем smartmontools, как обычную программу. Единственный момент, не рекомендую менять путь, иначе его надо будет менять в конфиге агента и в скрипте.

Конфигурирование агента

Создаем папку scripts и помещаем туда наш скрипт smartctl-disks-discovery.ps1

Открываем zabbix_agentd.conf и правим

#Увеличиваем TimeOut до 30 секунд. Как показывает практика. Если этого будет мало, то потом увеличим.  

TimeOut = 20

И добавляем пользовательскую проверку

UserParameter=uHDD.get[*], for /F «tokens=* usebackq» %a in (`«»%ProgramFiles%\smartmontools\bin\smartctl.exe» -i -H -A -l error -l background $1″`) do @echo %a

UserParameter=uHDD.discovery[*],powershell NoProfile ExecutionPolicy Bypass File «%ProgramFiles%\Zabbix Agent\scripts\smartctl-disks-discovery.ps1»

UserParameter=uSSD.get[*], for /F «tokens=* usebackq» %a in (`«»%ProgramFiles%\smartmontools\bin\smartctl.exe» -i -H -A -l error -l background $1″`) do @echo %a

UserParameter=uSSD.discovery[*],powershell NoProfile ExecutionPolicy Bypass File «%ProgramFiles%\Zabbix Agent\scripts\smartctl-disks-discovery.ps1»

Осталось перезапустить агента и привязать наш хост к шаблону.

Примерно через час прилетят данные. (Для отладки можно поменять время обнаружения, я обычно ставлю 10 минут, меняем 1h на 10m. Главное, не забыть обратно вернуть).

Результат

Таким образом мы настроили мониторинг SSD и HDD дисков. Данное решение отлично показывает себя в проде. По критически важным дискам можно строить вот такие информативные графики. Мне нравится :)

ТраблШутинг

У меня такая проблема возникала, когда забыл ставить smartmontools

Invalid discovery rule value: cannot parse as a valid JSON object: invalid JSON object value starting character at: ????? ???? ?? ??? ?????? ? ?????? NULL.

C:\Program Files\Zabbix Agent\scripts\smartctldisksdiscovery.ps1:34 ????:73

+ $disk_name = $smart_scanresul

Просмотры: 9 069


Если мой материал был полезен, то можете угостить меня кофе ☕️


zabbix-smartmontools

Features

Cross-platform SMART monitoring scripts with two display modes: device and serial. LLD discovers and sends data in one pass, using minimal number of utilities. Supports any SMART name and displays it as is.

  • Utilises smartctl error return codes
  • Low-Level Discovery
  • SAS support
  • SSD wear monitoring (SAS only)
  • csmi support
  • Efficient: no unnecessary processes are spawned
  • Bulk items upload with zabbix-sender
  • Error-proof configuration: various safeguard triggers
  • Automatic RAID passthrough (when smartctl detects the drives)

Note: disk temperature is monitored using different approach.

Triggers

Triggers-Discovery2

More disk triggers

Disk items

Template triggers

Triggers that contain delta(5d)>0 and last()>0 will fire on any change unless last value is zero. E.g. when disk is replaced with zero values the trigger will not fire, but if value is less or more — it will. Therefore, replacing a faulty drive with faulty one will still trigger a problem that stays for 5 days (default).

Installation

As prerequisites you need python3, smartmontools, sudo and zabbix-sender packages. For testing, zabbix-get is also required.

Take a look at scripts first lines and provide paths if needed. If you have a RAID configuration, also provide that manually. Choose device or serial mode at the top of the script. Import Template_App_smartmontools.xml in zabbix web interface.

Prerequisites

Repository installation

Debian

client# apt-get install zabbix-agent zabbix-sender smartmontools sudo
server# apt-get install zabbix-get   # testing

Centos

client# yum install zabbix-agent zabbix-sender smartmontools sudo
server# yum install zabbix-get   # testing

Placing the files

Note: Your include directory may be either zabbix_agentd.d or zabbix_agentd.conf.d dependent on the distribution.

Linux

client# mv smartctl-lld.py sender_wrapper.py /etc/zabbix/scripts/
client# mv sudoers.d/zabbix /etc/sudoers.d/   # place sudoers include for smartctl sudo access
client# mv userparameter_smartctl.conf /etc/zabbix/zabbix_agentd.d/   # move zabbix items include here

FreeBSD

client# mv smartctl-lld.py sender_wrapper.py /usr/local/etc/zabbix/scripts/
client# mv sudoers.d/zabbix /usr/local/etc/sudoers.d/
client# mv userparameter_smartctl.conf /usr/local/etc/zabbix/zabbix_agentd.d/

Windows

client> move smartctl-lld.py "C:\Program Files\Zabbix Agent\scripts\"
client> move sender_wrapper.py "C:\Program Files\Zabbix Agent\scripts\"
client> move userparameter_smartctl.conf "C:\Program Files\Zabbix Agent\zabbix_agentd.d\"

Install python3 for all users, adding it to PATH during installation. Install smartmontools and add its bin folder to PATH in environment variables (or specify absolute path to smartctl binary in smartctl-lld.py).

Finalizing

Dependent on the distribution, you may need to include your zabbix conf folder in zabbix_agentd.conf, like this:

Include=/usr/local/etc/zabbix/zabbix_agentd.d/

Its recomended to add at least Timeout=10 to agent and server config files to allow drives spun up in some cases.

Thats all for Windows. For others run the following to finish configuration:

client# chmod 755 smartctl-lld.py sender_wrapper.py   # apply necessary permissions
client# chown root:zabbix smartctl-lld.py sender_wrapper.py
client# chmod 644 userparameter_smartctl.conf
client# chown root:zabbix userparameter_smartctl.conf
client# chmod 400 sudoers.d/zabbix
client# chown root sudoers.d/zabbix
client# visudo   # test sudoers configuration, type :q! to exit

Testing

server$ zabbix_get -s 192.0.2.1 -k smartctl.discovery[get,"Example host"]

Default operation mode. Displays json that server should get, detaches, then waits and sends data with zabbix-sender. Example host is your Host name field in zabbix.

server$ zabbix_get -s 192.0.2.1 -k smartctl.discovery[getverb,"Example host"]

or locally:

client$ /etc/zabbix/scripts/smartctl-lld.py getverb "Example host"
client_admin!_console> python "C:\Program Files\Zabbix Agent\scripts\smartctl-lld.py" getverb "Example host"

Verbose mode. Does not detaches or prints LLD. Lists all items sent to zabbix-sender, also it is possible to see sender output in this mode.

Note: before scripts would work, zabbix server must first discover available items. It is done in 12 hour cycles by default. You can temporary decrease this parameter for testing in template -> Discovery -> SMART disk discovery -> Update interval.

These scripts were tested to work with following configurations:

  • Debian 11 / Server (5.0, 6.0) / Agent 4.0 / Python 3.9
  • Ubuntu 22.04 / Server (5.0, 6.0) / Agent 5.0 / Python 3.10
  • Windows Server 2012 / Server 6.0 / Agent 4.0 / Python (3.7, 3.11)
  • Windows 10 / Server 6.0 / Agent 4.0 / Python (3.10, 3.11)
  • Windows 7 / Server 6.0 / Agent 4.0 / Python (3.4, 3.7, 3.8)
  • Centos 7 / Zabbix 3.0 / Python 3.6
  • FreeBSD 10.3 / Zabbix 3.0 / Python 3.6
  • Windows XP / Zabbix 3.0 / Python 3.4

Updating

Overwrite scripts and UserParameters. If UserParameters were changed — agent restart is required. If template had changed from previous version — update it in zabbix web interface marking all Delete missing checkboxes.

Note: low values in php settings /etc/httpd/conf.d/zabbix.conf may result in request failure. Especially php_value memory_limit.

FAQ

Q: Trigger fires when it clearly shouldn’t.
Q: Trigger’s macro does not expand.
Q: Triggers from older version does not expire after update.
A: Reassign the template with Unlink and clear on the host for individual resolution. Or reupload the tempate marking all Delete missing checkboxes.

Q: Is it possible to monitor specific drives or exclude some of them?
Q: SCSI drive returns empty results while -A option working correctly.
A: Specify diskListManual in smartctl-lld.py:

diskListManual = ['/dev/sda -d sat+megaraid,4', '/dev/sda -d sat+megaraid,5']
diskListManual = ['/dev/csmi0,0 -d scsi', '/dev/csmi0,1 -d scsi']

Q: Old triggers are misleading after disk replacement.
A: Wait for 24 hours (default) or perform Unlink and clear on the host. You can also adjust the interval at template -> Discovery -> SMART disk discovery -> Keep lost resources period.

Q: Triggers Command line did not parse and Device open failed serves identical purpose in zabbix-smartmontools and zabbix-mini-IPMI.
A: Disable unneeded pair in either template.

Q: Script exits with exception/error.
A: Report it.

Known issues

  • Zabbix web panel displays an error on json discovery, but everything works fine (#7)
  • Data on some systems may be absent right after boot due to ACHI warmup (#14)
  • Windows version does not detaches, and data will only be gathered on second pass

Planned features

  • SSD life monitoring (SATA)
  • ERC / TLER / CCTL is-enabled check

Links

  • https://www.smartmontools.org
  • https://unlicense.org
  • The 5 SMART stats that actually predict hard drive failure
  • What SMART Stats Tell Us About Hard Drives
  • SMART attributes detailed explanation
  • Оцениваем состояние жёстких дисков при помощи S.M.A.R.T. (Russian)
  • Disk and CPU temperature monitoring solution

В этой статье мы пошагово разберём, как настроить мониторинг состояния жёстких дисков с использованием технологии SMART (Self-Monitoring, Analysis and Reporting Technology) в системе мониторинга Zabbix. Мы рассмотрим установку необходимых инструментов, настройку Zabbix-агента, создание шаблонов и триггеров, а также проверим работоспособность мониторинга.


Введение

Технология SMART предназначена для самодиагностики жёстких дисков, отслеживания их состояния и прогнозирования возможных сбоев. Используя интеграцию SMART с Zabbix, можно автоматизировать сбор данных о состоянии дисков, отправлять уведомления о проблемах и предотвращать потерю данных.


Шаг 1: Установка Необходимых Инструментов

Для начала установим утилиту smartmontools, необходимую для работы с SMART.

Для Debian/Ubuntu:

sudo apt update
sudo apt install smartmontools

Для CentOS/Rocky Linux:

sudo yum install smartmontools

Проверка версии установленного пакета:

smartctl --version

Шаг 2: Проверка Состояния Диска

Прежде чем приступить к настройке мониторинга, проверим поддержку SMART на вашем диске.

Проверяем наличие поддержки SMART:

sudo smartctl -i /dev/sda

Вывод должен содержать строку вроде: SMART support is: Available или Enabled. Если поддержка отсутствует, её можно включить:

sudo smartctl -s on /dev/sda

Далее проверим текущее состояние диска:

sudo smartctl -a /dev/sda

Этот вывод содержит важные атрибуты, такие как температура, количество ошибок чтения/записи и общее состояние диска.


Шаг 3: Настройка Zabbix-Агента

Теперь настроим Zabbix-агент для сбора данных SMART.

Установка Zabbix-агента (если ещё не установлен):

Для Debian/Ubuntu:

sudo apt install zabbix-agent

Для CentOS/Rocky Linux:

sudo yum install zabbix-agent

Редактирование конфигурационного файла агента:

sudo nano /etc/zabbix/zabbix_agentd.conf

Добавляем или изменяем следующие параметры:

Server=<IP_ZABBIX_SERVER>
ServerActive=<IP_ZABBIX_SERVER>
Hostname=<Имя_хоста>

Где <IP_ZABBIX_SERVER> заменяется на IP-адрес сервера Zabbix, а <Имя_хоста> — на уникальное имя хоста.

Перезапускаем агент:

sudo systemctl restart zabbix-agent

Шаг 4: Добавление Пользовательских Параметров в Zabbix-Агент

Для сбора данных SMART добавим пользовательские параметры в конфигурацию Zabbix-агента.

Открываем файл конфигурации:

sudo nano /etc/zabbix/zabbix_agentd.conf

Добавляем следующие строки:

### SMART Monitoring Parameters ###
UserParameter=smart.health[*], sudo /usr/sbin/smartctl -H /dev/$1 | grep -q "PASSED\|OK" && echo 1 || echo 0
UserParameter=smart.temperature[*], sudo /usr/sbin/smartctl -A /dev/$1 | grep -E "Temperature_Celsius|Airflow_Temperature_Cel" | awk '{print $$10}'
UserParameter=smart.attributes[*], sudo /usr/sbin/smartctl -A /dev/$1 | grep "$2" | awk '{print $$10}'

Параметры означают следующее:

  • smart.health[*]: проверка общего состояния диска (1 — PASSED, 0 — FAILED);
  • smart.temperature[*]: получение текущей температуры диска;
  • smart.attributes[*]: получение значений конкретных атрибутов SMART.

Сохраняем файл и перезапускаем агент:

sudo systemctl restart zabbix-agent

Шаг 5: Настройка Прав Доступа для Zabbix-Агента

Для выполнения команд smartctl с привилегиями sudo добавляем запись в файл /etc/sudoers.

Открываем файл:

sudo visudo

Добавляем строку:

zabbix ALL=(ALL) NOPASSWD: /usr/sbin/smartctl

Сохраняем и закрываем файл.


Шаг 6: Создание Шаблона в Zabbix

Теперь создадим шаблон для мониторинга SMART в Zabbix.

  1. Переходим в веб-интерфейсе Zabbix: Configuration → Templates → Create template.
  2. Заполняем поля:
    • Template name: Template SMART Monitoring
    • Groups: выбираем подходящую группу, например, Templates.
  3. Нажимаем Add.

Шаг 7: Создание Элементов Данных (Items)

В созданном шаблоне переходим на вкладку Items.

  1. Нажимаем Create item.
  2. Настраиваем первый элемент данных:
    • Name: SMART Health /dev/sda
    • Key: smart.health[sda]
    • Type of information: Numeric (unsigned)
    • Update interval: 1h
  3. Нажимаем Add.

Создаём второй элемент данных для температуры:

  • Name: SMART Temperature /dev/sda
  • Key: smart.temperature[sda]
  • Type of information: Numeric (unsigned)
  • Update interval: 1h

Нажимаем Add.


Шаг 8: Создание Триггеров (Triggers)

Переходим на вкладку Triggers и создаём два триггера:

  1. Первый триггер для контроля состояния диска:
    • Name: SMART Health FAILED on /dev/sda
    • Expression: last(/Template SMART Monitoring/smart.health[sda])=0
  2. Второй триггер для температурного порога:
    • Name: High Temperature on /dev/sda
    • Expression: last(/Template SMART Monitoring/smart.temperature[sda])>50

Шаг 9: Приложение Шаблона к Хосту

Применим созданный шаблон к нужному хосту:

  1. Переходим в Configuration → Hosts.
  2. Выбираем хост и нажимаем Templates.
  3. В поле Link new templates выбираем Template SMART Monitoring.
  4. Нажимаем Update.

Шаг 10: Проверка Работоспособности

Переключаемся в Monitoring → Latest data.

  1. Выбираем нужный хост и убеждаемся, что данные SMART собираются корректно.
  2. Проверяем, что триггеры срабатывают при возникновении проблем с состоянием диска или температуре.

Заключение

Теперь у вас настроена система мониторинга состояния жёстких дисков с использованием SMART в Zabbix. Этот подход поможет вовремя обнаружить потенциальные проблемы и предотвратить потерю данных.

UPD. Материал хоть и позаимствованный, но попользовавшись предложенным решением пару дней, быстро обнаружил неудобные моменты. Мониторинг быстро обнаружил умирающий диск (одновременно и хорошо и плохо), и тут начался праздник, диск, с которым проблемы пришлось искать, т.к. сообщение пришло о сервере, на котором выявлена проблема, но о том, что это за диск… Далее сам текст почти менять не буду, изменён будет только скрипт и XML файл. И да, картинки останутся так-же авторские.

Для мониторинга за жесткими дисками, в том числе за температурой в windows, будем использовать smartmontools под windows. Скрипт для автообнаружения и формирования выдачи в zabbix будет работать на powershell.

Устанавливаем smartmontools. После установки рекомендую сразу проверить работу. Для этого открываем командную строку, переходим в директорию C:\Program Files\smartmontools\bin и выполняем:

# smartctl --scan-open

smartctl в windows

Вы должны увидеть список всех дисков в системе. Дальше можете посмотреть информацию о дисках, например так:

# 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 и сам скрипт с разными параметрами.

Мониторинг SMART в windows

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

Прототипы элементов данных

И тут же триггеры.

Прототипы триггеров

И вот такую картинку вы получите на выходе, когда все диски и итемы к ним появятся на хосте и начнут собирать данные.

Итог мониторинга за дисками в windows

В общем и целом ничего сложного. Настроить мониторинг SMART и температуры дисков в windows не на много сложнее, чем в linux. Хорошо, что есть одинаковый интерфейс с одним и тем же синтаксисом для обоих дисков. В windows 10 ко всему прочему, есть полноценная система ubuntu, можно было бы и без powershell обойтись, но получилось бы не универсальное решение. Данный способ работает на всех версиях windows, начиная с XP.

опять честно заимствованный материал. Решением на zabbix 6.2 воспользовался ничего не переделывая, только подставляя свои пути.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Настройка jabber сервера на windows
  • Найти компьютер в сети windows 10 по имени
  • Виртуализация uac как включить windows 10
  • Программа uxtheme dll не предназначена для выполнения в windows
  • Предыдущие версии файлов windows 10 настройка