Скрипт + Шаблон для Windows LLD Open Hardware Monitor

Мониторинг Железа
Датчики температур
Кулера
Диски
Напряжение
и т.д.
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 214
Зарегистрирован: Вс фев 17, 2019 17:47
Репутация: 4
Откуда: Вологодская область
Контактная информация:

Скрипт + Шаблон для Windows LLD Open Hardware Monitor

Сообщение Артём Мамзиков » Вс дек 01, 2019 16:40 #1

Самое важное что нужно начинать мониторить это состояние железа! Смысл мониторить Операционную систему, работу программ и прочего если у вас умирает железо. Так что начнем мониторинг с железа его состояния!



Как работает скрипт разбор


Обнаруживаем все доступные датчик для Windows с помощью Open Hardware Monitor через скрипт который лежит на Zabbix Server. Шаблон зацепленный к узлу создает элементы которые доступны для проверки на узле с windows , далее напрямую запрашивается значение данного элемента прямо с узла. (Скрипт нужен только для обнаружения элементов)
Программка должна работать в виде службы Open Hardware Monitor (и закрыт сам Open Hardware Monitor.exe файл после настройки может мешать передаче данных службы) Ниже будет как сделать в виде службы.
OHM.jpg
OHM
Перезалил 15.06.2020 (добавлен шаблон и скрипт 3.4.1 для работы с портами кому нужно указать в макросе узла нужный порт)
Скачать Шаблон + Скрипт
Обнаружение датчиков Windows LLD OpenHardwareMonitor.7z
Обнаружение датчиков Windows LLD OpenHardwareMonitor.7z
(6.71 КБ) 5 скачиваний
Скачать Шаблоны и скрипты
Скачиваем скрипт ложим его на заббикс сервер в моем случае путь такой
/usr/local/share/zabbix/externalscripts
Делаем импорт шаблона - Добавляем к узлу шаблон На удаленных узлах должен быть агент и OHM виде службы.

Скрипт работает на запрос CMD следующего запроса:
wmic.exe /NAMESPACE:\\root\OpenHardwareMonitor PATH Sensor

Далее мы получаем таблицу и работает с ней выбирая нужные нам столбцы
CMD-OHM.jpg
CMD-OHM
Подробнее Команда WMIC – выполнить сценарий WMI в командной строке
Образец таблицы с данными
Показать
C:\Windows\System32>WMIC.exe /NAMESPACE:\\root\OpenHardwareMonitor PATH Sensor
Identifier Index InstanceId Max Min Name Parent ProcessId SensorType Value
/lpc/it8620e/voltage/0 0 3872 1,38 1,284 Voltage #1 /lpc/it8620e 6805950c-324c-4724-8f79-308e888c3472 Voltage 1,356
/amdcpu/0/clock/2 2 3854 4200,022 4000,004 CPU Core #2 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Clock 4100,015
/ram/load/0 0 3864 95,32287 42,7315 Memory /ram 6805950c-324c-4724-8f79-308e888c3472 Load 60,58934
/amdcpu/0/clock/3 3 3855 4200,021 4099,883 CPU Core #3 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Clock 4100,015
/amdcpu/0/load/2 2 3845 100 4,6875 CPU Core #2 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Load 56,25
/lpc/it8620e/voltage/3 3 3875 1,848 1,848 Voltage #4 /lpc/it8620e 6805950c-324c-4724-8f79-308e888c3472 Voltage 1,848
/ram/data/0 0 3865 3,319126 1,487904 Used Memory /ram 6805950c-324c-4724-8f79-308e888c3472 Data 2,109711
/lpc/it8620e/voltage/6 6 3878 2,232 2,22 Voltage #7 /lpc/it8620e 6805950c-324c-4724-8f79-308e888c3472 Voltage 2,232
/lpc/it8620e/voltage/4 4 3876 1,992 1,98 Voltage #5 /lpc/it8620e 6805950c-324c-4724-8f79-308e888c3472 Voltage 1,992
/amdcpu/0/load/7 7 3850 100 0 CPU Core #7 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Load 17,1875
/lpc/it8620e/control/0 0 3840 0 0 Fan Control #1 /lpc/it8620e 6805950c-324c-4724-8f79-308e888c3472 Control 0
/amdcpu/0/load/8 8 3851 100 0 CPU Core #8 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Load 9,677422
/amdcpu/0/clock/8 8 3860 4200,015 1400,004 CPU Core #8 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Clock 4100,015
/amdcpu/0/clock/4 4 3856 4200,022 4000,013 CPU Core #4 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Clock 4100,015
/amdcpu/0/load/3 3 3846 100 0 CPU Core #3 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Load 35,9375
/amdcpu/0/clock/5 5 3857 4200,02 1400,004 CPU Core #5 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Clock 4100,015
/amdcpu/0/load/4 4 3847 100 6,153846 CPU Core #4 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Load 50
/lpc/it8620e/voltage/5 5 3877 2,232 2,22 Voltage #6 /lpc/it8620e 6805950c-324c-4724-8f79-308e888c3472 Voltage 2,232
/amdcpu/0/load/0 0 3852 100 16,99219 CPU Total /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Load 30,59336
/lpc/it8620e/control/2 2 3842 0 0 Fan Control #3 /lpc/it8620e 6805950c-324c-4724-8f79-308e888c3472 Control 0
/amdcpu/0/clock/1 1 3853 4200,022 4099,883 CPU Core #1 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Clock 4100,015
/amdcpu/0/clock/0 0 3862 200,0044 199,9943 Bus Speed /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Clock 200,0007
/lpc/it8620e/voltage/1 1 3873 1,5 1,488 Voltage #2 /lpc/it8620e 6805950c-324c-4724-8f79-308e888c3472 Voltage 1,5
/lpc/it8620e/control/1 1 3841 0 0 Fan Control #2 /lpc/it8620e 6805950c-324c-4724-8f79-308e888c3472 Control 0
/lpc/it8620e/fan/0 0 3884 2385,159 2335,64 Fan #1 /lpc/it8620e 6805950c-324c-4724-8f79-308e888c3472 Fan 2368,421
/ram/data/1 1 3866 1,99408 0,1628571 Available Memory /ram 6805950c-324c-4724-8f79-308e888c3472 Data 1,372272
/lpc/it8620e/voltage/8 8 3880 2,784 2,784 VBat /lpc/it8620e 6805950c-324c-4724-8f79-308e888c3472 Voltage 2,784
/lpc/it8620e/temperature/1 1 3882 55 38 Temperature #2 /lpc/it8620e 6805950c-324c-4724-8f79-308e888c3472 Temperature 43
/lpc/it8620e/temperature/0 0 3881 34 33 Temperature #1 /lpc/it8620e 6805950c-324c-4724-8f79-308e888c3472 Temperature 33
/hdd/0/load/0 0 3870 39,86851 39,85644 Used Space /hdd/0 6805950c-324c-4724-8f79-308e888c3472 Load 39,86786
/lpc/it8620e/voltage/2 2 3874 2,052 2,04 Voltage #3 /lpc/it8620e 6805950c-324c-4724-8f79-308e888c3472 Voltage 2,04
/amdcpu/0/load/1 1 3844 100 3,125 CPU Core #1 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Load 31,25
/amdcpu/0/clock/6 6 3858 4200,016 1400,004 CPU Core #6 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Clock 4100,015
/amdcpu/0/temperature/0 0 3861 52,75 32,5 Core #1 - #8 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Temperature 34,125
/amdcpu/0/load/5 5 3848 100 0 CPU Core #5 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Load 14,28571
/amdcpu/0/clock/7 7 3859 4200,016 1400,004 CPU Core #7 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Clock 4100,015
/amdcpu/0/load/6 6 3849 100 0 CPU Core #6 /amdcpu/0 6805950c-324c-4724-8f79-308e888c3472 Load 30,15873
/lpc/it8620e/voltage/7 7 3879 3,312 3,312 Standby +3.3V /lpc/it8620e 6805950c-324c-4724-8f79-308e888c3472 Voltage 3,312
/hdd/0/temperature/0 0 3869 31 29 Temperature /hdd/0 6805950c-324c-4724-8f79-308e888c3472 Temperature 30
/lpc/it8620e/temperature/2 2 3883 69 48 Temperature #3 /lpc/it8620e 6805950c-324c-4724-8f79-308e888c3472 Temperature 50

