check-snmp-if / Fehlerhafte Charts bei in/out octets

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • check-snmp-if / Fehlerhafte Charts bei in/out octets

      Hallo,

      erst einmal ein großen Lob an den Entwickler dieser Software. Finde das Konzept und die Umsetzung sehr gelungen.

      Nun zu meinem Problem. Mir ist aufgefallen, dass Bit Raten bei Gigabit - Interfaces unter hoher Last fehlerhaft angezeigt werden:
      [Blocked Image: https://forum.bloonix.org/index.php/Attachment/92-Buggy-Chart-png/]


      Anhand der pkt/s kann man sehen, dass das Interface für gute 20min unter Last gewesen ist, jedoch zeigt das Chart für die Bit-Raten lediglich zwei Ausschläge von knapp über 400 Mbit/s an :S

      Ich hab mal ein blick in das Script check_snmp_if geworfen und versucht herauszufinden was da so passiert. Mir ist aufgefallen, dass sowohl 32bit als auch 64bit counter abgefragt werden und die 64bit counter zurück gemeldet werden sollen, wenn diese vorhanden sind:

      Source Code

      1. my ($counters, $result);
      2. if ($if_hc_result && exists $if_hc_result->{"1.3.6.1.2.1.31.1.1.1.6"}) {
      3. $counters = \%if_hc_counters;
      4. $result = $if_hc_result;
      5. } else {
      6. $counters = \%if_counters;
      7. $result = $if_result;
      8. }


      Die Bedingung if ($if_hc_result && exists $if_hc_result->{"1.3.6.1.2.1.31.1.1.1.6"}) wird jedoch nie erfüllt, obwohl die Werte für 64bit Counter vorhanden sind und stattdessen werden 32bit counter zurück gegeben. Wenn ich die Idee hinter dieser Bedingung richtig verstehe, möchtest du prüfen, ob ein ifHCInOctets Counter einen Wert zurück liefert?!

      Wenn man den ersten ifHCInOctets counter prüft sieht es gut aus.

      if ($if_hc_result && exists $if_hc_result->{"1.3.6.1.2.1.31.1.1.1.6.1"})




      [Blocked Image: https://forum.bloonix.org/index.php/Attachment/94-good-chart-png/]
      Images
      • Buggy-Chart.png

        28.44 kB, 1,853×257, viewed 306 times
      • good-chart.png

        23.59 kB, 1,586×256, viewed 305 times
    • Hey, sorry, dass ich mich bislang noch nicht gemeldet habe.

      Mit if ($if_hc_result && exists $if_hc_result->{"1.3.6.1.2.1.31.1.1.1.6"}) soll geprüft werden, ob 64bit Counter zur Verfügung stehen, ansonsten der Fallback auf 32bit. SNMP-If klappt wunderbar bei einer Reihe alter Cisco Router, aber ich kann auch gerne OID 1.3.6.1.2.1.31.1.1.1.6.1 in einer OR Verknüpfung aufnehmen. Was hälst du davon?

      Könntest du das mal vorab machen und testen? Also so:

      if ($if_hc_result && (exists $if_hc_result->{"1.3.6.1.2.1.31.1.1.1.6"} || exists $if_hc_result->{"1.3.6.1.2.1.31.1.1.1.6.1"}))

      Einfach den Check manuell editieren.
    • Hi, kein Problem - hatte nun auch etwas Zeit mich weiter mit dem Thema zu beschäftigen.

      Die Bedingung if ($if_hc_result && exists $if_hc_result->{"1.3.6.1.2.1.31.1.1.1.6"}) ist bei dem Equipment, gegen das ich getestet habe stets false ausgefallen. Ich habe es mit Cisco SG300-10, WS-C3750G-48TS-S, ISR 3845 und einer Synology NAS mit DSM 6.0 ausprobiert. Die Firmware der Netzwerk-Hardware ist nicht älter als aus dem Jahr 2015 (IOS 12.2(55)SE10 / 15.1-4.M10)

      Die Überprüfung mit if ($if_hc_result && exists $if_hc_result->{"1.3.6.1.2.1.31.1.1.1.6.1"}) auf 64 bit counter kann leider auch auf die Nase fallen, wenn das Gerät kein Interface mit der ID 1 hat. Das ist z.B. bei den SG300-10 Switchen im Layer2 Mode der Fall:

      Display Spoiler
      IF-MIB::ifHCInOctets.49 = Counter64: 175179477921
      IF-MIB::ifHCInOctets.50 = Counter64: 1806976408
      IF-MIB::ifHCInOctets.51 = Counter64: 4329954585
      IF-MIB::ifHCInOctets.52 = Counter64: 8794692264
      IF-MIB::ifHCInOctets.53 = Counter64: 5986330
      IF-MIB::ifHCInOctets.54 = Counter64: 0
      IF-MIB::ifHCInOctets.55 = Counter64: 0
      IF-MIB::ifHCInOctets.56 = Counter64: 0
      IF-MIB::ifHCInOctets.57 = Counter64: 0
      IF-MIB::ifHCInOctets.58 = Counter64: 0
      IF-MIB::ifHCInOctets.1000 = Counter64: 176986455259
      IF-MIB::ifHCInOctets.1001 = Counter64: 0
      IF-MIB::ifHCInOctets.1002 = Counter64: 0
      IF-MIB::ifHCInOctets.1003 = Counter64: 0
      IF-MIB::ifHCInOctets.1004 = Counter64: 0
      IF-MIB::ifHCInOctets.1005 = Counter64: 0
      IF-MIB::ifHCInOctets.1006 = Counter64: 0
      IF-MIB::ifHCInOctets.1007 = Counter64: 0



      Die Dinger fangen erst bei ID 49 an die Interfaces durchzunummerieren und die Bedingung fällt wieder false aus.

      Ein weiterer Sonderfall ist, wenn das Interface in der Bedingung 64bit counter hat, aber für das Interface, welches überprüft werden soll, nur 32bit counter vorhanden sind. Dies ist z.B. bei Dialer Interfaces für pppoe Einwahl auf meinem Cisco Router der Fall:

      Display Spoiler
      IF-MIB::ifName.1 = STRING: Gi0/0
      IF-MIB::ifName.2 = STRING: Gi0/1
      IF-MIB::ifName.3 = STRING: Fa1/0
      IF-MIB::ifName.4 = STRING: Fa1/1
      IF-MIB::ifName.5 = STRING: Fa1/2
      IF-MIB::ifName.6 = STRING: Fa1/3
      IF-MIB::ifName.7 = STRING: Fa1/4
      IF-MIB::ifName.8 = STRING: Fa1/5
      IF-MIB::ifName.9 = STRING: Fa1/6
      IF-MIB::ifName.10 = STRING: Fa1/7
      IF-MIB::ifName.11 = STRING: Fa1/8
      IF-MIB::ifName.12 = STRING: Fa1/9
      IF-MIB::ifName.13 = STRING: Fa1/10
      IF-MIB::ifName.14 = STRING: Fa1/11
      IF-MIB::ifName.15 = STRING: Fa1/12
      IF-MIB::ifName.16 = STRING: Fa1/13
      IF-MIB::ifName.17 = STRING: Fa1/14
      IF-MIB::ifName.18 = STRING: Fa1/15
      IF-MIB::ifName.19 = STRING: Vo0
      IF-MIB::ifName.20 = STRING: Nu0
      IF-MIB::ifName.21 = STRING: Vl1
      IF-MIB::ifName.22 = STRING: E3 2/0
      IF-MIB::ifName.23 = STRING: Se2/0
      IF-MIB::ifName.24 = STRING: Lo0
      IF-MIB::ifName.25 = STRING: Lo1
      IF-MIB::ifName.26 = STRING: NV0
      IF-MIB::ifName.27 = STRING: Gi0/1.7
      IF-MIB::ifName.28 = STRING: Vt2
      IF-MIB::ifName.29 = STRING: Vt3
      IF-MIB::ifName.30 = STRING: Vl8
      IF-MIB::ifName.31 = STRING: Vl9
      IF-MIB::ifName.32 = STRING: Di1
      IF-MIB::ifName.33 = STRING: Di2
      IF-MIB::ifName.34 = STRING: Vi1
      IF-MIB::ifName.35 = STRING: Vi2
      IF-MIB::ifName.36 = STRING: Vi3
      IF-MIB::ifName.37 = STRING: Vi4
      IF-MIB::ifName.38 = STRING: Vi5
      IF-MIB::ifName.39 = STRING: Vi6


      Die Interfaces mit den IDs 32 und 33 haben nur 32bit Counter:
      Display Spoiler
      IF-MIB::ifHCInOctets.1 = Counter64: 54563160828
      IF-MIB::ifHCInOctets.2 = Counter64: 457235937929
      IF-MIB::ifHCInOctets.3 = Counter64: 2124624359
      IF-MIB::ifHCInOctets.4 = Counter64: 0
      IF-MIB::ifHCInOctets.5 = Counter64: 537134666
      IF-MIB::ifHCInOctets.6 = Counter64: 0
      IF-MIB::ifHCInOctets.7 = Counter64: 0
      IF-MIB::ifHCInOctets.8 = Counter64: 0
      IF-MIB::ifHCInOctets.9 = Counter64: 0
      IF-MIB::ifHCInOctets.10 = Counter64: 0
      IF-MIB::ifHCInOctets.11 = Counter64: 0
      IF-MIB::ifHCInOctets.12 = Counter64: 0
      IF-MIB::ifHCInOctets.13 = Counter64: 0
      IF-MIB::ifHCInOctets.14 = Counter64: 0
      IF-MIB::ifHCInOctets.15 = Counter64: 0
      IF-MIB::ifHCInOctets.16 = Counter64: 0
      IF-MIB::ifHCInOctets.17 = Counter64: 0
      IF-MIB::ifHCInOctets.18 = Counter64: 0
      IF-MIB::ifHCInOctets.19 = Counter64: 0
      IF-MIB::ifHCInOctets.21 = Counter64: 0
      IF-MIB::ifHCInOctets.23 = Counter64: 0
      IF-MIB::ifHCInOctets.24 = Counter64: 0
      IF-MIB::ifHCInOctets.25 = Counter64: 0
      IF-MIB::ifHCInOctets.26 = Counter64: 0
      IF-MIB::ifHCInOctets.27 = Counter64: 457183265466
      IF-MIB::ifHCInOctets.28 = Counter64: 0
      IF-MIB::ifHCInOctets.29 = Counter64: 0
      IF-MIB::ifHCInOctets.30 = Counter64: 523452311
      IF-MIB::ifHCInOctets.31 = Counter64: 0
      :huh: Looking for counters ?(
      IF-MIB::ifHCInOctets.34 = Counter64: 0
      IF-MIB::ifHCInOctets.35 = Counter64: 0
      IF-MIB::ifHCInOctets.36 = Counter64: 0
      IF-MIB::ifHCInOctets.37 = Counter64: 0
      IF-MIB::ifHCInOctets.38 = Counter64: 1775211972
      IF-MIB::ifHCInOctets.39 = Counter64: 448982672024



      Um diese beiden Fälle mit zu erschlagen sollte die Bedingung die Verfügbarkeit der 64bit Counter für das Interface prüfen, welches gerade abgefragt wird.

      Ich habe es mit ($if_hc_result && exists $if_hc_result->{"1.3.6.1.2.1.31.1.1.1.6.$if"}) erfolgreich getestet.



      Ein weiteres Problem ist wenn ein Gerät für die Octets 64bit Counter hochzählt aber die UcastPkts nur in den 32Bit counter zählt und die 64bit counter auf 0 belässt. Meine dollen SG300 Switche machen so ein Schwachsinn :cursing:

      Display Spoiler

      1.3.6.1.2.1.31.1.1.1.7:
      IF-MIB::ifHCInUcastPkts.49 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.50 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.51 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.52 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.53 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.54 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.55 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.56 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.57 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.58 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.1000 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.1001 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.1002 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.1003 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.1004 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.1005 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.1006 = Counter64: 0
      IF-MIB::ifHCInUcastPkts.1007 = Counter64: 0

      1.3.6.1.2.1.2.2.1.11:
      IF-MIB::ifInUcastPkts.49 = Counter32: 706243
      IF-MIB::ifInUcastPkts.50 = Counter32: 0
      IF-MIB::ifInUcastPkts.51 = Counter32: 0
      IF-MIB::ifInUcastPkts.52 = Counter32: 0
      IF-MIB::ifInUcastPkts.53 = Counter32: 0
      IF-MIB::ifInUcastPkts.54 = Counter32: 0
      IF-MIB::ifInUcastPkts.55 = Counter32: 0
      IF-MIB::ifInUcastPkts.56 = Counter32: 0
      IF-MIB::ifInUcastPkts.57 = Counter32: 893445
      IF-MIB::ifInUcastPkts.58 = Counter32: 129336
      IF-MIB::ifInUcastPkts.1000 = Counter32: 1022783
      IF-MIB::ifInUcastPkts.1001 = Counter32: 0
      IF-MIB::ifInUcastPkts.1002 = Counter32: 0
      IF-MIB::ifInUcastPkts.1003 = Counter32: 0
      IF-MIB::ifInUcastPkts.1004 = Counter32: 0
      IF-MIB::ifInUcastPkts.1005 = Counter32: 0
      IF-MIB::ifInUcastPkts.1006 = Counter32: 0
      IF-MIB::ifInUcastPkts.1007 = Counter32: 0
    • Im Enddefekt ist IF-MIB::ifHCInOctets.49 ja 1.3.6.1.2.1.31.1.1.1.6.<Ifindex> . Der Ifindex kann sich aber von Switch zu Switch unterscheiden. Die Physikalischen Ports an meinem 48 Port Catalyst fangen bei der ID 10101 (Gigabit1/0/1) an. SVIs haben die gleiche ID wie das Vlan und Port-Channels starten bei 5000 +Port-Channel-id.

      Wenn ich das Script richtig verstanden habe kommt in die Variable $if die Ifindex ID des Interfaces, welches gerade ausgelesen wird:

      Source Code

      1. my $if;
      2. my $search = $if_names // $if_result;
      3. foreach my $oid (keys %$search) {
      4. if ($oid =~ /(\d+)\z/) {
      5. my $if_num = $1;
      6. if ($opt->{debug}) {
      7. print STDERR ">> found interface $oid -> $search->{$oid}\n";
      8. }
      9. if ($opt->{interface} =~ /^\d+\z/) {
      10. if ($opt->{interface} eq $if_num) {
      11. $if = $if_num;
      12. }
      13. } elsif ($search->{$oid} eq $opt->{interface}) {
      14. $if = $if_num;
      15. }
      16. if (defined $if) {
      17. if ($opt->{debug}) {
      18. print STDERR ">> interface $search->{$oid} matched\n";
      19. }
      20. last;
      21. }
      22. }
      23. }
      24. if (!$if) {
      25. $plugin->exit(
      26. status => "UNKNOWN",
      27. message => "interface $opt->{interface} does not exists"
      28. );
      29. }
      Display All



      Die Bedingung mit der Liste aller ifHCInOctets Counter der vorhanden Interface kann man sicher auch formulieren, jedoch kann man damit in einen 'unknow error' laufen wenn vereinzelte Interfaces auf dem Gerät nur 32Bit Counter haben. Ich weiß leider nicht wieso die Prüfung mit der Liste bei mir immer false ausfällt :/. Ich finde aber es ist auch nicht ziel führend die Existenz von 64 Bit Countern mit einer Liste von mehreren Interfaces zu überprüfen, wenn nur die Statistiken von einem Interface ausgelesen werden sollen. Dann doch lieber schauen, ob das aktuelle Interface die Counter hat, oder?
    • Hi,

      ich habe es gegen ein Router mit nur 32Bit Countern und einen mit 64 und 32bit countern getestest. Der Check erkennt damit, ob Werte für if_hc_result vorhanden sind.

      Bei meinem Cisco Router und dem pppoe (Dialer) Interface, erhalte ich jedoch als Result "Unknown Error", weil die Dialer Interfaces nur 32Bit Counter haben, während alle anderen Interfaces über 32 und 64Bit Zähler verfügen. Daher ist der Check mit ($if_hc_result && exists $if_hc_result->{"1.3.6.1.2.1.31.1.1.1.6.$if"}) für mich die bessere Lösung.
    • Hallo,

      ja bei Cisco Equipment gibt es schon merkwürde Ideen im code der firmware ;)

      Danke überigens für den Change an den Script.

      Eine Sache noch die mich etwas stört. Die Error Counter ( in_discards => "1.3.6.1.2.1.2.2.1.13", in_errors => "1.3.6.1.2.1.2.2.1.14",out_discards => "1.3.6.1.2.1.2.2.1.19",out_errors => "1.3.6.1.2.1.2.2.1.20") gehen nicht durch die delta Berechnung, sondern werden absolut an ES übergeben. Damit lässt sich nicht sinnvoll thresholds für diese Counter definieren.

      Mein Ansatz für die Delta Berechnung wäre wie folgt:

      Display Spoiler

      Perl Source Code

      1. #!/usr/bin/perl
      2. # Some basics, in/out discards and errros
      3. my %if_basics = (
      4. descr => "1.3.6.1.2.1.2.2.1.2",
      5. #speed => "1.3.6.1.2.1.2.2.1.5",
      6. admin_status => "1.3.6.1.2.1.2.2.1.7",
      7. oper_status => "1.3.6.1.2.1.2.2.1.8",
      8. # in_discards => "1.3.6.1.2.1.2.2.1.13",
      9. # in_errors => "1.3.6.1.2.1.2.2.1.14",
      10. # out_discards => "1.3.6.1.2.1.2.2.1.19",
      11. # out_errors => "1.3.6.1.2.1.2.2.1.20",
      12. );
      13. # Error Counter
      14. my %if_errors = (
      15. in_discards => "1.3.6.1.2.1.2.2.1.13",
      16. in_errors => "1.3.6.1.2.1.2.2.1.14",
      17. out_discards => "1.3.6.1.2.1.2.2.1.19",
      18. out_errors => "1.3.6.1.2.1.2.2.1.20",
      19. );
      20. [...]
      21. my ($counters, $result, $error_counter, $error_result);
      22. if ($if_hc_result && $if_hc_result->{"1.3.6.1.2.1.31.1.1.1.6.$if"}) {
      23. $counters = \%if_hc_counters;
      24. $result = $if_hc_result;
      25. $error_counter = \%if_errors;
      26. $error_result = $if_result;
      27. foreach my $key (keys %$error_counter) {
      28. my $oid = $error_counter->{$key};
      29. if (!exists $error_result->{"$oid.$if"} && $key !~ /nucast/) {
      30. $plugin->exit(
      31. status => "UNKOWN",
      32. message => "oid $oid.$if does not exists"
      33. );
      34. }
      35. $stat->{$key} = $error_result->{"$oid.$if"} || 0;
      36. }
      37. } else {
      38. $counters = \%if_counters;
      39. $result = $if_result;
      40. $error_counter = \%if_errors;
      41. $error_result = $if_result;
      42. foreach my $key (keys %$error_counter) {
      43. my $oid = $error_counter->{$key};
      44. if (!exists $error_result->{"$oid.$if"} && $key !~ /nucast/) {
      45. $plugin->exit(
      46. status => "UNKOWN",
      47. message => "oid $oid.$if does not exists"
      48. );
      49. }
      50. $stat->{$key} = $error_result->{"$oid.$if"} || 0;
      51. }
      52. }
      53. foreach my $key (keys %$counters) {
      54. my $oid = $counters->{$key};
      55. if (!exists $result->{"$oid.$if"} && $key !~ /nucast/) {
      56. $plugin->exit(
      57. status => "UNKOWN",
      58. message => "oid $oid.$if does not exists"
      59. );
      60. }
      61. $stat->{$key} = $result->{"$oid.$if"} || 0;
      62. }
      63. $stat->{admin_status} = $if_oper_status->{ $stat->{admin_status} };
      64. $stat->{oper_status} = $if_oper_status->{ $stat->{oper_status} };
      65. delete $stat->{descr};
      66. my %delta_keys = (%if_counters, %if_hc_counters, %if_errors);
      67. foreach my $key (keys %delta_keys) {
      68. if (!exists $stat->{$key}) {
      69. $stat->{$key} = 0;
      70. }
      71. }
      72. $plugin->delta(time => $time, stat => $stat, keys => [ keys %delta_keys ]);
      Display All


      Das lässt sich bestimmt auch eleganter lösen ;) ich werde das mal testen und gebe Rückmeldung.
    • Nunja, wie gesagt die Counter werden absolut als stats zurückgemeldet und einfach hochgezählt. Drops auf einem Interface kommen vor und sind erst ab einer gewissen Anzahl zu beachten - in Relation zum gesammten traffic der über das Interface läuft und der Zeitspanne in der die Fehler auftreten. Definiere ich eine z.B. threshold von in_discards >= 10 als Warning ist dieser früher oder später überschritten. Der Counter auf dem Gerät wird erst zurückgesetzt wenn es neustartet oder der Zäher wrapt. Wenn das innerhalb eines Monats 10 frames verworfen werden ist mir das egal. Wenn das Konstant alle 60 Sekunden auftritt stimmt da etwas nicht.

      edit:
      Es werden immer AVG (pro Sekunde) Werte übergeben.


      Genau das passiert bei den besagten stats nicht, da diese im array %if_basics stehen und dafür keine Berechnung des average stattfindet. Das Chart oben ist die Ausgabe wenn man das Script in seiner derzeitigen Form ausführt. Das untere Charts in nach den Änderungen, welche ich gepostet habe.

      [Blocked Image: https://forum.bloonix.org/index.php/Attachment/100-error-counter-png/]
      Images
      • error_counter.png

        31.68 kB, 1,152×648, viewed 244 times

      The post was edited 1 time, last by LukiTJ ().

    • Also ums nochmal etwas zu verdeutlichen.

      Angenommen du möchtest gerne überwachen, dass nicht mehr als 10 Frames innerhalb von 60 Sekunden verworfen werden. Wenn nun der Check mal nach 70 Sekunden, mal nach 80 Sekunden, mal nach 65 Sekunden den Status des Counters überwacht, gibt es überall das gleiche Problem... es muss auf die Sekundenzahl von 60 Sekunden berechnet werden. Bei Bloonix wird halt alles runter auf 1s berechnet.
    • Das ist ja noch nichtmal alles.....

      Stell dir vor, du hast diverse Router mit unterschiedlichen Check-Intervallen.... hier 30s, da 60s, dort 300s. Passt du dann auch überall den Schwellwert dementsprechend an? Also wenn du 10 Frames pro Minute als Schwellwert definieren möchtest, müsstest du bei einem Intervall von 30s 5 angeben und bei 300s einen Schwellwert von 50.

      Durch den AVG Wert kannst du aber bei allen Checks einen Schwellwert von 0.166s angeben.
    • Schau doch bitte auf das obere der beiden Charts. in_discards von ~280K können wohl kaum der Durchschnitt einer Sekunde sein, oder?

      Das mit den 10 Frames alle 60 Sekunden war ein allgemeines Beispiel und nicht auf Bloonix bezogen. Ich weiß, dass Bloonix für die Berechnung des Durchschnitts eines Wertes die Differenz von Zeit und Zähler zwischen zwei checks ermittelt und dann den Zählerdifferenz durch die Zeitdifferenz teilt. Also wenn der erste Check gelaufen ist (T=0 sec) und in_discard einen Wert von 100 zurück gibt und beim nächsten Check-Durchlauf (T=120 sec) einen Wert von 220 in_discards meldet, sollte 120 / 120 = 1 in_discard das Ergebnis sein.


      Mir geht es einfach darum, dass für in_discards, in_errors, out_discards und out_errors derzeit überhaupt kein Durchschnitt errechnet wird, weder für 60sekunden noch für 1 Sekunde. Das Script ließt ~280K für das Interface aus und meldet den Wert unverändert an den Bloonix Server zurück. Siehe snmpwalk:


      [Blocked Image: https://forum.bloonix.org/index.php/Attachment/101-in-discards-snmp-png/]
      Images
      • in_discards-snmp.png

        4.93 kB, 373×126, viewed 242 times

      The post was edited 2 times, last by LukiTJ ().

    • :) Jup das haben wir wohl. %if_errrors ist ein von mir definiertes Hash-Array. Den Code, den ich oben gepostet habe ist von mir bereits agepasst und damit funktioniert die Errechnung des Durchschnittes. Ich bin aber nicht wirklich gut was perl angeht und denke, dass man das etwas besser lösen kann als ich das gemacht habe.