[megoldva] perl - snmp

Munin plugint probalok irni ami lekerdezne egyik nyomtatom allapotat SNMP-n keresztül az alap SNMP lekerdezo pluginok amit munin-node-configure-snmp configol abban van irva.

SNMPWALK al siman letudom kerdezni, mar kiprobalgattam melyik OID kene nekem :

snmpwalk -v 1 -c public 192.168.1.91 1.3.6.1.2.1.43.10.2.1.4

Ez szepen ki is dobja a kivant erteket :

SNMPv2-SMI::mib-2.43.10.2.1.4.1.1 = Counter32: 177136

Viszont a perl kodom vlmi hibat dob :

use Net::SNMP;

# requires a hostname and a community string as its arguments
($session,$error) = Net::SNMP->session(Hostname => $ARGV[0],
Community => $ARGV[1]);
die "session error: $error" unless ($session);

$result = $session->get_request("1.3.6.1.2.1.43.10.2.1.4");
die "request error: ".$session->error unless (defined $result);

$session->close;

print "Disk Percent 1: ".$result->{"1.3.6.1.2.1.43.10.2.1.4"}."\n";

Ezt irja :
request error: Received noSuchName(2) error-status at error-index 1 at ./proba line 10.

A PERL a default etch, azaz 5.8.8

Hozzászólások

a kod az jo, "1.3.6.1.2.1.43.10.2.1.4" ezzel nem stimmel vmi :P

oszinten szolva nem ertek annyira SNMP meg MIB meg ilyesmikhez ennyire

viszont ha megnezed akkor snmpwalk nak azt a parametert adom meg amit perl kodban is irtam.
Aza masik szam az valahogy az OID egy resz csak amit nyomtato ad vissza SNMP keresre valaszkent, tehat

"snmpwalk -v 1 -c public 192.168.1.91 1.3.6.1.2.1.43.10.2.1.4"

az utolsó paraméter az OID, azt adtam perl nek is.

Természetesen probaltam azt a masik szamot is megadni de azzal semmi nem adott normalis kimenetet.

Workaround kent most megirtam bash+awk+snmpwalk al a munin plugint, de valsz perl gyorsabb lenne.

Értem....

snmpget -v 1 -c public 192.168.1.91 1.3.6.1.2.1.43.10.2.1.4

Error in packet
Reason: (noSuchName) There is no such variable name in this MIB.
Failed object: SNMPv2-SMI::mib-2.43.10.2.1.4

De akkor hogyan tudom kideriteni hogy :

"SNMPv2-SMI::mib-2.43.10.2.1.4.1.1 = Counter32: 177170"

Ennek mennyi az OID je ? vagy GET el ezt hogyan tudom lekeredzni ?

OT, de ha tudod, hogy ezt kell lekérdezned, akkor elárulod nekem, hogy ez minek az OID-ja? (Mert a kódodból úgy tűnik, valami hálózati nyomtató háttértárának mérete/szabad területe, és az én nyomtatómnak is van ilyene, de háttértára aztán nincsen :-) )

Hát lehet hogy szabvány szerint ez az, viszont ez 1 brother 6050DN nyomtato, megneztem webes feluleten mennyi a nyomtatott oldal szam.
Aztan fogtam SNMPWALK ot es addig maszkaltam benne, valtoztatgatva kicsit az OID kodot amig meg nem kaptam azt a szamot.
Szoval en a nyomtatott oldalak szamat kerestem.

Köszi az infót, nálam is úgy tűnik, hogy stimmel. Legalábbis én is azt kapom a nyomtató webes felületén amit ez a lekérdezés ad ("Engine page count: XXX" a weboldalon a válasz. Már csak azt kéne tudni, ez pontosan mit is jelent, mert eddig már 2x volt cserélve a fekete toner (5000-s!) és egyszer a henger, ami meg elvben 20000, de tény, hogy elképesztő ütemben csökken az az érték, amit én eddig a hátralevő oldalak számaként értelmeztem.)

kicist dolgozni kell vele de ki lehet deriteni mit, hol ad vissza SNMP ben:


snmpwalk -v 1 -c public 192.168.1.91

Aztán az itt kapott értékek kozul kikeresgeled hogy melyik kell neked.
Ha van valami webes/GUI-s feluleted a nyomtato fele ott megtudod pl. nezni mi mennyi eppen, es arra GREP elsz elozo prg kimeneten.

Köszi, ezen túl vagyok. Pont ilyen snmpwalk-kal jottem ra a különböző tonereim "elvi" telítettségére, de tekintettel arra, hogy a beépített web-felület katasztrofálisan használhatatlanul kevés infót adott vissza, nem tűnt fel benne ez a konkrét (és kb egyetlen használható) érték. (Az én nyomtatóm csak kb 5 baromira kicicomázott színes/rajzos állapotoldal kinyomtatásával képes pl. azt az infót kiadni, hogy mennyire vannak tele a tonerjei - a weben ez nem látszik :-( )

Valoban, csak man-t kellett volna olvasni -On kapcsoloval az snmpwalk kiirja a talalt OID ket, es tenyleg az amit irtal.

Igy mar jo is :

#!/usr/bin/perl
use Net::SNMP;

# requires a hostname and a community string as its arguments
($session,$error) = Net::SNMP->session(Hostname => $ARGV[0],Community => $ARGV[1]);
die "session error: $error" unless ($session);

$result = $session->get_request(".1.3.6.1.2.1.43.10.2.1.4.1.1");
die "request error: ".$session->error unless (defined $result);

$session->close;

print "Nyomtatott oldalak : ".$result->{".1.3.6.1.2.1.43.10.2.1.4.1.1"}."\n";

A perl-es megoldas piciket gyorsabb, es ez kozel sem elhanyagolhato mivel ez egy munin plugin lesz:

Perl

real 0m0.647s
user 0m0.128s
sys 0m0.016s

real 0m0.303s
user 0m0.120s
sys 0m0.016s

real 0m0.509s
user 0m0.120s
sys 0m0.012s

Bash+snmpwalk (regi megoldasom :)

real 0m0.998s
user 0m0.248s
sys 0m0.016s

real 0m0.951s
user 0m0.228s
sys 0m0.032s

real 0m0.963s
user 0m0.208s
sys 0m0.056s

Köszönöm a segítséget....