Скачаем и установим нижеследующие программы.
Python 3.6.4
SMART montools
Не забудьте поменять %username% на имя пользователя в системе. Полный путь можно получить при установке Python 3.6.4
Не забудьте, что запускать установку нужно от лица администратора системы.
Код принимает два параметра из командной строки — имя диска и параметр который нужно вывести. В случае запуска без параметров — происходит обнаружение дисков и на выходе получаем готовый формат который принимает zabbix-server.
Выкладываем код в любую доступную вам директорию. Главное указать этот же путь в UserParameter
На наблюдаемый хост в zabbix-agentd.conf или, если у вас открыта секция Include то в определенный в ней файл, добавить UserParameters указанные ниже
Добавление шаблона на сервер ''Zabbix''
Выложил на git — не думаю что вся репа очень позитивна — я учусь :)
Скачиваем шаблон — импортируем на сервер и добавляем на наблюдаемый хост.
Можно добавлять свои элементы данных. Логика такова — элемент данных отправляет параметры скрипту, который в свою очередь парсит вывод smartctl, если хотите что то добавить свое, нет проблем — в коде есть комментарии, которые помогут вам это сделать.
P.S. Скрипт для ленивых. С Linux уже как год работает такой же мониторинг таких же дисков, до Windows руки только дошли.
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 руки только дошли.