LMsensors
-
-
Но судя по nxget blabla Agent.SupportedLists, subagent lmsensors не предоставляет никакого LMSensors.ValueList, то есть чтобы сделать как вы хотите, нужно либо пропатчить сабагент, либо через ExternalList в конфиге агента определить этот список(костыльно)
Спасибо, кстати в моём nxagentd.conf (Хотя версия последняя RC) вообще не было упоминания о ExternalList. Нашёл только тут - https://www.netxms.org/documentation/adminguide/agent-management.html
Вы скриптом только lo фильтруете ?
-
-
Хорошо. Может кто нибудь тогда объяснит зачем столько параметров вида (*) ? Например я хочу смотреть изменение файла через File.Time.Change(*) при выборе его в DCI он уже подразумевает использование instance, но какой тогда метод Instance Discovery нужен, если в Agent.SupportedLists и Table его нет.
И само событие DC_FILE_CHANGE подразумевает макрос %6 - Instance.
Я что-то не совсем понимаю как можно все эти (*) использовать.
-
Может кто нибудь тогда объяснит зачем столько параметров вида (*) ?
Параметры вида (*) требуют передачи аргумента: имя файла, хоста и т.д. в качестве аргумента может использоваться и {instance} в том числе... но ни в коем случае не подразумевает его использование.
какой тогда метод Instance Discovery нужен
Скорее всего нужно будет использовать ExternalList
-
@kozlov_ao said in LMsensors:
Может кто нибудь тогда объяснит зачем столько параметров вида (*) ?
Параметры вида (*) требуют передачи аргумента: имя файла, хоста и т.д. в качестве аргумента может использоваться и {instance} в том числе... но ни в коем случае не подразумевает его использование.
какой тогда метод Instance Discovery нужен
Скорее всего нужно будет использовать ExternalList
Не подразумевает, но тем не менее при выборе любого параметра вида (*) - автоматически подставляется Description c instance (Time of last status change of file {instance}), что вводит немного в заблуждение, тем более если своих AgentLists параметры не имеют.
Пробую.
ExternalList = TemporaryFiles:/bin/ls -al /tmp ExternalList = LM:/usr/bin/sensorsВ DCI -> Parameter -> Select - должны они появиться ведь ? (Ессесно после перезапуска агента) через nxget в Agent.SupportedLists я их уже вижу и значения возвращают.
На примере File.Time.Change(*) как можно применить {instance} чтобы не плодить множество DCI, а указывать нужные файлы в filter ?
-
В DCI -> Parameter -> Select - должны они появиться ведь ?
Нет. Это не монит.параметр, а список.
через nxget в Agent.SupportedLists я их уже вижу
Вы запрашиваете листы... и собственно получаете их.
На примере File.Time.Change(*) как можно применить {instance} чтобы не плодить множество DCI
Скрины во вложении. Лист настроен так:
ExternalList = TemporaryFiles:/bin/ls -1 /tmpуказывать нужные файлы в filter
В фильтре просто прописывайте то, что нужно... например так (это один из рабочих фильтров, лень адаптировать):
if (rindex($1,"/rom")>0) return false; value = AgentReadParameter($node, "FileSystem.Total(" . $1 . ")"); return (value != null) && (value > 0);


-
@kozlov_ao said in LMsensors:
В DCI -> Parameter -> Select - должны они появиться ведь ?
Нет. Это не монит.параметр, а список.
через nxget в Agent.SupportedLists я их уже вижу
Вы запрашиваете листы... и собственно получаете их.
На примере File.Time.Change(*) как можно применить {instance} чтобы не плодить множество DCI
Скрины во вложении. Лист настроен так:
ExternalList = TemporaryFiles:/bin/ls -1 /tmpуказывать нужные файлы в filter
В фильтре просто прописывайте то, что нужно... например так (это один из рабочих фильтров, лень адаптировать):
if (rindex($1,"/rom")>0) return false; value = AgentReadParameter($node, "FileSystem.Total(" . $1 . ")"); return (value != null) && (value > 0);Благодарю.
-
Если речь про интерфейсы - мы используем
Interface {instance} input (bps)
Net.Interface.BytesIn({instance})Instance discovery method = Agent List
List name = Net.InterfaceList
Filter script:use string2array; sub main(){ arr=string2array($1," "); if (arr[5]!="lo") { return %(true,arr[5],arr[5]); } return false; }Я добрался вновь до шаблонов с Net.Interface.BytesIn({instance}), но вот что-то функции такой не вижу string2array и естественно ничего не парситься как нужно, вы её сами написали ? Даже если просто сделать use string2array;
Error executing script: Script compilation error (Error 16 in line 0: Requested module not found or cannot be loaded)Я тут нашёл еще примеры с индексами:
if ($1 ~= "^([0-9]+) .*") { return %(true, $1); // at this point $1 contains first matching group } return false;Но и это не подходит, так как хотелось бы видеть именно имена интерфейсов ifDescr. То есть как то вырезать 4 значение из $1.
104 10.15.10.1/32 23 000000000000 ppp93
Еще пробовал с
if inList($1," ","ppp93")Instance срабатывает в таком виде:
Interface 104 10.15.10.1/32 23 CC7F00006500 ppp93 input (bps) = << ERROR >> -
Про String2Array ничего не скажу. Похоже это самописный скрипт.
Касательно Вашего запроса по выдергиванию данных из строки:test = trim(substr($1, rindex($1, " "))); return test;где $1 - входное значение, а именно: "104 10.15.10.1/32 23 000000000000 ppp93"
PS: Вот тут https://wiki.netxms.org/wiki/Scripting_Guide крайне полезная информация по скриптам...
-
string2array я в самом деле написал сам, реализация костыльная, однако может кому пригодится:
sub string2array(data, separator) { array a; i=0; _length=length(data); while(_length>0) { i=i+1; _idx=index(data,separator); if (_idx==0) { a[i]=data; break; } _length=length(data); a[i]=substr(data,0,_idx-1); data=substr(data,_idx+1); } return a; }Мне кажется что вообще функцию такого рода нужно добавить в NXSL
-
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login