Необходимо выбрать 2 параметра. Методом проб и ошибок подобрал синтаксис, работающий с zabbix_get -s x.x.x.x -k wmi.getall["root\hpq, [select Name, CurrentState from HP_NumericSensor]"] Если создаю на узле элемент с таким ключом и пытаюсь его выполнить, получаю ошибку "Invalid number of parameters" Как правильно написать запрос? Второй вопрос, если задать условие выборки только некондиционных элементов, то в случае когда все элементы нормальные, по команде zabbix_get приходит пустой результат: ZBX_NOTSUPPORTED: Empty WMI search result. Можно ли получить пустой результат в элемент данных и предобработкой превратить его в значение ОК?
Ad Widget
Collapse
Правильный синтаксис wmi.getall
Collapse
X
-
Tags: None
-
1. Похоже zabbix_get и запрос с сервера по разному разбирают строку. Версия и того и другого 5.4.6
zabbix_get -s 172.20.78.72 -k wmi.getall[root\hpq, "select Name, CurrentState from HP_NumericSensor"]
zabbix_get [115194]: invalid parameter "select Name, CurrentState from HP_NumericSensor]"
Try 'zabbix_get --help' for more information.
Запрос сервера отрабатывает нормально. Т.е. для zabbix_get оператор select нужно взять в [], а для запроса c сервера в " "
2. Элемент wmi.getall[root\hpq, "select Name from HP_NumericSensor where CurrentState NOT 'Normal'"] нормально отрабатывает с преобразованием задать значение в ОК.
Если я добавлю ещё шаг для обработки [{"CurrentState":"Degrade","Name":"Temperature Sensor 25"}], будет ли он выполняться после обработки ошибки или только если ошибки нет?Comment
-
Так какая все-таки версия агента? Вроде бы должны были исправить неподдерживаемость при пустом выводе, так что и обрабатывать ее, получается, не надоComment
-
Команда zabbix_get сначала обрабатывается шеллом (оболочкой операционной системы), который некоторые символы может понимать по-своему. В частности, пробелы и кавычки.1. Похоже zabbix_get и запрос с сервера по разному разбирают строку. Версия и того и другого 5.4.6
zabbix_get -s 172.20.78.72 -k wmi.getall[root\hpq, "select Name, CurrentState from HP_NumericSensor"]
zabbix_get [115194]: invalid parameter "select Name, CurrentState from HP_NumericSensor]"
Try 'zabbix_get --help' for more information.
Запрос сервера отрабатывает нормально. Т.е. для zabbix_get оператор select нужно взять в [], а для запроса c сервера в "
Чтобы избежать недоразумений, самое простое - это обрамить весь ключ апострофами:Code:zabbix_get -s 172.20.78.72 -k 'wmi.getall[root\hpq, "select Name, CurrentState from HP_NumericSensor"]'
Comment
-
Поставил на узел агент 5.4.6, до этого был 4.4.3 Никакими ухищрениями получить параметры через zabbix_get -s 127.0.0.1 -k .... не удаётся. Можно получить параметры только так zabbix_agentd -t wmi.getall[root\hpq, [select Name, CurrentState from HP_NumericSensor]] никакие одиночные кавычки не спасают. Более того получить что-то через конструкцию wmi.getall[root\hpq, "select Name from HP_NumericSensor where CurrentState NOT 'Normal'"] вообще не удаётся. Это что касается агента Windows (стоит на Win2008R2 64)
Что касается получения метрики с zabbix сервера (v 5.4.6 OS SLES15 SP2)
1. zabbix_get -s 172.20.78.72 -k 'wmi.getall[root\hpq, "select Name, CurrentState from HP_NumericSensor where CurrentState like 'Normal'"]'
ZBX_NOTSUPPORTED: Empty WMI search result. - не работает
2. zabbix_get -s 172.20.78.72 -k 'wmi.getall[root\hpq, [select Name from HP_NumericSensor where CurrentState like "Normal"]]'
[{"Name":"Temperature Sensor 1"},{"Name":"Temperature Sensor 2"},{"Name":"Temperature Sensor 5"},........ Нормально отрабатывает
3. zabbix_get -s 172.20.78.72 -k 'wmi.getall[root\hpq, "select Name from HP_NumericSensor"]'
[{"Name":"Temperature Sensor 1"},{"Name":"Temperature Sensor 2"},{"Name":"Temperature Sensor 5"},...... Без оператора WHERE работает и с кавычками вокруг select и со скобками
4. На самом деле нужно получить элементы со статусом проблема, если они есть zabbix_get -s 172.20.78.72 -k 'wmi.getall[root\hpq, [select Name from HP_NumericSensor where CurrentState not "Normal"]]' Работает с таким синтаксисом, но возвращает сообщение, а не пустой массив []
ZBX_NOTSUPPORTED: Empty WMI search result.
Как пел Владимир Семёнович: "Удивительное рядом, но оно запрещено..." Сухой остаток: на узле windows через zabbix_get v.5.4.6 вообще ничего получить с ключом wmi.getall[root\hpq, "select Name, CurrentState from HP_NumericSensor where CurrentState not 'Normal'"] ( или like ) не удаётся. Тем более не работает никакой синтаксис с оператором WHERE. С zabbix сервера можно получить параметры с синтаксисом, использующим [....] вокруг select. Синтаксис с "" работает неверно, конструкция where CurrentState not 'Normal' возвращает все элементы со статусом Normal, а не должна.Comment
-
Я бы перефразировал, что сухой остаток: кто-то не понимает, что такое шелл и как он работает.
От версии zabbix_get это никак не зависит. Да и вообще это к самому Zabbix-у имеет косвенное отношение.
Логично, т.к. у вас внутри строки с апострофами используется апостроф.1. zabbix_get -s 172.20.78.72 -k 'wmi.getall[root\hpq, "select Name, CurrentState from HP_NumericSensor where CurrentState like 'Normal'"]'
ZBX_NOTSUPPORTED: Empty WMI search result. - не работает
Т.е. та конструкция, о которой я говорил (обрамить апострофами весь ключ, который включает в себя и кавычки, и пробелы), - таки работает. Да, при этом символ апострофа недопустим внутри ключа, о чём я не сказал. Однако, если там необязательно должен быть именно апостроф (например, могут быть кавычки), то тогда и проблемы нет:3. zabbix_get -s 172.20.78.72 -k 'wmi.getall[root\hpq, "select Name from HP_NumericSensor"]'
[{"Name":"Temperature Sensor 1"},{"Name":"Temperature Sensor 2"},{"Name":"Temperature Sensor 5"},...... Без оператора WHERE работает и с кавычками вокруг select и со скобками
Апострофы ограничивают весь ключ, чтобы шеллом он воспринимался как один параметр, внутри которого ничего интерпретировать не надо (сохраняя все пробелы, кавычки и т.д.).Code:zabbix_get -s 172.20.78.72 -k 'wmi.getall[root\hpq, "select Name from HP_NumericSensor where CurrentState not \"Normal\""]'
Дальше уже идёт синткасис самого ключа Zabbix: второй параметр ключа (выражение select) заключается в кавычки, т.к. содержит внутри себя пробелы и другие кавычки. А эти самые "другие кавычки" (которые являются частью выражения select) экранируются обратным слэшем.
А вот это уже зависит от версии агента. К сожалению, не могу проверить, т.к. у нас всё ещё используются более старые агенты (v4.0.x), в которых этот ключ не поддерживался вообще.возвращает сообщение, а не пустой массив []
ZBX_NOTSUPPORTED: Empty WMI search result.Comment
-
"От версии zabbix_get это никак не зависит" - но Вы же не проверяли, не так ли? А я проверил. И zabbix_get и zabbix_agentd -t. В разных версиях, по разному. И почему, по Вашему мнению, инструмент проверки работы метрики не имеет отношения к zabbix? Ведь декларировано, что работает, а на самом деле не работает. Ниже вывод с агентом 5.4.6 Запросы сделаны точно по вашему шаблону.
c:\zabbix\bin>zabbix_agentd -t 'wmi.getall[root\hpq, "select Name, CurrentState from HP_NumericSensor where CurrentState like \"Normal\""]'
zabbix_agentd [22488]: invalid parameter "select Name, CurrentState from HP_NumericSensor where CurrentState like "Normal"]'"
c:\zabbix\bin>zabbix_get -s 127.0.0.1 -k 'wmi.getall[root\hpq, "select Name, CurrentState from HP_NumericSensor where CurrentState like \"Normal\""]'
zabbix_get [22084]: invalid parameter "select Name, CurrentState from HP_NumericSensor where CurrentState like "Normal"]'"
Try 'zabbix_get --help' for more information.Last edited by Victor Sklyarov; 28-10-2021, 10:36.Comment
-
А зачем, если не секрет, вообще мучиться с zabbix_get и zabbix_agentd -t, если в 5.4 есть кнопка Test в настойках айтема?
P.S. Попробовал на агенте 5.4.0 - вполне себе возвращает [] при пустом результате запросаLast edited by Semiadmin; 28-10-2021, 13:30.Comment
-
Да в общем не за чем. Так и проверяю. Что значит возвращает []? Я нажимаю на кнопку ТЕСТ, приходит ошибка "Empty WMI search result" Ведь пустой ответ никак не может быть занесён в получаемую метрику. Посему приходится обрабатывать ошибку. Или я что-то не понимаю?
А вообще WQL полон сюрпризов. Получаю:
[{"Name":"Fan 3","OperationalStatus":[2]},
{"Name":"Fan 4","OperationalStatus":[2]},
{"Name":"Fan 5","OperationalStatus":[2]},
{"Name":"Fan 6","OperationalStatus":[2]},
{"Name":"Fan 7","OperationalStatus":[2]},
{"Name":"Fan 8","OperationalStatus":[2]}]
Хотел с помощью where OperationalStatys != 2 выбирать только состояния деградации а в случае если все =2, получать пустой массив и превращать его в значение метрики "ОК". Но не тут то было. Получаемое значение OperationalStatys - массив ([2]) из одного элемента. И сколько не бился, так и не смог сделать выборку по != 2
-
-
Коллеги, обратите внимание на намек профессионала.
А теперь посмотрите на свои команды и сосчитайте кавычки. И в линухе и в винде надо все экранировать.А то у вас получается, что сначала кавычки раскрываете, внутри закрываете, а потом опять".
Посмотрите, как экранируются кавычки в винде.
Судя по ошибке кавычки не передаются агенту.
Да, не обязательно создавать итем, заббикс_гет работает и без созданного ранее :-)Comment
-
Ну как что значит - возвращает []?
Есть у меня шаблонный айтем wmi.getall[root\cimv2,"select Name,Description,NetConnectionID,Speed,AdapterType Id,NetConnectionStatus from win32_networkadapter where PhysicalAdapter=True and NetConnectionStatus>0"].
Без препроцессинга. Получает JSON, который потом используется в LLD. Меняю в запросе > на <, т.е. условие заведомо невыполнимое, получаю в ответе пустой JSON []. Агент 5.4.0.Comment
Comment