Thread Problem mit SNMP Abfrage
(3 answers)
Opened by epytir at 2015-04-30 11:54
Hey Community,
ich habe vor kurzem mit Perl angefangen um SNMPv3 Abfragen durchzuführen. Ich habe nun das Problem das ich nicht in meine foreach Schleife komme ... weiß aber nicht warum , da elemente in meiner Variable definiert sind. Um folgenden Code geht es : Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 $serverresponse = $session->get_table($SystemTempEntry); $session->close; #Die Table wird erfolgreich als Hash abgehollt (Eine Temperaturabfrage einer Storage Systems) foreach my $snmpkey (keys %{$serverresponse} ) { my ($oid,$key) = ( $snmpkey =~ /(.*)\.(\d+)$/ ); $snmpresponse{$oid}{$key} = $serverresponse->{$snmpkey}; } #Die SNMP Response zuweisung geht auch folgede ausgabe bekomm ich für die Elemente von $snmpresponse{$oid}{$key} 1 4 1 Baseboard 1 CPU 0 Relative 33 1 20 -54 2 1 5 1 Front panel 36 1 1 1 1 usw. $state = 'OK'; #Jetzt sollte er eigentlich für jedes Element der OID SystemTempDescription die weiter oben definiert ist einmal durch die Schleife gehen... #Er kommt aber nie in die Schleife . Ich habe genau diesen Code bei einer Festplattenabfrage zum laufen gebracht. Die OID von SystemTempDescription stimmt. #Ich habe alle OIDs getestet und an denen kann es nicht liegen(Der Rückgabewert weiter oben stimmt ja auch) foreach my $key ( keys %{$snmpresponse{$SystemTempDescription}} ) { print "......................................."; if ( defined $value ) { if ( $snmpresponse{$SystemTempDescription}{$key} eq $value ) { my $TempSensor = $snmpresponse{$SystemTempDescription}{$key}; my $Temp_name = basename($TempSensor); my $Temperature = $snmpresponse{$SystemTempCurrentValue}{$key}; $answer = "Sensor: ".$Temp_name." Termp:".$Temperature; $perfdata = $Temp_name.$Temperature; $state = 'WARNING' if ( ( defined $warn ) && ( $Temperature >= $warn ) ); $state = 'CRITICAL' if ( ( defined $warn ) && ( $Temperature >= $crit ) ); last; } } else { my $TempSensor = $snmpresponse{$SystemTempDescription}{$key}; print $TempSensor; my $Temp_name = basename($TempSensor); print $TempSensor; my $Temperature = $snmpresponse{$SystemTempCurrentValue}{$key}; print $Temperature; $answer .= "Sensor: ".$Temp_name." Termp:".$Temperature; $perfdata .= $Temp_name.$Temperature; $state = 'WARNING' if ( ( defined $warn ) && ( $Temperature >= $warn ) && ( $state ne 'CRITICAL') ); $state = 'CRITICAL' if ( ( defined $warn ) && ( $Temperature >= $crit ) ); } } Ich habe mein Problem im COde beschrieben. Hoffe jemand kann mir helfen :( Gruß Epytir |