Столбцы
Identifier - путь до устройства датчика
Index - индекс повторяются
*InstanceId - идентификатор_экземпляра ИД
Max - максимальные значения
Min - минимальное значение
*Name - Имя датчика
Parent - родитель сокращенный (неполный путь) путь от Identifier
Processid - ИД Процесса
*SensorType - Вид датчика (Voltage Напряжение V;
Clock время MHz;
Load загрузка %;
Data Данные GB;
Control управление %,
Fan вентилятор RPM;
Temperature температура C
*Value - показатели значения

[key] string ProcessId;
[key] string InstanceId;
string SensorType;
string Identifier;
string Parent;
string Name;
real32 Value;
real32 Min;
real32 Max;
sint32 Index;

Нам надо для заббикса
Имя: Датчик $SensorType $Name
Единица измерения: $SensorTyp
Новая группа элементов данных: $SensorTyp
С Заббикс сервера можно запросить данную таблицу командой:
zabbix_get -s IP-Хоста -k system.run["WMIC.exe /NAMESPACE:\\\root\OpenHardwareMonitor PATH Sensor"]
Еще примеры команд
Показать

Запрос всей таблицы датчиков (сенсоров)
WMIC.exe /NAMESPACE:\\root\OpenHardwareMonitor PATH Sensor

Запрос железа
WMIC.exe /NAMESPACE:\\root\OpenHardwareMonitor PATH Hardware

CMD
В индификатор можно подставить данные из первого столбца а ответ мы хотим из 2х столбцов
WMIC /NAMESPACE:\\root\OpenHardwareMonitor PATH Sensor WHERE "Identifier='/amdcpu/0/temperature/0'" GET Max, Min
Max Min
56,75 31,75

Получаем имя датчика для ИД 3882
WMIC.exe /NAMESPACE:\\root\OpenHardwareMonitor PATH Sensor WHERE "InstanceId='3882'" GET Name
Name
Temperature #2

Получаем категорию/группу датчиков для ИД 3882
WMIC.exe /NAMESPACE:\\root\OpenHardwareMonitor PATH Sensor WHERE "InstanceId='3882'" GET SensorType
SensorType
Temperature

Сюда подставить ID 3882 датчика и получим значение из последнего столбца
WMIC /NAMESPACE:\\root\OpenHardwareMonitor PATH Sensor WHERE "InstanceId='3882'" GET Value
Value
49

Запросы из терминала Linux на заббикс сервере через команду zabbix_get -s

Запрос всей таблицы (где есть кавычки " ставим до слешь \)
zabbix_get -s 172.16.121.7 -k system.run["WMIC.exe /NAMESPACE:\\\root\OpenHardwareMonitor PATH Sensor"]

Запрос железа
zabbix_get -s 172.16.121.7 -k system.run["WMIC.exe /NAMESPACE:\\\root\OpenHardwareMonitor PATH Hardware"]

Пример как будет выглядеть элемент узла запрос для id датчика 3882
zabbix_get -s 172.16.121.7 -p 10050 -k system.run['WMIC /NAMESPACE:\\root\OpenHardwareMonitor PATH Sensor WHERE "InstanceId='3882'" GET Value']
Ответ надо сделать пред обработку (обрезать слева Value) и останется ток значение
Value
43

Получаем число без обрезки Шаблоне нужно выбрать с плавающей точкой, иначе длинные числа выходят как строка если выбрать целое положительное значение
root@ZABBIXSERVER:~# zabbix_get -s 172.16.121.7 -p 10050 -k wmi.get["root\OpenHardwareMonitor","SELECT Value FROM Sensor WHERE "InstanceId='3882'""]
45.000000
zabbix wmi.get.jpg
zabbix wmi.get.jpg
Специфичные ключи элементов данных для Windows

Пример запроса из стандартных средств производитель материнки
root@ZABBIXSERVER:~# zabbix_get -s 172.16.121.7 -p 10050 -k wmi.get["root\cimv2","SELECT Vendor FROM Win32_ComputerSystemProduct"]
Gigabyte Technology Co., Ltd.

Элемент для шаблона заббикс
Рабочий
wmi.get[root\OpenHardwareMonitor,SELECT Value FROM Sensor WHERE InstanceId=3882]

Имя Датчик {#SENSORTYPE} Имя {#NAME} ИД {#ID}
Тип Zabbix agent
Ключ wmi.get[root\OpenHardwareMonitor,SELECT Value FROM Sensor WHERE InstanceId={#ID}]
Тип Информации Числовой с плавающей точкой
Единица измерения {#SENSORTYPE} интервал обновления 300
Было бы не плохо присвоить группы из переменой {#SENSORTYPE} но нет переменные для групп не работают

Элемент тестовый не работает в шаблоне
WMIC.exe["/NAMESPACE:\\\root\OpenHardwareMonitor PATH Sensor WHERE \"InstanceId=3882\" GET Value"]
WMIC.exe["/NAMESPACE:\\\root\OpenHardwareMonitor PATH Sensor WHERE \"InstanceId={#InstanceId}\" GET Value"]
чтобы прошли кавычки " в команду, надо их передать со слешем \" вот так, иначе они экранируют строку от пробелов
Сделать предобработку убрав слово Value и переход на новую строку \n чтобы получить значение


powershell
get-wmiobject msacpi_thermalzonetemperature -namespace "root/wmi"

так же можно скачать утилиту WMI Code Creator - утилита просмотра 900КБ
и просмотреть данные и составить команды
WMI Code Creator 2.jpg
WMI Code Creator 2
WMI Code Creator .jpg
WMI Code Creator
Если вам интересны еще другие команды для wmic данной программке можно покопаться в Исходниках OHM

Можно конечно запрашивать данные напрямую без доп программ через wmic , но тогда команды будут разными, на разные группы элементов и разное железо или вообще в целом индивидуальные. Это не удобно тут же уже собрано все в одном месте в OpenHardwareMonitor в бесплатной с открытым исходном коде программке. Так же можете взять за образец и запилить скрипт по другую программку.
Пример прямой команды wmic /namespace:\\root\wmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature


В 2х статьях ниже можно посмотреть как сделать openhardwaremonito в виде службы, в первом подробно во вторам само ставится скриптом.
Изначально было сделано и остается мониторинг через эту же утилиту но скрипт лежит на узле и работает при помощи powershell Спасибо данному разработчику данной статьи Zabbix: LLD-мониторинг железа под Windows на PowerShell
Так же написан скрипт который уже сам все ставить для powershell остается только раскомментировать датчики убрав в именах # данной программки Установка Агента Zabbix + Аппаратное обеспечение Windows

Захотелось сделать без использования powershell на основе cmd и скриптов на самом узле упростить в некотором роде задачу по сбору температуры в основном и других доп данных (хотя некоторые уже и так с агента известны например по загрузке проца и оперативки)

Что мы хотим получить:?
Самое главное это 3 столбец с ID (InstanceId) с помощь его мы сможем узнать напрямую одной командой значение Value
Далее мы же хотим знать к какой группе относится датчик и что это за датчик? Для этого используем предпоследний столбец 9 SensorType
Последний параметр Хотим знать имя датчика, а то данные есть, а откуда они что за датчик это у нас 6 столбец Name

Проблемы которые мы получаем в том что таблица состоит из пробелов без табуляции и это пол беды вся проблема в 6 столбце Name так как в именах есть пробелы и awk думает что это следующий столбец

На выходе из таблицы мы должны получить следующий вид результата например для узла 172.16.121.7
Запускаем скрипт ./OHM.sh 172.16.121.7 discovery
script-OHM.jpg
script-OHM
Или можно включить фильтрацию по решетке если решетка есть в имени (строке данную строку пропускаем для этого в скрипте нужно закоментировать одну строку и раскоментировать другую!
#obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$9}')
obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E '/#/d'|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$9}')
Использована команда |sed -E '/#/d' - которая пропускает все строки с # и не выводит их
OHM вывод разница #.jpg
OHM вывод разница #
# А если нужно выбрать только строки с определеными параметрами например температуру напряжение
obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|grep -E 'Temperature|Voltage'|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$9}')
Использована команда |grep -E 'Temperature|Voltage'| - пишите сюда какие строки нужно оставить с каким содержанием слова
OHM вывод разница  отдельные датчики.jpg
OHM вывод разница отдельные датчики
Нам нужно получить данные следующего вида из скрипта
Подробнее о Низкоуровневое обнаружение (LLD)
./OHM.sh 172.16.121.7 discovery
Показать
{"data":[
{"{#INSTANCEID}":"3872", "{#NAME}":"Voltage #1", "{#SENSORTYPE}":"Voltage"},
{"{#INSTANCEID}":"3854", "{#NAME}":"CPU Core #2", "{#SENSORTYPE}":"Clock"},
{"{#INSTANCEID}":"3864", "{#NAME}":"Memory", "{#SENSORTYPE}":"Load"},
{"{#INSTANCEID}":"3855", "{#NAME}":"CPU Core #3", "{#SENSORTYPE}":"Clock"},
{"{#INSTANCEID}":"3845", "{#NAME}":"CPU Core #2", "{#SENSORTYPE}":"Load"},
{"{#INSTANCEID}":"3875", "{#NAME}":"Voltage #4", "{#SENSORTYPE}":"Voltage"},
{"{#INSTANCEID}":"3865", "{#NAME}":"Used Memory", "{#SENSORTYPE}":"Data"},
{"{#INSTANCEID}":"3878", "{#NAME}":"Voltage #7", "{#SENSORTYPE}":"Voltage"},
{"{#INSTANCEID}":"3876", "{#NAME}":"Voltage #5", "{#SENSORTYPE}":"Voltage"},
{"{#INSTANCEID}":"3850", "{#NAME}":"CPU Core #7", "{#SENSORTYPE}":"Load"},
{"{#INSTANCEID}":"3840", "{#NAME}":"Fan Control #1", "{#SENSORTYPE}":"Control"},
{"{#INSTANCEID}":"3851", "{#NAME}":"CPU Core #8", "{#SENSORTYPE}":"Load"},
{"{#INSTANCEID}":"3860", "{#NAME}":"CPU Core #8", "{#SENSORTYPE}":"Clock"},
{"{#INSTANCEID}":"3856", "{#NAME}":"CPU Core #4", "{#SENSORTYPE}":"Clock"},
{"{#INSTANCEID}":"3846", "{#NAME}":"CPU Core #3", "{#SENSORTYPE}":"Load"},
{"{#INSTANCEID}":"3857", "{#NAME}":"CPU Core #5", "{#SENSORTYPE}":"Clock"},
{"{#INSTANCEID}":"3847", "{#NAME}":"CPU Core #4", "{#SENSORTYPE}":"Load"},
{"{#INSTANCEID}":"3877", "{#NAME}":"Voltage #6", "{#SENSORTYPE}":"Voltage"},
{"{#INSTANCEID}":"3852", "{#NAME}":"CPU Total", "{#SENSORTYPE}":"Load"},
{"{#INSTANCEID}":"3842", "{#NAME}":"Fan Control #3", "{#SENSORTYPE}":"Control"},
{"{#INSTANCEID}":"3853", "{#NAME}":"CPU Core #1", "{#SENSORTYPE}":"Clock"},
{"{#INSTANCEID}":"3862", "{#NAME}":"Bus Speed", "{#SENSORTYPE}":"Clock"},
{"{#INSTANCEID}":"3873", "{#NAME}":"Voltage #2", "{#SENSORTYPE}":"Voltage"},
{"{#INSTANCEID}":"3841", "{#NAME}":"Fan Control #2", "{#SENSORTYPE}":"Control"},
{"{#INSTANCEID}":"3884", "{#NAME}":"Fan #1", "{#SENSORTYPE}":"Fan"},
{"{#INSTANCEID}":"3866", "{#NAME}":"Available Memory Data", "{#SENSORTYPE}":"Data"},
{"{#INSTANCEID}":"3880", "{#NAME}":"VBat", "{#SENSORTYPE}":"Voltage"},
{"{#INSTANCEID}":"3882", "{#NAME}":"Temperature #2", "{#SENSORTYPE}":"Temperature"},
{"{#INSTANCEID}":"3881", "{#NAME}":"Temperature #1", "{#SENSORTYPE}":"Temperature"},
{"{#INSTANCEID}":"3870", "{#NAME}":"Used Space", "{#SENSORTYPE}":"Load"},
{"{#INSTANCEID}":"3874", "{#NAME}":"Voltage #3", "{#SENSORTYPE}":"Voltage"},
{"{#INSTANCEID}":"3844", "{#NAME}":"CPU Core #1", "{#SENSORTYPE}":"Load"},
{"{#INSTANCEID}":"3858", "{#NAME}":"CPU Core #6", "{#SENSORTYPE}":"Clock"},
{"{#INSTANCEID}":"3861", "{#NAME}":"Core #1 - #8", "{#SENSORTYPE}":"Temperature"},
{"{#INSTANCEID}":"3848", "{#NAME}":"CPU Core #5", "{#SENSORTYPE}":"Load"},
{"{#INSTANCEID}":"3859", "{#NAME}":"CPU Core #7", "{#SENSORTYPE}":"Clock"},
{"{#INSTANCEID}":"3849", "{#NAME}":"CPU Core #6", "{#SENSORTYPE}":"Load"},
{"{#INSTANCEID}":"3879", "{#NAME}":"Standby +3.3V", "{#SENSORTYPE}":"Voltage"},
{"{#INSTANCEID}":"3869", "{#NAME}":"Temperature", "{#SENSORTYPE}":"Temperature"},
{"{#INSTANCEID}":"3883", "{#NAME}":"Temperature #3", "{#SENSORTYPE}":"Temperature"}
]}

Небольшое отличие 3 версии от 4 в примерах но это не суть
zabbix JSON data discovery.jpg
zabbix JSON data discovery
Пример для одной строки данных можно Важно переменная прописывается заглавными буквами иначе Заббикс сервер не примет
{"data":[
{"{#ИМЯ ПЕРЕМЕННОЙ}":"Данные переменной", "{#NAME}":"Voltage #1", "{#SENSORTYPE}":"Voltage"}
]}

или можно так для одной переменной с данными

{"data":[
{"{#ИМЯ ПЕРЕМЕННОЙ}":"Данные переменной"}
]}
За основу взял свой же скрипт но от Linux Скрипт + Шаблон для Linux LLD LM-Sensors

Первая Версия Скрипта OHM.sh
Плюсы + данной версии
1 раз делаем запрос на хост получаем всю таблицу
Делаем сразу обработку оставляя 3 нужных нам столбца
В цикл уже для построчной обработки нам попадает всего 3 столбца (массив данных меньше проще обрабатывать)

Минус -
Нельзя допускать более одного пробела в имени датчика! Если будет 2 пробела в имени датчика сместится последний 9 столбец т е это будет 8 или 7 и в 6 столбце будет не полное имя. (Почему так потому что между 2 таблицами как раз таки есть только 2 пробела Index InstanceId Max и если настроить параметр скрипта чтоб он начинал учитывать от 3х пробелов столбцы эти 2 столбца вылетают поэтому тут заданно от 2х пробелов sed -E 's/ (
Почему нельзя сделать так запросить предпоследний столбец через $(NF-1) (можно 9 так $(NF-2)но последняя строка, с таблицы работает не так как надо т е когда делаем табуляцию добавляется еще что то в конец таблицы и выходит не NF-1 ,а NF-2. А на последней строке этого нет и для нее надо NF-1)
Так что не делайте по 2 пробела в имени и у вас все будет Хорошо с этим скриптом)))
Так же нельзя использовать переменную для групп все датчики попадают в одну группу
Триггер придется создавать вручную для элементов или сделать получать только температурные датчики и задать триггер, но для меня это не удобно так как тут и проц каждое ядро и материнка и жесткий. Я делаю вручную все ядра температуры в один триггер и если хотя один превысит сработает триггер всего один. По графикам та же ситуация либо на каждый элемент авто создание либо вручную на группу элементов.
script-OHM V1.0.jpg
script-OHM V1.0
При копирования скрипта проверить 2 пробела 's/ (
Скрипт OHM.sh
Показать
#!/bin/bash
#2019/11/28 v1.0
#При работе скрипта вся нагрузка выполнения ложится на ресурсы железа Заббикс Сервера!
#Скрипт мониторинга для OpenHardwareMonitor с LLD для Zabbix (серверный вариант)
# Автор Мамзиков Артём Андреевич Описание по скрипту viewtopic.php?f=48&t=71&p=121#p121

#Автообнаружение параметров из OpenHardwareMonitor
#Ключ: discovery , info

# $1 - это IP и порт узла подключаемого агента
# $2 - Поиск элементов вывод JSON data, info

IFS=$'\n'
JSON="{\"data\":["
SEP=""

if [[ $2 = "discovery" ]]
then
get=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`
# если требуется включение " двойных кавычек, то они должны быть экранированы обратной наклонной чертой \ потому так много слешей верху нужно по сути 2
# Запуск переменной get команды OpenHardwareMonitor

# Если ошибка в черную дыру | удаление первой строки шапки таблицы | Поиск строк более чем 2 пробела, за которой следовал не пробел,
# добавил разделители табуляции, обработка первой строки данных | вывод 3 6 и 9 (можно 9 так $(NF-2)но последняя строка с таблицы работает не так как надо) стoлбцов
obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$9}')

# Если нужно не выводить поиск элементов в которых именах присутствует # раскомментировать строку ниже, а выше закомментировать
#obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E '/#/d'|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$9}')

# А если нужно выбрать только строки с определеными параметрами например температуру напряжение
obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|grep -E 'Temperature|Voltage'|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$9}')

#Вывод для тестов настроек
#echo "${get}"
#echo "${obrtabl}"

fi
for element in $(echo "${obrtabl}" 2>/dev/null);
# 1 шаг Перебор строк в таблице в переменную element если ошибка отправка в черную дыру
do
# 2 шаг каждый столбец идет для своей переменной
# Получаем Идентифика́торы номера ID датчиков первый столбец
InstanceId=`echo "${element}"|awk '{print $1}'`
# Получаем имена датчиков средний 2 столбец самый муторный из-за пробелов)
Name=$(echo "${element}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $2}'|sed 's/[ \t]*$//')
# Получаем категорию/группу датчиков последний столбец
SensorType=`echo "${element}" |awk '{print $(NF)}'`
JSON=$JSON"$SEP\n{\"{#ID}\":\"$InstanceId\", \"{#NAME}\":\"$Name\", \"{#SENSORTYPE}\":\"$SensorType\"}"
SEP=", "
done
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON

# Получение полной информации всей таблицы ./OHM.sh[{HOST.CONN},info] смысла в этом особого нет конечно, так как данные постоянно меняются смысл например запрашивать раз в сутки весь листинг но пусть будет)

#else
if [[ $2 = "info" ]]
then
get=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`
for out in $get
do
echo "${out}"
done
#elif [[ $2 = "maxtemp" ]]
#then
#get1= запрос с фильтраций только температура
#maxc= выбор максимального значения по температуре
#for out in $maxc
#do
#do
#echo $out
#done
fi
Как создавался скрипт V1.0
Показать
Первая проблемка была в запросе с двойным слешем \\ он передавался один \ и ничего не работало все из за " двойных кавычек это тонкости на bash
сделано так get=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`

Далее проблема с обработкой таблицы 6 столбца
$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$9}')

Если на get в ответ пришло 2 ошибка то 2>/dev/null все черную дыру) дальше ничего не делаем, если все гуд то
awk NR\>1 - удаляем первую строку шапку таблицы наименование столбцов
sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;' | cat -vt - Поиск строк более чем 2 пробела, за которой следовал не пробел, добавил разделители табуляции, обработка первой строки данных Подсмотрено тут
с включеной -e опции
sed 's/было/стало/g' преобразование текста
s/ - тут 2 пробела
/t - горизонтальная табуляция;
подсмотрено тут)

|awk -F\\t '{print $3" "$6" "$9}' -Вывод 3 6 и 9 таблицы
Почему нельзя сделать так запросить предпоследний столбец через $(NF-1) (можно 9 так $(NF-2)но последняя строка, с таблицы работает не так как надо т е когда делаем табуляцию добавляется еще что то в конец таблицы и выходит не NF-1 ,а NF-2. А на последней строке этого нет и для нее надо NF-1)
$(NF) - последний столбец $(NF-1) - предпоследний и т.д.

Так же была попытка сделать так жестко задать ширину столбцов Обратите внимание на 2 пробела между 2 таблицами!
Identifier Index InstanceId Max Min Name Parent ProcessId SensorType Value
10 + 18 5 + 2 10+2 3 + 7 3+8 4+14 6 +8 9+29 10+3 5+3?
Ширина столбов с пробелами
1 28 символов
2 7 символов
3 12 символов
4 10 символов
5 11 символов
6 18 символов
7 14 символов
8 38 символов
9 13 символов
10 8 символов

get1=$(echo "${get}" 2>/dev/null|awk NR\>1|awk 'BEGIN{FIELDWIDTHS="28 7 12 10 11 18 14 38 13 8"}{print $3" "$6" "$9}')

Но как показала практика опять же 6 столбец отличается в ширине где имя длине столбец расширяется и жестко заданные поля уже не подходят(

Далее вариант был а не расчитать ли ширину каждого столбца с пробелами для каждого хоста индивидуально и передать переменными

#awk NR==1|awk '{print $1}'|wc -m)
#kss=$ awk '{print $1" "$2" "length() }') "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "$10"
#get1=$(echo "${get}" 2>/dev/null|awk NR\>1|awk 'BEGIN{FIELDWIDTHS="$kss"}{print $3" "$6" "$9}')
Но тут получилось высчитать число символов все строки, число текста все строки без пробелов, число названия одной какой то таблицы но чтоб посчитать каждый столбец с пробелами ширину нет.
Можно было попробовать узнать пробелы после имен таблиц высчитать пробелы сложить их с длиной имен получить ширину столбцов циклами но слишком много операция ради такого действия.

Вообщем пришли к такому решению описанному выше
$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$9}')

Далее запускается цикл for обработки построчно и передачу в переменные и формирование общей data
fi
for element in $(echo "${obrtabl}" 2>/dev/null);
# 1шаг Перебор строк в таблице в переменную element если ошибка отправка в черную дыру
do
# 2шаг каждый столбец идет для своей переменной
# Получаем Индифиционные номера ID датчиков первый столбец
InstanceId=`echo "${element}"|awk '{print $1}'`
# Получаем имена датчиков средний 2 столбец самый муторный из-за пробелов)
Name=$(echo "${element}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $2}'sed '|s/[ \t]*$//')
sed 's/[ \t]*$//' -Удалить все пробелы и символы табуляции в конце каждой строки файла (смотрите примечание по табуляции в конце документа) или можно убрать все пробелы удалить в имени все слитно будет tr -d ' '
разные примеры команд
# Получаем категорию/группу датчиков последний столбец
SensorType=`echo "${element}" |awk '{print $(NF)}'`
JSON=$JSON"$SEP{\"{#InstanceId}\":\"$InstanceId\", \"{#Name}\":\"$Name\", \"{#SensorType}\":\"$SensorType\"}"
SEP=", "
done
# Выводим результат в json data
JSON=$JSON"]}"
echo $JSON

Не создавались элементы писал что уже существует не шли переменные хотя вроде data выходила нормальной оказалось бонально
Cannot create item: item already exists
Надо было заглавными
Было JSON=$JSON"$SEP\n{\"{#InstanceId}\":\"$InstanceId\", \"{#Name}\":\"$Name\", \"{#SensorType}\":\"$SensorType\"}"
стало JSON=$JSON"$SEP\n{\"{#ID}\":\"$InstanceId\", \"{#NAME}\":\"$Name\", \"{#SENSORTYPE}\":\"$SensorType\"}"

В элементе wmi.get[root\OpenHardwareMonitor,SELECT Value FROM Sensor WHERE InstanceId={#ID}]
Было выставлено целое положительно число заработали не все элементы, выдало что строка, где длинное значение вылечилось значение с плавающей точкой.
Шаблон V1.0.jpg
Шаблон V1.0
Шаблон Элемент V1.0.jpg
Шаблон Элемент V1.0
Шаблон Элементы узла V1.0.jpg
Шаблон Элементы узла V1.0
В скрипте 2.0 выходить очень много запросов на хост это нагрузка как на сервер так и на удаленный узел и сеть, плюс это скрипт не доделанный не рабочий так оставлен
Скрипт V 2.0
Скрипт OHM2.sh
Показать
#!/bin/bash
#2019/11/28 v2.0
#При работе скрипта вся нагрузка выполнения ложится на ресурсы железа Заббикс Сервера!
#Скрипт мониторинга для OpenHardwareMonitor с LLD для Zabbix (серверный вариант)

#Автообнаружение параметров из OpenHardwareMonitor
#Ключ: discovery

# $1 - это IP и порт узла подключаемого агента
# $2 - Поиск элементов вывод JSON data, info

IFS=$'\n'
JSON="{\"data\":["
SEP=""

if [[ $2 = "discovery" ]]
then
get=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`
# если требуется включение " двойных кавычек, то они должны быть экранированы обратной наклонной чертой \ потому так много слешей верху нужно по сути 2
# Запуск переменной get команды OpenHardwareMonitor

# Если ошибка в черную дыру | удаление первой строки шапки таблицы | Оставляем только 3 таблицу с ID InstanceId
obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|awk '{print $3}')

# Если нужно не выводить поиск элементов в которых именах присутствует # раскомментировать строку ниже, а выше закомментировать
#obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|awk '{print $3}')

#Вывод для тестов настроек
#echo "${get}"
#echo "${obrtabl}"

fi
for element in $(echo "${obrtabl}" 2>/dev/null);
# 1 шаг Перебор строк в таблице в переменную element если ошибка отправка в черную дыру
do
# 2 шаг для каждого ID элемента запрашиваем имя и категорию
# Получаем Идентифика́торы номера ID датчиков первый столбец
InstanceId=`echo "${element}"|awk '{print $1}'`
# Получаем имена датчиков
Name=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor WHERE "InstanceId=${InstanceId}" GET Name"]`
# Получаем категорию/группу датчиков
SensorType=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor WHERE "InstanceId=${InstanceId}" GET SensorType"]`
JSON=$JSON"$SEP{\"{#InstanceId}\":\"$InstanceId\", \"{#Name}\":\"$Name\", \"{#SensorType}\":\"$SensorType\"}"
SEP=", "
done
# Выводим результат в json data
JSON=$JSON"]}"
echo $JSON

# Получение полной информации всей таблицы ./OHM.sh[{HOST.CONN},info] смысла в этом особого нет конечно, так как данные постоянно меняются смысл например за$

#else
#if [[ $2 = "info" ]]
#then
#get=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`
#for out in $get
#do
#echo "${out}"
#done
#elif [[ $2 = "maxtemp" ]]
#then
#get1=
#maxc=
#for out in $maxc
#do
#do
#echo $out
#done
#fi
Скрипт V3.0
Тут мы получим Имена: Тип оборудования и Имя оборудования будет более понятно в элементе что есть что но понятно это дает немного нагрузки на доп обработку скриптом тут уже вам решать использовать V1.0 или V3.0
Используются обе таблицы Sensor (как в скрипте V1.0) и добавлена 2 таблица Hardware
В начале скрипта запрашиваем обе таблицы, Hardware обрабатываем и оставляем 1 2 4 столбцы.

Далее будем сравнивать из 1 таблицы Sensor Столбец Parent , а во 2 таблице Hardware столбец Identifier

В цикл добавляем из первой таблицы Sensor Столбец Parent

Далее в цикл
добавляем вывод 2 таблицы Hardware в ней ищем строки содержащие $Parent и оставляем 1 столбец
так же делаем для (4) в нашем же случае это 3 столбец он же последний, он содержит пробелы в именах по этому делаем не учитывать один пробел все аналогично первому столбцу.
OHM 2 команды.jpg
OHM 2 таблицы
OHMV3.0script.jpg
OHMV3.0script
Выход скрипта V3.0.jpg
Выход скрипта V3.0
Scripts-OHM-V3.0.sh
Показать
#!/bin/bash
#2019/12/03 v3.0
#При работе скрипта вся нагрузка выполнения ложится на ресурсы железа Заббикс Сервера!
#Скрипт мониторинга для OpenHardwareMonitor с LLD для Zabbix (серверный вариант)
# Автор Мамзиков Артём Андреевич Описание по скрипту viewtopic.php?f=48&t=71&p=121#p121

#Автообнаружение параметров из OpenHardwareMonitor
#Ключ: discovery , info

# $1 - это IP и порт узла подключаемого агента
# $2 - Поиск элементов вывод JSON data, info

IFS=$'\n'
JSON="{\"data\":["
SEP=""

if [[ $2 = "discovery" ]]
then
get=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`
# если требуется включение " двойных кавычек, то они должны быть экранированы обратной наклонной чертой \ потому так много слешей верху нужно по сути 2
# Запуск переменной get команды OpenHardwareMonitor

# Запрос имен и типа железа
gethd=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Hardware"]`

# Оставляем нужные нам слобцы по железу (делаем между ними 2 пробела)
obrtablhd=$(echo "${gethd}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $1" "$2" "$4}')

# Если ошибка в черную дыру | удаление первой строки шапки таблицы | Поиск строк более чем 2 пробела, за которой следовал не пробел,
# добавил разделители табуляции, обработка первой строки данных | вывод 3 6 и 9 (можно 9 так $(NF-2)но последняя строка с таблицы работает не так как надо) стoлбцов
obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$9}')

# Если нужно не выводить поиск элементов в которых именах присутствует # раскомментировать строку ниже, а выше закомментировать
#obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E '/#/d'|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$9}')

# А если нужно выбрать только строки с определеными параметрами например температуру напряжение
#obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|grep -E 'Temperature|Voltage'|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$9}')

#Вывод для тестов настроек
#echo "${get}"
#echo "${obrtabl}"
#echo "${obrtablhd}"

fi
for element in $(echo "${obrtabl}" 2>/dev/null);
# 1 шаг Перебор строк в таблице в переменную element если ошибка отправка в черную дыру
do
# 2 шаг каждый столбец идет для своей переменной
# Получаем Идентифика́торы номера ID датчиков первый столбец
InstanceId=`echo "${element}"|awk '{print $1}'`
# Получаем имена датчиков средний 2 столбец самый муторный из-за пробелов)
Name=$(echo "${element}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $2}'|sed 's/[ \t]*$//')
# Получаем категорию/группу датчиков последний столбец
SensorType=`echo "${element}" |awk '{print $(NF)}'`
# Получаем Parent для подстановки имен железа
Parent=`echo "${element}"|awk '{print $(NF-1)}'`

# Получаем Тип оборудования
HardwareType=`echo "${obrtablhd}"|grep -E "${Parent}"|awk '{print $1}'`
# Получаем имя железа (NF или $3)
Namehd=$(echo "${obrtablhd}"|grep -E "${Parent}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $(NF)}'|sed 's/[ \t]*$//')

JSON=$JSON"$SEP\n{\"{#ID}\":\"$InstanceId\", \"{#NAME}\":\"$Name\", \"{#SENSORTYPE}\":\"$SensorType\", \"{#HARDTYPE}\":\"$HardwareType\", \"{#HARDNAME}\":\"$Namehd\"}"
SEP=", "
done
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON

# Получение полной информации всей таблицы ./OHM.sh[{HOST.CONN},info] смысла в этом особого нет конечно, так как данные постоянно меняются смысл например запрашивать раз в сутки весь листинг но пусть будет)

#else
if [[ $2 = "info" ]]
then
get=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`
for out in $get
do
echo "${out}"
done
#elif [[ $2 = "maxtemp" ]]
#then
#get1= запрос с фильтраций только температура
#maxc= выбор максимального значения по температуре
#for out in $maxc
#do
#do
#echo $out
#done
fi
В чем отличие скрипта 3.0 от 1.0
Показать
Добавлено
# Запрос имен и типа железа таблицы
gethd=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Hardware"]`

# Оставляем нужные нам слобцы 1 2 и 4 по железу (делаем между ними 2 пробела)
obrtablhd=$(echo "${gethd}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $1" "$2" "$4}')
переменая = выводим таблица железом еасли ошибка в черную дыру | вырезаем шапку таблицы |учтываем столбцы от 2х пробелов делаем табуляцию | выводим 1 2 и 4 столбец
Дальше уже учитаваем их как 1 2 и 3 столбец

Добавляем 7 столбец в вывод сенсора
obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$9}')

Добавляем в цикл for
# Получаем Parent для подстановки имен железа
Parent=`echo "${element}"|awk '{print $(NF-1)}'` выводим предпоследний $7 столбец построчно

и для второй таблицы
# Получаем Тип оборудования
HardwareType=`echo "${obrtablhd}"|grep -E "${Parent}"|awk '{print $1}'`
Переменая = вывод 2 таблицы железа 3х столбцов | поиск строк содержащие данные из 7 столбца совпали | выводим построчно 1 столбец 2 таблицы железа
# Получаем имя железа (NF или $3)
Namehd=$(echo "${obrtablhd}"|grep -E "${Parent}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $(NF)}'|sed 's/[ \t]*$//')
Переменая = вывод 2 таблицы железа 3х столбцов | поиск строк содержащие данные из 7 столбца совпали |добавляем табуляцию для структуры таблицы так как в столбце в именах есть пробелы учитываем для таблицы от 2х пробелов | выводим построчно 3 последний столбец 2 таблицы железа

Добавляем элементы вывод
JSON=$JSON"$SEP\n{\"{#ID}\":\"$InstanceId\", \"{#NAME}\":\"$Name\", \"{#SENSORTYPE}\":\"$SensorType\", \"{#HARDTYPE}\":\"$HardwareType\", \"{#HARDNAME}\":\"$Namehd\"}"

Все остальное идентично скрипту V1.0

Скрипт версии 3.1 Добавлено унаследовать родитель для датчиков если он есть
OHM3.1.sh
Показать
#!/bin/bash
#2019/12/04 v3.1
#При работе скрипта вся нагрузка выполнения ложится на ресурсы железа Заббикс Сервера!
#Скрипт мониторинга для OpenHardwareMonitor с LLD для Zabbix (серверный вариант)
# Автор Мамзиков Артём Андреевич Описание по скрипту viewtopic.php?f=48&t=71&p=121#p121

#Автообнаружение параметров из OpenHardwareMonitor
#Ключ: discovery , info

# $1 - это IP и порт узла подключаемого агента
# $2 - Поиск элементов вывод JSON data, info

IFS=$'\n'
JSON="{\"data\":["
SEP=""

if [[ $2 = "discovery" ]]
then
get=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`
# если требуется включение " двойных кавычек, то они должны быть экранированы обратной наклонной чертой \ потому так много слешей верху нужно по сути 2
# Запуск переменной get команды OpenHardwareMonitor

# Запрос имен и типа железа
gethd=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Hardware"]`

# Оставляем нужные нам слобцы по железу (делаем между ними 2 пробела)
obrtablhd=$(echo "${gethd}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $1" "$2" "$4}')

# Выбираем родителя датчика который показывает параметры смотрим 2 и 5 таблицу
tablparent=$(echo "${gethd}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $2" "$5}')

# Если ошибка в черную дыру | удаление первой строки шапки таблицы | Поиск строк более чем 2 пробела, за которой следовал не пробел,
# добавил разделители табуляции, обработка первой строки данных | вывод 3 6 и 9 (можно 9 так $(NF-2)но последняя строка с таблицы работает не так как надо) стoлбцов
obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$9}')

# Если нужно не выводить поиск элементов в которых именах присутствует # раскомментировать строку ниже, а выше закомментировать
#obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E '/#/d'|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$9}')

# А если нужно выбрать только строки с определеными параметрами например температуру напряжение
#obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|grep -E 'Temperature|Voltage'|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$9}')

#Вывод для тестов настроек
#echo "${get}"
#echo "${obrtabl}"
#echo "${obrtablhd}"

fi
for element in $(echo "${obrtabl}" 2>/dev/null);
# 1 шаг Перебор строк в таблице в переменную element если ошибка отправка в черную дыру
do
# 2 шаг каждый столбец идет для своей переменной
# Получаем Идентифика́торы номера ID датчиков первый столбец
InstanceId=`echo "${element}"|awk '{print $1}'`
# Получаем имена датчиков средний 2 столбец самый муторный из-за пробелов)
Name=$(echo "${element}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $2}'|sed 's/[ \t]*$//')
# Получаем категорию/группу датчиков последний столбец
SensorType=`echo "${element}" |awk '{print $(NF)}'`
# Получаем Parent для подстановки имен железа
Parent=`echo "${element}"|awk '{print $(NF-1)}'`

# Получаем Тип оборудования
HardwareType=`echo "${obrtablhd}"|grep -E "${Parent}"|awk '{print $1}'`
# Получаем имя железа (NF или $3)
Namehd=$(echo "${obrtablhd}"|grep -E "${Parent}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $(NF)}'|sed 's/[ \t]*$//')

# Выявляем родителя чипа датчиков если он есть
# Берем со 2 таблицы 2 и 4 столбец (хотя в 4 попадет 5) в сравнении со столбцом-7 1-таблицы получаем ответ 4 столбца 2 таблицы
sopost=`echo "${tablparent}"|grep -E "${Parent}"|awk '{print $2}'`
# Во второй таблице ищем соответсвие к имени из параметра выше
roditel=$(echo "${obrtablhd}"|grep -E "${sopost}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $(NF)}'|sed 's/[ \t]*$//')
# Тип родителя
rodtip=`echo "${obrtablhd}"|grep -E "${sopost}"|awk '{print $1}'`

JSON=$JSON"$SEP\n{\"{#ID}\":\"$InstanceId\", \"{#NAME}\":\"$Name\", \"{#SENSORTYPE}\":\"$SensorType\", \"{#HARDTYPE}\":\"$HardwareType\", \"{#HARDNAME}\":\"$Namehd\", \"{#RODITEL}\":\"$roditel\", \"{#RODTIP}\":\"$rodtip\"}"
SEP=", "
done
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON

# Получение полной информации всей таблицы ./OHM.sh[{HOST.CONN},info] смысла в этом особого нет конечно, так как данные постоянно меняются смысл например запрашивать раз в сутки весь листинг но пусть будет)

#else
if [[ $2 = "info" ]]
then
get=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`
for out in $get
do
echo "${out}"
done
#elif [[ $2 = "maxtemp" ]]
#then
#get1= запрос с фильтраций только температура
#maxc= выбор максимального значения по температуре
#for out in $maxc
#do
#do
#echo $out
#done
fi
Изменения в 3.1
Показать
Добавлено

# Выбираем родителя датчика который показывает параметры смотрим 2 и 5 столбцы 2 таблицы железа
tablparent=$(echo "${gethd}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $2" "$5}')

В цикл добавлено

# Выявляем родителя чипа датчиков если он есть
# Берем со 2 таблицы 2 и 4 столбец (хотя в 4 попадет 5) в сравнении со столбцом-7 1-таблицы получаем ответ 4 столбца 2 таблицы
sopost=`echo "${tablparent}"|grep -E "${Parent}"|awk '{print $2}'`
# Во второй таблице ищем соответсвие к имени из параметра выше
roditel=$(echo "${obrtablhd}"|grep -E "${sopost}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $(NF)}'|sed 's/[ \t]*$//')
# Тип родителя
rodtip=`echo "${obrtablhd}"|grep -E "${sopost}"|awk '{print $1}'`

sopost= выводим 2 таблицу с железом 2 и 5 стобец, ищем стороки в цикле совпадающие с 1 таблицей 7 столбцом Parent и выводим совпадения столбца 2. Т.е. это 2 таблица железа столбец 5 (Parent) сюдаже попадет последний столбец если предыдущий пустой но это нам не мешает

roditel= выводим 2 таблица железа 1 2 и 4 столбец ищем там совпадения из sopost (это у нас таже таблица столбец Parent сам собой он совпасть не может так как 5 столбец не выводится) далее у нас в именах есть пробелы опять применяем табуляцию и найденые совпадения выводи послдений столбец это у нас Name таблицы железа обрезаем в конце пробел

rodtip= выводим 2 таблица железа 1 2 и 4 столбец ищем там совпадения из sopost (это у нас таже таблица столбец Parent сам собой он совпасть не может так как 5 столбец не выводится) и выводим совпадения показать 1 столбец таблицы 2 железа

Все это у нас в цикле перебирается для каждого ID первой таблицы

Ну и добавляем это все вывод Получаем более полную картину что от куда, но и нагрузка возрастает на обработку
JSON=$JSON"$SEP\n{\"{#ID}\":\"$InstanceId\", \"{#NAME}\":\"$Name\", \"{#SENSORTYPE}\":\"$SensorType\", \"{#HARDTYPE}\":\"$HardwareType\", \"{#HARDNAME}\":\"$Namehd\", \"{#RODITEL}\":\"$roditel\", \"{#RODTIP}\":\"$rodtip\"}"
ScriptOHM3.1.jpg
ScriptOHM3.1
Выход скрипта V3.1.jpg
Выход скрипта V3.1
Элементы OHM3.1.jpg
Элементы OHM3.1
Данные OHM3.1.jpg
Данные OHM3.1
Скрипт версии 3.3 (разделены процессоры если их больше 1 сделан вывод материнской платы)
возможно это был глюк один номер id на 2 проца но разные ид процесса сейчас уже все отображается корректно но зависимость добавлена на такой случай.
Имена 2 проца OpenHardwareMonitor V3 3.jpg
Имена 2 проца OpenHardwareMonitor V3 3
Изменения в шаблоне 03.2020 добавлено прототип группы в прототипе элемента
OHM протатип групп.jpg
OHM прототип груп
Последний раз редактировалось Артём Мамзиков Пн янв 27, 2020 17:46, всего редактировалось 14 раз.

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 214
Зарегистрирован: Вс фев 17, 2019 17:47
Репутация: 4
Откуда: Вологодская область
Контактная информация:

Скрипт + Шаблон для Windows LLD Open Hardware Monitor

Сообщение Артём Мамзиков » Пт дек 13, 2019 16:31 #2

OHM3.3.sh
Показать
#!/bin/bash
#2019/12/07 v3.3
#При работе скрипта вся нагрузка выполнения ложится на ресурсы железа Заббикс Сервера!
#Скрипт мониторинга для OpenHardwareMonitor с LLD для Zabbix (серверный вариант)
# Автор Мамзиков Артём Андреевич Описание по скрипту viewtopic.php?f=48&t=71&p=121#p121

#Автообнаружение параметров из OpenHardwareMonitor
#Ключ: discovery , info

# $1 - это IP и порт узла подключаемого агента
# $2 - Поиск элементов вывод JSON data, info

IFS=$'\n'
JSON="{\"data\":["
SEP=""

if [[ $2 = "discovery" ]]
then
get=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`
# если требуется включение " двойных кавычек, то они должны быть экранированы обратной наклонной чертой \ потому так много слешей верху нужно по сути 2
# Запуск переменной get команды OpenHardwareMonitor

# Запрос имен и типа железа
gethd=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Hardware"]`

# Оставляем нужные нам слобцы по железу (делаем между ними 2 пробела)
obrtablhd=$(echo "${gethd}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $1" "$2" "$4}')

# Пришлось сделать отдельную переменую так как в родитель попадает параметр Процесс ИД когда столбец родитель пустой
# С последним столбцом по железу (делаем между ними 2 пробела)
obrhartabl=$(echo "${gethd}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $1" "$2" "$4" "$5" "$6}')

# Выбираем родителя датчика который показывает параметры смотрим 2 и 5 таблицу
tablparent=$(echo "${gethd}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $2" "$5}')

# Если ошибка в черную дыру | удаление первой строки шапки таблицы | Поиск строк более чем 2 пробела, за которой следовал не пробел,
# добавил разделители табуляции, обработка первой строки данных | вывод 3 6 и 9 (можно 9 так $(NF-2)но последняя строка с таблицы работает не так как надо) стoлбцов
obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$8" "$9}')

# Если нужно не выводить поиск элементов в которых именах присутствует # раскомментировать строку ниже, а выше закомментировать
#obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E '/#/d'|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$8" "$9}')

# А если нужно выбрать только строки с определеными параметрами например температуру напряжение
#obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|grep -E 'Temperature|Voltage'|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$8" "$9}')

#Вывод для тестов настроек
#echo "${get}"
#echo "${obrtabl}"
#echo "${obrtablhd}"

fi
for element in $(echo "${obrtabl}" 2>/dev/null);
# 1 шаг Перебор строк в таблице в переменную element если ошибка отправка в черную дыру
do
# 2 шаг каждый столбец идет для своей переменной
# Получаем Идентифика́торы номера ID датчиков первый столбец
InstanceId=`echo "${element}"|awk '{print $1}'`
# Получаем имена датчиков средний 2 столбец самый муторный из-за пробелов)
Name=$(echo "${element}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $2}'|sed 's/[ \t]*$//')
# Получаем категорию/группу датчиков последний столбец
SensorType=`echo "${element}" |awk '{print $(NF)}'`
# Получаем Parent для подстановки имен железа
Parent=`echo "${element}"|awk '{print $(NF-2)}'`
# Добавление проверки по ИД для серверов 2 процессора иначе оба имени попадают в один ответ(
Processid=`echo "${element}"|awk '{print $(NF-1)}'`

# Получаем Тип оборудования работа со 2 таблицей
HardwareType=`echo "${obrhartabl}"|grep -E "${Parent}".*"${Processid}"|awk '{print $1}'`
# Получаем имя железа (NF-1 или $3)
Namehd=$(echo "${obrhartabl}"|grep -E "${Parent}".*"${Processid}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3}'|sed 's/[ \t]*$//')

# Выявляем родителя чипа датчиков если он есть
# Берем со 2 таблицы 2 и 5 столбец (хотя в 5 попадет 6) в сравнении со столбцом-7 1-таблицы получаем ответ 5 столбца 2 таблицы
sopost=`echo "${tablparent}"|grep -E "${Parent}"|awk '{print $2}'`
# Во второй таблице ищем соответсвие к имени из параметра выше
roditel=$(echo "${obrtablhd}"|grep -E "${sopost}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $(NF)}'|sed 's/[ \t]*$//')
# Тип родителя
rodtip=`echo "${obrtablhd}"|grep -E "${sopost}"|awk '{print $1}'`

# Модель Материнской платы выволить всегда mainboard
#mainboard=$(echo "${obrhartabl}"|grep -E Mainboard.*/mainboard.*"${Processid}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3}'|sed 's/[ \t]*$//')

# если есть родитель в не учитываем материнку выйдет как родитель
if [ -z "${roditel}" ]; then
mainboard=$(echo "${obrhartabl}"|grep -E Mainboard.*/mainboard.*"${Processid}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3}'|sed 's/[ \t]*$//')
else
mainboard=
fi

JSON=$JSON"$SEP\n{\"{#ID}\":\"$InstanceId\", \"{#NAME}\":\"$Name\", \"{#SENSORTYPE}\":\"$SensorType\", \"{#HARDTYPE}\":\"$HardwareType\", \"{#HARDNAME}\":\"$Namehd\", \"{#RODITEL}\":\"$roditel\", \"{#RODTIP}\":\"$rodtip\", \"{#MAINBOARD}\":\"$mainboard\"}"
SEP=", "
done
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON

# Получение полной информации всей таблицы ./OHM.sh[{HOST.CONN},info] смысла в этом особого нет конечно, так как данные постоянно меняются смысл например запрашивать раз в сутки весь листинг но пусть будет)

#else
if [[ $2 = "info" ]]
then
get=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`
for out in $get
do
echo "${out}"
done
#elif [[ $2 = "maxtemp" ]]
#then
#get1= запрос с фильтраций только температура
#maxc= выбор максимального значения по температуре
#for out in $maxc
#do
#do
#echo $out
#done
fi
команды
Показать
#!/bin/bash
if [ -n "$num" ]; then
"переменная что-то имеет и можно запустить другой процесс"
else
echo "пустая переменная, останавливаем скрипт"
exit 0;
fi

-z строка пуста
-n строка не пуста
=, (==) строки равны
!= строки неравны
-eq равно
-ne неравно
-lt,(< ) меньше
-le,(<=) меньше или равно
-gt,(>) больше
-ge,(>=) больше или равно
! отрицание логического выражения
-a,(&&) логическое «И»
-o,(||) логическое «ИЛИ»
Изменения в 3.3
Показать
С таблицы 1 добавляем 8 столбец
obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$8" "$9}')

С таблицы 2 по железу добавляем столбец 5 и 6
# Пришлось сделать отдельную переменую так как в родитель попадает параметр Процесс ИД когда столбец родитель пустой
# С последним столбцом по железу (делаем между ними 2 пробела)
obrhartabl=$(echo "${gethd}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $1" "$2" "$4" "$5" "$6}')

# Получаем Тип оборудования работа со 2 таблицей
HardwareType=`echo "${obrhartabl}"|grep -E "${Parent}".*"${Processid}"|awk '{print $1}'`
# Получаем имя железа (NF-1 или $3)
Namehd=$(echo "${obrhartabl}"|grep -E "${Parent}".*"${Processid}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3}'|sed 's/[ \t]*$//')

Сдвигаем вывод столбцов
# Получаем категорию/группу датчиков последний столбец
SensorType=`echo "${element}" |awk '{print $(NF)}'`
# Получаем Parent для подстановки имен железа
Parent=`echo "${element}"|awk '{print $(NF-2)}'`

Новая переменная
# Добавление проверки по ИД для серверов 2 процессора иначе оба имени попадают в один ответ(
Processid=`echo "${element}"|awk '{print $(NF-1)}'`

# если есть родитель в не учитываем материнку выйдет как родитель
if [ -z "${roditel}" ]; then
mainboard=$(echo "${obrhartabl}"|grep -E Mainboard.*/mainboard.*"${Processid}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3}'|sed 's/[ \t]*$//')
else
mainboard=
fi
Скрипт V3.4 Добавлено единицы измерения в зависимости от категории датчика
OHM3.4.sh
Показать
#!/bin/bash
#2019/12/14 v3.4
#При работе скрипта вся нагрузка выполнения ложится на ресурсы железа Заббикс Сервера!
#Скрипт мониторинга для OpenHardwareMonitor с LLD для Zabbix (серверный вариант)
# Автор Мамзиков Артём Андреевич Описание по скрипту viewtopic.php?f=48&t=71&p=121#p121

#Автообнаружение параметров из OpenHardwareMonitor
#Ключ: discovery , info

# $1 - это IP и порт узла подключаемого агента
# $2 - Поиск элементов вывод JSON data, info

IFS=$'\n'
JSON="{\"data\":["
SEP=""

if [[ $2 = "discovery" ]]
then
get=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`
# если требуется включение " двойных кавычек, то они должны быть экранированы обратной наклонной чертой \ потому так много слешей верху нужно по сути 2
# Запуск переменной get команды OpenHardwareMonitor

# Запрос имен и типа железа
gethd=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Hardware"]`

# Оставляем нужные нам слобцы по железу (делаем между ними 2 пробела)
obrtablhd=$(echo "${gethd}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $1" "$2" "$4}')

# Пришлось сделать отдельную переменую так как в родитель попадает параметр Процесс ИД когда столбец родитель пустой
# С последним столбцом по железу (делаем между ними 2 пробела)
obrhartabl=$(echo "${gethd}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $1" "$2" "$4" "$5" "$6}')

# Выбираем родителя датчика который показывает параметры смотрим 2 и 5 таблицу
tablparent=$(echo "${gethd}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $2" "$5}')

# Если ошибка в черную дыру | удаление первой строки шапки таблицы | Поиск строк более чем 2 пробела, за которой следовал не пробел,
# добавил разделители табуляции, обработка первой строки данных | вывод 3 6 и 9 (можно 9 так $(NF-2)но последняя строка с таблицы работает не так как надо) стoлбцов
obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$8" "$9}')

# Если нужно не выводить поиск элементов в которых именах присутствует # раскомментировать строку ниже, а выше закомментировать
#obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E '/#/d'|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$8" "$9}')

# А если нужно выбрать только строки с определеными параметрами например температуру напряжение
#obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|grep -E 'Temperature|Voltage'|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$8" "$9}')

#Вывод для тестов настроек
#echo "${get}"
#echo "${obrtabl}"
#echo "${obrtablhd}"

fi
for element in $(echo "${obrtabl}" 2>/dev/null);
# 1 шаг Перебор строк в таблице в переменную element если ошибка отправка в черную дыру
do
# 2 шаг каждый столбец идет для своей переменной
# Получаем Идентифика́торы номера ID датчиков первый столбец
InstanceId=`echo "${element}"|awk '{print $1}'`
# Получаем имена датчиков средний 2 столбец самый муторный из-за пробелов)
Name=$(echo "${element}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $2}'|sed 's/[ \t]*$//')
# Получаем категорию/группу датчиков последний столбец
SensorType=`echo "${element}" |awk '{print $(NF)}'`
# Получаем Parent для подстановки имен железа
Parent=`echo "${element}"|awk '{print $(NF-2)}'`
# Добавление проверки по ИД для серверов 2 процессора иначе оба имени попадают в один ответ(
Processid=`echo "${element}"|awk '{print $(NF-1)}'`

# Получаем Тип оборудования работа со 2 таблицей
HardwareType=`echo "${obrhartabl}"|grep -E "${Parent}".*"${Processid}"|awk '{print $1}'`
# Получаем имя железа (NF-1 или $3)
Namehd=$(echo "${obrhartabl}"|grep -E "${Parent}".*"${Processid}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3}'|sed 's/[ \t]*$//')

# Выявляем родителя чипа датчиков если он есть
# Берем со 2 таблицы 2 и 5 столбец (хотя в 5 попадет 6) в сравнении со столбцом-7 1-таблицы получаем ответ 5 столбца 2 таблицы
sopost=`echo "${tablparent}"|grep -E "${Parent}"|awk '{print $2}'`
# Во второй таблице ищем соответсвие к имени из параметра выше
roditel=$(echo "${obrtablhd}"|grep -E "${sopost}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $(NF)}'|sed 's/[ \t]*$//')
# Тип родителя
rodtip=`echo "${obrtablhd}"|grep -E "${sopost}"|awk '{print $1}'`

case $SensorType in
*Clock*)
UINTS="MHz"
;;
*Load*|*Control*)
UINTS="%"
;;
*Temperature*)
UINTS="°C"
;;
*Data*)
UINTS="GB"
;;
*Fan*)
UINTS="RPM"
;;
*Voltage*)
UINTS="V"
;;
esac

# Модель Материнской платы выволить всегда mainboard
#mainboard=$(echo "${obrhartabl}"|grep -E Mainboard.*/mainboard.*"${Processid}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3}'|sed 's/[ \t]*$//')

# если есть родитель в не учитываем материнку выйдет как родитель
if [ -z "${roditel}" ]; then
mainboard=$(echo "${obrhartabl}"|grep -E Mainboard.*/mainboard.*"${Processid}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3}'|sed 's/[ \t]*$//')
else
mainboard=
fi

JSON=$JSON"$SEP\n{\"{#ID}\":\"$InstanceId\", \"{#NAME}\":\"$Name\", \"{#SENSORTYPE}\":\"$SensorType\", \"{#UINTS}\":\"$UINTS\", \"{#HARDTYPE}\":\"$HardwareType\", \"{#HARDNAME}\":\"$Namehd\", \"{#RODITEL}\":\"$roditel\", \"{#RODTIP}\":\"$rodtip\", \"{#MAINBOARD}\":\"$mainboard\"}"
SEP=", "
done
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON

# Получение полной информации всей таблицы ./OHM.sh[{HOST.CONN},info] смысла в этом особого нет конечно, так как данные постоянно меняются смысл например запрашивать раз в сутки весь листинг но пусть будет)

#else
if [[ $2 = "info" ]]
then
get=`zabbix_get -s $1 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`
for out in $get
do
echo "${out}"
done
#elif [[ $2 = "maxtemp" ]]
#then
#get1= запрос с фильтраций только температура
#maxc= выбор максимального значения по температуре
#for out in $maxc
#do
#do
#echo $out
#done
fi
Изменения в 3.4
Показать
Добавлено в цикл Соответствие к категории датчиков Юнитов Единиц измерений
CASE - Оператор Выбора в Bash

case $SensorType in
*Clock*)
UINTS="MHz"
;;
*Load*|*Control*)
UINTS="%"
;;
*Temperature*)
UINTS="°C"
;;
*Data*)
UINTS="GB"
;;
*Fan*)
UINTS="RPM"
;;
*Voltage*)
UINTS="V"
;;
esac
Скрипт на подобии на WMIC


Скрипт и шаблон 3.4.1 добавлен порт. Входящая переменная $2 стала портом , а $3 -стал параметр discovery
Пример команд
./OHM3.4.1.sh внешний-ip 10054 discovery
На узле
OHM3.4.1.sh[{HOST.CONN},{$HOST.PORTS},discovery]

Что касаемо макроса {HOST.PORT} - он не работает в правиле автообнаружения, пришлось сделать свой
Hardware-OpenHardwareMonitor-V3.4.1-PORT.jpg
Hardware-OpenHardwareMonitor-V3.4.1-PORT
OHM3.4.1.sh
Показать
#!/bin/bash
#2019/12/14 v3.4.1
#При работе скрипта вся нагрузка выполнения ложится на ресурсы железа Заббикс Сервера!
#Скрипт мониторинга для OpenHardwareMonitor с LLD для Zabbix (серверный вариант)
# Автор Мамзиков Артём Андреевич Описание по скрипту viewtopic.php?f=48&t=71&p=121#p121

#Автообнаружение параметров из OpenHardwareMonitor
#Ключ: discovery , info

# $1 - это IP и порт узла подключаемого агента
# $2 - Поиск элементов вывод JSON data, info

IFS=$'\n'
JSON="{\"data\":["
SEP=""

if [[ $3 = "discovery" ]]
then
get=`zabbix_get -s $1 -k -p $2 system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`
# если требуется включение " двойных кавычек, то они должны быть экранированы обратной наклонной чертой \ потому так много слешей верху нужно по сути 2
# Запуск переменной get команды OpenHardwareMonitor

# Запрос имен и типа железа
gethd=`zabbix_get -s $1 -p $2 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Hardware"]`

# Оставляем нужные нам слобцы по железу (1-HardwareType 2-Identifier 4-Name) (делаем между ними 2 пробела)
obrtablhd=$(echo "${gethd}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $1" "$2" "$4}')

# Пришлось сделать отдельную переменую так как в родитель попадает параметр Процесс ИД когда столбец родитель пустой
# С последним столбцом по железу (делаем между ними 2 пробела) (1-HardwareType 2-Identifier 4-Name 5-Parent 6-ProcessId)
obrhartabl=$(echo "${gethd}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $1" "$2" "$4" "$5" "$6}')

# Выбираем родителя датчика который показывает параметры смотрим 2 и 5 столбец (2-Identifier 5-Parent)
tablparent=$(echo "${gethd}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $2" "$5}')

# Если ошибка в черную дыру | удаление первой строки шапки таблицы | Поиск строк более чем 2 пробела, за которой следовал не пробел,
# добавил разделители табуляции, обработка первой строки данных | вывод 3 6 и 9 (можно 9 так $(NF-2)но последняя строка с таблицы работает не так как надо) стoлбцов
# (3-InstanceId 6-Name 7-Parent 8-ProcessId 9-SensorType)
obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$8" "$9}')

# Если нужно не выводить поиск элементов в которых именах присутствует # раскомментировать строку ниже, а выше закомментировать
#obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|sed -E '/#/d'|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$8" "$9}')

# А если нужно выбрать только строки с определеными параметрами например температуру напряжение
#obrtabl=$(echo "${get}" 2>/dev/null|awk NR\>1|grep -E 'Temperature|Voltage'|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3" "$6" "$7" "$8" "$9}')

#Вывод для тестов настроек
#echo "${get}"
#echo "${obrtabl}"
#echo "${obrtablhd}"

fi
for element in $(echo "${obrtabl}" 2>/dev/null);
# 1 шаг Цикл Перебор строк в таблице в переменную element если ошибка отправка в черную дыру
do
# 2 шаг каждый столбец идет для своей переменной
# Получаем Идентифика́торы номера ID датчиков первый столбец(3-InstanceId)
InstanceId=`echo "${element}"|awk '{print $1}'`
# Получаем имена датчиков средний 2 столбец самый муторный из-за пробелов)(6-Name)
Name=$(echo "${element}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $2}'|sed 's/[ \t]*$//')
# Получаем категорию/группу датчиков последний столбец(9-SensorType)
SensorType=`echo "${element}" |awk '{print $(NF)}'`
# Получаем Parent для подстановки имен железа(7-Parent)
Parent=`echo "${element}"|awk '{print $(NF-2)}'`
# Добавление проверки по ИД для серверов 2 процессора иначе оба имени попадают в один ответ( (8-ProcessId)
Processid=`echo "${element}"|awk '{print $(NF-1)}'`

# Получаем Тип оборудования работа со 2 таблицей железо ищем в ней совпадающие сстроки с (таб. sensor столбцы 7-Parent и 8-ProcessId) если совпало выводим 1 столюец табл. железа (1-HardwareType)
HardwareType=`echo "${obrhartabl}"|grep -E "${Parent}".*"${Processid}"|awk '{print $1}'`
# Получаем имя железа (NF-1 или $3) табл. железо из столбца 4-Name поскрипту тут он 3столбец
Namehd=$(echo "${obrhartabl}"|grep -E "${Parent}".*"${Processid}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3}'|sed 's/[ \t]*$//')

# Выявляем родителя чипа датчиков если он есть
# Берем со 2 таблицы железа 2-Identifier и 5-Parent столбец (хотя в 5 попадет 6) в сравнении со столбцом-7-Parent 1-таблицы. Получаем ответ 5-Parent столбца 2 таблицы железа
sopost=`echo "${tablparent}"|grep -E "${Parent}"|awk '{print $2}'`
# Во второй таблице железа (1-HardwareType 2-Identifier 4-Name) ищем соответсвие к имени из параметра выше (5-Parent столбца 2 таблицы железа) если совпало выводим последний столюец железа 4-Name
roditel=$(echo "${obrtablhd}"|grep -E "${sopost}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $(NF)}'|sed 's/[ \t]*$//')
# Тип родителя Во второй таблице железа (1-HardwareType 2-Identifier 4-Name) ищем соответсвие к имени из параметра выше (5-Parent столбца 2 таблицы железа) если совпало выводим первый столбец железа 1-HardwareType
rodtip=`echo "${obrtablhd}"|grep -E "${sopost}"|awk '{print $1}'`

case $SensorType in
*Clock*)
UINTS="MHz"
;;
*Load*|*Control*)
UINTS="%"
;;
*Temperature*)
UINTS="°C"
;;
*Data*)
UINTS="GB"
;;
*Fan*)
UINTS="RPM"
;;
*Voltage*)
UINTS="V"
;;
esac

# Модель Материнской платы выволить всегда mainboard
#mainboard=$(echo "${obrhartabl}"|grep -E Mainboard.*/mainboard.*"${Processid}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3}'|sed 's/[ \t]*$//')

# если есть родитель в не учитываем материнку выйдет как родитель
if [ -z "${roditel}" ]; then
mainboard=$(echo "${obrhartabl}"|grep -E Mainboard.*/mainboard.*"${Processid}"|sed -E 's/ ([^ ])/\t\1/g; s/^1/1\t/;'|awk -F\\t '{print $3}'|sed 's/[ \t]*$//')
else
mainboard=
fi

JSON=$JSON"$SEP\n{\"{#ID}\":\"$InstanceId\", \"{#NAME}\":\"$Name\", \"{#SENSORTYPE}\":\"$SensorType\", \"{#UINTS}\":\"$UINTS\", \"{#HARDTYPE}\":\"$HardwareType\", \"{#HARDNAME}\":\"$Namehd\", \"{#RODITEL}\":\"$roditel\", \"{#RODTIP}\":\"$rodtip\", \"{#MAINBOARD}\":\"$mainboard\"}"
SEP=", "
done
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON

# Получение полной информации всей таблицы ./OHM.sh[{HOST.CONN},info] смысла в этом особого нет конечно, так как данные постоянно меняются смысл например запрашивать раз в сутки весь листинг но пусть будет)

#else
if [[ $3 = "info" ]]
then
get=`zabbix_get -s $1 -p $2 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`
for out in $get
do
echo "${out}"
done
#elif [[ $3 = "maxtemp" ]]
#then
#get1= запрос с фильтраций только температура
#maxc= выбор максимального значения по температуре
#for out in $maxc
#do
#do
#echo $out
#done
fi

Что касаемо триггеров на температуру по умолчанию они деактивированы можно их активировать и пользоваться ими, но их выходит много на каждая ядро потом я делал вручную через параметр или если хотя бы одно превысить триггер сработает и триггер всего один получается. Но нужно создавать его вручную на каждом узле правило обнаружения так не сможет создать триггер.
Так же можно задать не среднее значение avg , а самое новое last и можно указать за какой промежуток времени например температура держится уже больше 10 минут срабатывает триггер или сразу же как превысила отработать триггеру тут все на ваше усмотрение.

Пример триггера
Триггер температур.jpg
Триггер температур.jpg

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 214
Зарегистрирован: Вс фев 17, 2019 17:47
Репутация: 4
Откуда: Вологодская область
Контактная информация:

Скрипт + Шаблон для Windows LLD Open Hardware Monitor

Сообщение Артём Мамзиков » Вт янв 28, 2020 15:21 #3

Если возникают ошибки в работе WMI OpenHardwareMonitor что то вроде
C:\WINDOWS\system32>WMIC.exe /NAMESPACE:\\root\OpenHardwareMonitor PATH Sensor
Отсутствуют экземпляры.
C:\Windows\system32>WMIC.exe /NAMESPACE:\\root\OpenHardwareMonitor PATH Sensor
No Instance(s) Available.
Ошибки OpenHardwareMonitor.jpg
Ошибки OpenHardwareMonitor
Возможно такой сбой может быть вызван некорректными командами в powershell причем все остальное может работать через wmi нормально.
При первом запуске создается компилируется и регистрируюца библиотеки C:\Windows\System32\wbem\Framework\root\OpenHardwareMonitor там лежат 2 файла Managed Object Format - MOF-файле возможно ошибка в них.
Чистка реестра полностью от OpenHardwareMonitor и nssm.exe а так же их поиск на ПК и дальней шее удаление потом установка с 0 не помогла, так же подгрузка недостающий кустов реестра связанных с OpenHardwareMonitor с рабочего ПК где все работает норм так же не помогла.

Дело было в wmi что то сбилось в нем на эту утилиту стал искать как заново создать параметры wmi

Восстановление работы Windows Management Instrumentation (WMI) после фатального сбоя

Устранение неполадок в WMI

Помогло
Проверяем целостность (На Windows XP и ниже не работает):

winmgmt /verifyrepository

В случае ответа отличного от “База данных WMI согласована”, можно выполнить "мягкое восстановление" командой:

winmgmt /salvagerepository

с последующим перезапуском службы:

net stop Winmgmt
net start Winmgmt

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

winmgmt /resetrepository

с последующим рестартом системы. Отмечу, что вторая машина заработала после этого этапа. Последствия были не сильно удручающими, но серьёзными: пришлось переинсталлировать Visual Studio и Delphi Starter, MS Office отказался работать и его пришлось деинсталлировать вручную, удаляя папки, файлы и записи из реестра, с последующей повторной установкой. Также слетели все наши собственные классы WMI.

Заново зарегистрировать модуль OpenHardwareMonitor после чего все заработало, но если у вас так же есть какие то сторонние модуля их так же нужно будет запустить для регистрации


Так же возможно на новых версиях Заббикс Сервера возникнуть что перестанет поддерживаться data изменится JONS
формат JSON изменения
Показать
Низкоуровневое обнаружение
Обратите внимание, что начиная с Zabbix 4.2, формат JSON, возвращаемый правилами низкоуровневого обнаружения изменился. Более не ожидается, что JSON будет содержать объект "data". Низкоуровневое обнаружение теперь принимает обычный JSON, который содержит массив, для поддержки новых функций, таких как предобработка значений элементов данных и пользовательских путей к значениям макросов низкоуровневого обнаружения в JSON документе.

Встроенные ключи обнаружения обновлены и теперь возвращают массивы LLD строк корневым JSON документом. Zabbix автоматически извлечёт макрос и значение, если поле массива использует {#МАКРОС} ключом. Любые новые встроенные проверки обнаружения будут использовать новый синтаксис без "data" элементов. При обработке значения низкоуровневого обнаружения сначала определяется корень (массив $. или $.data).

Хотя "data" элемент удален со всех встроенных элементов данных, которые относятся к обнаружению, для обратной совместимости Zabbix будет ещё принимать JSON представление с "data" элементов, хотя его использование не рекомендуется. Если JSON содержит объект только с одним "data" элементом массива, тогда этот массив будет автоматически извлечён из содержимого элемента с использованием JSONPath $.data. Теперь низкоуровневое обнаружение принимает пользовательские LLD макросы с пользовательским путём, который задается в JSONPath синтаксисе.

Sergh
Гость
Сообщения: 7
Зарегистрирован: Сб май 30, 2020 23:23
Репутация: 0

Скрипт + Шаблон для Windows LLD Open Hardware Monitor

Сообщение Sergh » Ср июн 10, 2020 21:04 #4

Уважаемые формучане прошу помощи, пытаюсь реализовать данную схему мониторинга и столкнулся с ошибкой.
На Winows скрипт "wmic.exe /NAMESPACE:\\root\OpenHardwareMonitor PATH Sensor" выполняется без проблем и данные выводятся. Проблема при удаленном запросе таблицы хоста "zabbix_get -s 192.168.55.62 -k system.run["WMIC.exe /NAMESPACE:\\\root\OpenHardwareMonitor PATH Sensor"]"с сервера "Zabbix". В ответ получаю "ZBX_NOTSUPPORTED: Unsupported item key." Что я делаю не так, может нужно что-то добавить в конфиг zabbix agent windows?

Sergh
Гость
Сообщения: 7
Зарегистрирован: Сб май 30, 2020 23:23
Репутация: 0

Скрипт + Шаблон для Windows LLD Open Hardware Monitor

Сообщение Sergh » Чт июн 11, 2020 12:27 #5

разобрался, данные с zabbix сервера получаю. Проблема в 5 версии Zabbix, в 4 версии Zabbix таблицу получаю без проблем.
Помогите разобраться с другой проблемой.
При выполнении OHM скрипта любой версии (./OHM3.4.sh 192.168.55.62 discovery) с zabbix сервера получаю вот такой вывод:
{"data":[
]}
Я правильно понимаю что скрипт нужно редактировать?

Sergh
Гость
Сообщения: 7
Зарегистрирован: Сб май 30, 2020 23:23
Репутация: 0

Скрипт + Шаблон для Windows LLD Open Hardware Monitor

Сообщение Sergh » Чт июн 11, 2020 16:19 #6

Разобрался, данные стали поступать. Проблема теперь в другом. У меня 2 сервера, на оба применил данный шаблон. Сервер Zabbix находится за NAT. Показания с датчиков приходят с 2 серверов, но название комплектующих отображаются не корректно, т.е. название комплектующих 1 сервера дублируются на 2 сервер.

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 214
Зарегистрирован: Вс фев 17, 2019 17:47
Репутация: 4
Откуда: Вологодская область
Контактная информация:

Скрипт + Шаблон для Windows LLD Open Hardware Monitor

Сообщение Артём Мамзиков » Чт июн 11, 2020 17:13 #7

Sergh, Получается что данные идут с одного IP от нат ? и он путается через внешнюю проверку когда происходит поиск?
Это на версии скрипта 3.4 ?

Sergh
Гость
Сообщения: 7
Зарегистрирован: Сб май 30, 2020 23:23
Репутация: 0

Скрипт + Шаблон для Windows LLD Open Hardware Monitor

Сообщение Sergh » Чт июн 11, 2020 19:46 #8

Артём Мамзиков писал(а):
Чт июн 11, 2020 17:13
Sergh, Получается что данные идут с одного IP от нат ? и он путается через внешнюю проверку когда происходит поиск?
Это на версии скрипта 3.4 ?
Да. Агенты работают на разных портах 10050 и 10052. Помогите пожалуйста разобраться.

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 214
Зарегистрирован: Вс фев 17, 2019 17:47
Репутация: 4
Откуда: Вологодская область
Контактная информация:

Скрипт + Шаблон для Windows LLD Open Hardware Monitor

Сообщение Артём Мамзиков » Чт июн 11, 2020 20:58 #9

Sergh, Дело не совсем в протах, дело в обнаружении элементов, а элементы обнаруживаются не заббикс агентом, а внешней проверкой (скриптом)
Смотри что тебе отдают команды
Запрос всей таблицы
zabbix_get -s 172.16.121.7 -k system.run["WMIC.exe /NAMESPACE:\\\root\OpenHardwareMonitor PATH Sensor"]
Запрос железа
zabbix_get -s 172.16.121.7 -k system.run["WMIC.exe /NAMESPACE:\\\root\OpenHardwareMonitor PATH Hardware"]

есть ли в них путанница так как они создают элементы а дальше уже заббикс агент запрашивает значения

Вариант с портом
Запрос всей таблицы
zabbix_get -s 172.16.121.7 -p 10050 -k system.run["WMIC.exe /NAMESPACE:\\\root\OpenHardwareMonitor PATH Sensor"]
Запрос железа
zabbix_get -s 172.16.121.7 -p 10050 -k system.run["WMIC.exe /NAMESPACE:\\\root\OpenHardwareMonitor PATH Hardware"]


Я думаю у тебя вся проблема в том что я не применял в скрипте порт т.е. он стандартный
get=`zabbix_get -s $1 -k system.run
а тебе нужен такого формата
zabbix_get -s 127.0.0.1 -p 10050 -k system.run
т.е. с двумя переменными входными $1 - IP и $2 - порт и сдвигаем if [[ $3 = "discovery" ]] уже будет поиск т е сместится
Ключ поиска уже будет таким в шаблоне
OHM3.4.sh[{HOST.CONN},{HOST.PORT},discovery]
Выглядеть это будет примерно так пример
OHM3.4.sh 127.0.0.1 10050 discovery
Можно еще по DNS сделать вместо IP если есть на узле
{HOST.DNS} или универсальный в зависимости что на умолчании {HOST.CONN}
Поддерживаемые макросы

Sergh
Гость
Сообщения: 7
Зарегистрирован: Сб май 30, 2020 23:23
Репутация: 0

Скрипт + Шаблон для Windows LLD Open Hardware Monitor

Сообщение Sergh » Чт июн 11, 2020 23:00 #10

Спасибо что отвечаете и помогаете разобраться.
В скрипт добавил обнаружение порта. Это все? я заменил везде $2 на $3 и получилось так:
if [[ $3 = "discovery" ]]

then

get=`zabbix_get -s $1 -p $2 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`

gethd=`zabbix_get -s $1 -p $2 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Hardware"]`

#else
if [[ $3 = "info" ]]

then

get=`zabbix_get -s $1 -p $2 -k system.run["WMIC.exe /NAMESPACE:\\\\\root\OpenHardwareMonitor PATH Sensor"]`

Это все что нужно было отредактировать в скрипте?

Теперь при выполнении OHM3.4.sh 127.0.0.1 10050 discovery и OHM3.4.sh 127.0.0.1 10052 discovery,
Отображается таблица с разных серверов.
Если выполнять просто OHM3.4.sh 127.0.0.1 discovery, то данных не будет.
Вопрос по шаблону.
Я правильно понимаю что в шаблоне нужно поправить лишь ключ в "Правило обнаружения" с OHM3.4.sh[{HOST.CONN},discovery] на
OHM3.4.sh[{HOST.CONN},{HOST.PORT},discovery] ?


На Zabbix сервере в последних данных сейчас вот что:
на 2 серверах:
https://prnt.sc/sy59m4
т.е. данные не поступают(

Ответить Вложения 26

Вернуться в «Аппаратное обеспечение»