News:

We really need your input in this questionnaire

Main Menu

LMsensors

Started by hsvt, December 04, 2015, 04:13:47 PM

Previous topic - Next topic

hsvt

Подскажите пожалуйста - как создать LMSensors.Value({instance}) ? Я хочу получать сразу все значения температуры в Last values.

Description: Sensor {instance}
Parameter: LMSensors.Value({instance})
Instance Discovery Method: Agent List
List Name: LMSensors.ValueList


Сейчас отдаёт только через 'LMSensors.Value(coretemp-isa-0001,Core 1)'

Или здесь лучше использовать таблицы ? В таблицах SNMP OID

hsvt

Неужели никто не использует мониторинг на агентах вида {instance} ?


Number of output packets on interface {instance}
Net.Interface.PacketsOut(*)


Какой нужен Instance Discovery и filter для того, чтобы в графиках получить нужный СПИСОК интерфейсов со статистикой?

2c2i

Если речь про интерфейсы - мы используем

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;

}



2c2i

Но судя по nxget blabla Agent.SupportedLists, subagent lmsensors не предоставляет никакого LMSensors.ValueList, то есть чтобы сделать как вы хотите, нужно либо пропатчить сабагент, либо через ExternalList в конфиге агента определить этот список(костыльно)

hsvt

Quote from: 2c2i on December 10, 2015, 05:48:47 PM
Но судя по nxget blabla Agent.SupportedLists, subagent lmsensors не предоставляет никакого LMSensors.ValueList, то есть чтобы сделать как вы хотите, нужно либо пропатчить сабагент, либо через ExternalList в конфиге агента определить этот список(костыльно)

Спасибо, кстати в моём nxagentd.conf (Хотя версия последняя RC) вообще не было упоминания о ExternalList. Нашёл только тут - https://www.netxms.org/documentation/adminguide/agent-management.html

Вы скриптом только lo фильтруете ?

2c2i

На линукс машинах - только lo, но тут кому как угодно.

hsvt

Хорошо. Может кто нибудь тогда объяснит зачем столько параметров вида (*) ? Например я хочу смотреть изменение файла через File.Time.Change(*) при выборе его в DCI он уже подразумевает использование instance, но какой тогда метод Instance Discovery нужен, если в Agent.SupportedLists и Table его нет.

И само событие DC_FILE_CHANGE подразумевает макрос %6 - Instance.

Я что-то не совсем понимаю как можно все эти (*) использовать.

kozlov_ao

QuoteМожет кто нибудь тогда объяснит зачем столько параметров вида (*) ?
Параметры вида (*) требуют передачи аргумента: имя файла, хоста и т.д. в качестве аргумента может использоваться и {instance} в том числе... но ни в коем случае не подразумевает его использование.

Quoteкакой тогда метод Instance Discovery нужен
Скорее всего нужно будет использовать ExternalList

hsvt

Quote from: kozlov_ao on December 12, 2015, 08:06:32 PM
QuoteМожет кто нибудь тогда объяснит зачем столько параметров вида (*) ?
Параметры вида (*) требуют передачи аргумента: имя файла, хоста и т.д. в качестве аргумента может использоваться и {instance} в том числе... но ни в коем случае не подразумевает его использование.

Quoteкакой тогда метод 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 ?

kozlov_ao

QuoteВ DCI -> Parameter -> Select - должны они появиться ведь ?
Нет. Это не монит.параметр, а список.

Quoteчерез nxget в Agent.SupportedLists я их уже вижу
Вы запрашиваете листы... и собственно получаете их.

QuoteНа примере File.Time.Change(*) как можно применить {instance} чтобы не плодить множество DCI
Скрины во вложении. Лист настроен так:
ExternalList = TemporaryFiles:/bin/ls -1 /tmp

Quoteуказывать нужные файлы в filter
В фильтре просто прописывайте то, что нужно... например так (это один из рабочих фильтров, лень адаптировать):
if (rindex($1,"/rom")>0) return false;
value = AgentReadParameter($node, "FileSystem.Total(" . $1 . ")");
return (value != null) && (value > 0);

hsvt

Quote from: kozlov_ao on December 16, 2015, 08:16:37 PM
QuoteВ DCI -> Parameter -> Select - должны они появиться ведь ?
Нет. Это не монит.параметр, а список.

Quoteчерез nxget в Agent.SupportedLists я их уже вижу
Вы запрашиваете листы... и собственно получаете их.

QuoteНа примере File.Time.Change(*) как можно применить {instance} чтобы не плодить множество DCI
Скрины во вложении. Лист настроен так:
ExternalList = TemporaryFiles:/bin/ls -1 /tmp

Quoteуказывать нужные файлы в filter
В фильтре просто прописывайте то, что нужно... например так (это один из рабочих фильтров, лень адаптировать):
if (rindex($1,"/rom")>0) return false;
value = AgentReadParameter($node, "FileSystem.Total(" . $1 . ")");
return (value != null) && (value > 0);


Благодарю.

hsvt

Quote from: 2c2i on December 10, 2015, 05:40:39 PM
Если речь про интерфейсы - мы используем

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 >>

kozlov_ao

Про 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 крайне полезная информация по скриптам...

2c2i

#13
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

hsvt

Если кому то нужно по именам интерфейсов (ifDescr)

idx=rindex($1, " ");

if (idx > 0)

{
name=substr($1, idx+1);
return %(true, name);
}

return false;