NetXMS Support Forum

Russian Support => Общие вопросы => Topic started by: hsvt on December 04, 2015, 04:13:47 PM

Title: LMsensors
Post by: hsvt on December 04, 2015, 04:13:47 PM
Подскажите пожалуйста - как создать 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
Title: Re: LMsensors
Post by: hsvt on December 10, 2015, 11:43:28 AM
Неужели никто не использует мониторинг на агентах вида {instance} ?


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


Какой нужен Instance Discovery и filter для того, чтобы в графиках получить нужный СПИСОК интерфейсов со статистикой?
Title: Re: LMsensors
Post by: 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;

}


Title: Re: LMsensors
Post by: 2c2i on December 10, 2015, 05:48:47 PM
Но судя по nxget blabla Agent.SupportedLists, subagent lmsensors не предоставляет никакого LMSensors.ValueList, то есть чтобы сделать как вы хотите, нужно либо пропатчить сабагент, либо через ExternalList в конфиге агента определить этот список(костыльно)
Title: Re: LMsensors
Post by: hsvt on December 10, 2015, 06:11:42 PM
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 фильтруете ?
Title: Re: LMsensors
Post by: 2c2i on December 11, 2015, 11:16:51 AM
На линукс машинах - только lo, но тут кому как угодно.
Title: Re: LMsensors
Post by: hsvt on December 11, 2015, 05:15:04 PM
Хорошо. Может кто нибудь тогда объяснит зачем столько параметров вида (*) ? Например я хочу смотреть изменение файла через File.Time.Change(*) при выборе его в DCI он уже подразумевает использование instance, но какой тогда метод Instance Discovery нужен, если в Agent.SupportedLists и Table его нет.

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

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

Quoteкакой тогда метод Instance Discovery нужен
Скорее всего нужно будет использовать ExternalList
Title: Re: LMsensors
Post by: hsvt on December 16, 2015, 05:43:47 PM
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 ?
Title: Re: LMsensors
Post by: 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);
Title: Re: LMsensors
Post by: hsvt on December 16, 2015, 08:48:52 PM
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);


Благодарю.
Title: Re: LMsensors
Post by: hsvt on December 24, 2015, 05:26:24 PM
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 >>
Title: Re: LMsensors
Post by: kozlov_ao on December 27, 2015, 11:10:10 PM
Про 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 (https://wiki.netxms.org/wiki/Scripting_Guide) крайне полезная информация по скриптам...
Title: Re: LMsensors
Post by: 2c2i on December 28, 2015, 12:02:39 PM
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
Title: Re: LMsensors
Post by: hsvt on December 29, 2015, 12:01:02 PM
Если кому то нужно по именам интерфейсов (ifDescr)

idx=rindex($1, " ");

if (idx > 0)

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

return false;