Instance Discovery Filter Script [SOLVED]

Started by sperlm, June 04, 2013, 06:15:51 PM

Previous topic - Next topic

Percy

Quote from: sperlm on February 05, 2014, 01:33:15 PM
Hello, I will reply here so others can try to help too.

QuoteDESCRIPTION -interface traffic: {instance}
PARAMETER -1.3.6.1.2.1.2.2.1.16.{instance}
base OID to .1.3.6.1.2.1.2.2.1.16
snmp = CreateSNMPTransport($node);
return SNMPGetValue(snmp, ".1.3.6.1.2.1.2.2.1.16." . $1) != 0;

Not sure if it is the problem you encountered but I had problems with this structure because there is no guarantee there will be 0 value, there can be null too so I wrote it like this:

snmp = CreateSNMPTransport($node);
x = SNMPGetValue(snmp, ".1.3.6.1.2.1.2.2.1.16." . $1);
if  (x != null) return (x > 0);
else return 0;

p.s. does it mean you get the desired DCI with correct OID on all of your nodes but the value there is 0 or it creates unwanted DCIs with wrong OID?
Quote from: Percy on February 06, 2014, 08:04:21 AM
hi Sperlm,

thank you for replying back.
Not sure if it is the problem you encountered but I had problems with this structure because there is no guarantee there will be 0 value, there can be null too so I wrote it like this:

snmp = CreateSNMPTransport($node);
x = SNMPGetValue(snmp, ".1.3.6.1.2.1.2.2.1.16." . $1);
if  (x != null) return (x > 0);
else return 0;
[/quote]
i tried this Script on the instance discovery tab of Template than applied to Node i get the DCI for Non Zero values interfaces [ like 1,2,9,10,33] pls check on attachment but when i see the collected values for these DCI it shows 0 value...

[/quote]

p.s. does it mean you get the desired DCI with correct OID on all of your nodes but the value there is 0 or it creates unwanted DCIs with wrong OID?
[/quote]
yes getting 0 value. why it does not give the values of traffic on interfaces.
[/quote]

sperlm

Hi,

do a snmpwalk on the device with .1.3.6.1.2.1.2.2.1.16 value.
It should list all subsequent oids (.1.3.6.1.2.1.2.2.1.16.0, .1.3.6.1.2.1.2.2.1.16.1 etc..) with values and see if there are values in 1, 2, 9, 10, 33.

One more thing - Instance discovery method should be SNMP Walk - OIDs (but I suppose you've got that right).

With regards,
Milan

Percy

hi,

yes i checked there are values . i have attached the screen shot.

thanks,
Percy

sperlm

Can you post screenshots with the Last values (for the node) view and History (for one DCI) too ?

Percy

#19
hi Milan,

thanks for the patience posting you the screenshots for the History of the DCI for the interface 1 and last value.
In Delta calculation tab :- Average Delta Per minute, it is correct or will be something else ?

regards.
Percy


Percy

hi Sperlm..

its working now. thanks a lot for the Support.
posting the Screenshots for the last values.

with Regards
Percy

sperlm

What was the problem if I may ask ?

I was also wandering what you mean by the Delta calculation tab, because only delta calculation I am aware of is in the Transformation tab...

Percy

hi..,

i didn't change anything in delta calculation but a little change in this Script.

snmp = CreateSNMPTransport($node);
x = SNMPGetValue(snmp, ".1.3.6.1.2.1.2.2.1.16." . $1);
if  (x != null)  return x;   // you  gave  me like this return (x > 0 );
else return 0;

i am also confused how it started collecting data.  due to that change in the script or happened automatically. but still there is 0 value for the other interfaces (10,2.33) strange why it gives for 1,9 did you notice this in screenshots.

thank you,
Percy

Nikk

Quote from: Victor Kirhenshtein on June 04, 2013, 10:00:43 PM
Hi!

You actually thinking in right direction - you can use SNMPGet function to read value of each instance and determine to include it or not. Below is a working example of such approach. I use OID .1.3.6.1.2.1.2.2.1.16 (ifOutOctets) as a base. I use

Port traffic: {instance}

as description and

.1.3.6.1.2.1.2.2.1.16.{instance}

as parameter name. Correct parameter name is important, because {instance} will be the part after base OID you configure on instance discovery page, not the full OID.

Then, on instance discovery page, I set discovery method to "SNMP Walk - OIDs", set base OID to .1.3.6.1.2.1.2.2.1.16, and use the following filtering script:

snmp = CreateSNMPTransport($node);
return SNMPGetValue(snmp, ".1.3.6.1.2.1.2.2.1.16." . $1) != 0;

Now just close data collection configuration for the node and run configuration poll. You should get DCIs for all OIDs with non-zero value.

Best regards,
Victor

Quote from: Victor Kirhenshtein on December 07, 2013, 11:39:11 AM
This filtering script checks that absolute value for given OID is 0. If you have non-zero value which is not changing over time, OID will pass filter but you will still get 0 as delta value.

So I changed from delta value to original value and i'm still getting 0 values. Absolute values all are 0s (checked with snmpwalk).
Where is the problem?
Configuration is the same, except oid is now .1.3.6.1.2.1.31.1.1.1.3. (CRCAlignErrors) where all values are 0:

Quote from: Nikk on December 06, 2013, 04:53:01 PM
My parameter is:  .1.3.6.1.2.1.31.1.1.1.10.{instance}
and in Instance tab:
SNMP Walk - OID's
.1.3.6.1.2.1.31.1.1.1.10

and script:
snmp = CreateSNMPTransport($node);
return SNMPGetValue(snmp, ".1.3.6.1.2.1.31.1.1.1.10." . $1) != 0;

Victor Kirhenshtein

Check that you really get the value with SNMPGetValue - it will return null if SNMP query fails for some reason, and null != 0, so instance that cannot be read will be accepted.

Best regards,
Victor

Nikk

Victor you are right, i'm receiving null values, so is there a chance to get rid of them too? I tried to add != null, but no success.

Victor Kirhenshtein

Hi,

!= null should work. Can you show full script please?

Best regards,
Victor

Nikk

Script looks like this:
Quote
snmp = CreateSNMPTransport($node);
value = SNMPGetValue(snmp, ".1.3.6.1.2.1.16.1.1.1.3." . $1);
if (value != null || value != 0) return value;
else return false;

Maybe i just don't get it :)

sperlm

Hello, just a question...

IF value is 0, doesnt it automatically mean that return value is equivalent to return false ?
(thus not passing the filter script)

MS

Victor Kirhenshtein

Hi!

Condition (value != null || value != 0) is always true - if value is null then it will not be 0, and vise versa. Correct condition will be (value != null && value != 0), so full script could look like this:


snmp = CreateSNMPTransport($node);
value = SNMPGetValue(snmp, ".1.3.6.1.2.1.16.1.1.1.3." . $1);
return (value != null) && (value != 0);


@sperlm:

you are right, returning 0 is the same as returning false.

Best regards,
Victor