2015-05-29 4 views
6

Ich baue eine kleine Überwachungslösung und würde gerne verstehen, was das richtige/beste Verhalten in Situationen ist, in denen der vorherige Messwert größer ist als der aktuelle Messwert. Zum Beispiel ifHCOutOctets SNMP-Objekt zählt Bytes von einer Schnittstelle in Cisco Router übertragen. Wie sollte sich die Grafikanwendung verhalten, wenn dieser Zähler aufgrund eines Neustarts des Routers wieder auf 0 zurückgesetzt wird? In meiner Option folgenden Algorithmus ist das richtige Verhalten:Wie sollte sich das Grafikwerkzeug verhalten, wenn der SNMP-Zähler einen kleineren Wert als der vorherige Wert hat?

if [ ! $prev_val ]; then 
    # This reading will be used to set the baseline value for "prev_val" variable 
    # if "prev_val" does not already exist. 
    prev_val="$cur_val" 
elif ((prev_val > cur_val)); then 
    # Counter value has set to zero. 
    # Use the "cur_val" variable. 
    echo "$cur_val" 
    prev_val="$cur_val" 
else 
    # In case "cur_val" is higher than or equal to "prev_val", 
    # use the "cur_val"-"prev_val" 
    echo $((cur_val - prev_val)) 
    prev_val="$cur_val" 
fi 

Ich habe auch eine grafische Darstellung kleine Beispiel basierte auf dem Algorithmus oben:

bandwidth graph based on algorithm

Verkehr Graph wurde auf dieser Basis gebaut:

reading 1: cur_val=0, prev_val will be 0 
reading 2: 0-0=0(0 Mbps), cur_val=0, prev_val will be 0 
reading 3: 20-0=20(160 Mbps), cur_val=20, prev_val will be 20 
reading 4: 20-20=0(0 Mbps), cur_val=20, prev_val will be 20 
reading 5: 50-20=30(240 Mbps), cur_val=50, prev_val will be 50 
reading 6: 40(320Mbps), cur_val=40, prev_val will be 40 
reading 7: 70-40=30(240 Mbps), cur_val=70, prev_val will be 70 
reading 8: no data from SNMP agent 
reading 9: 90-70=20(160 Mbps), cur_val=90, prev_val will be 90 

Für mich sieht es aus wie dieser kleine Algorithmus richtig funktioniert.

Bitte lassen Sie mich wissen, wenn etwas unklar ist und ich werde meine Frage zu verbessern.

+0

Die grafische Anwendung zeigt einige Delta oder einen absoluten Wert der übertragenen Bytes? –

+0

Es muss Delta angezeigt werden. Es wird eine Bandbreite (bps) Grafik sein. – Martin

Antwort

0

Das Problem, das ich mit dem Echo sehen kann, ist, dass im Falle eines normalen Betriebs der Wechsel des Zählers ist. Nach dem Neustart des Routers wird ein absoluter Wert angezeigt. Es ist jetzt Weg, um diese vergleichen 2. Wenn Sie das Delta der 2 Lesung zeigen wollen, würde ich vorschlagen:

if [ ! $prev_val ]; then 
    # This reading will be used to set the baseline value for "prev_val" variable 
    # if "prev_val" does not already exist. 
    prev_val="$cur_val" 
elif ((prev_val > cur_val)); then 
    # Counter value has set to zero. 
    # Use the "cur_val" variable. 
    echo "Router/counter restarted" 
    # restart the counter as well 
    prev_val="$cur_val" 
else 
# In case "cur_val" is higher than or equal to "prev_val", 
# use the "cur_val"-"prev_val" 
    echo $((cur_val-prev_val)) 
fi 

Sie können auch elif Teil entfernen und nur negativen Wert drucken, um Neustart des Zähler/Router angeben

+0

Wie verursachen Sie in der Praxis Diskontinuitäten für Schnittstellenzähler? Kannst du mir bitte erklären, warum ich die 'ifCounterDiscontinuityTime' abfragen sollte? Ich meine, ich sehe keine Verbindung zu meiner anfänglichen Frage. – Martin

+0

Soweit ich die SNMP-Dokumentation von Cisco verstehe, zeigt 'ifCounterDiscontinuityTime' den Zeitpunkt an, an dem ein Schnittstellenzähler neu gestartet wurde. Ich vermute, dass dies zum Beispiel passieren kann, wenn nur die Schnittstelle neu gestartet wird ('shutdown' und' no shutdown' Befehle) oder das Kabel nicht angeschlossen ist. Ich kann das nicht testen, da ich momentan keinen Zugang zu Cisco habe Geräte –

+0

Schnittstellen-Resets sind die Anzahl der Male, die eine Schnittstelle zurückgesetzt wurde. Wenn eine Schnittstelle drei Sekunden lang nicht senden kann, setzt die ASA die Schnittstelle zurück, um die Übertragung erneut zu starten. Während dieses Intervalls wird der Verbindungsstatus beibehalten. Ein Zurücksetzen der Schnittstelle kann auch auftreten, wenn eine Schnittstelle zurückgeschleift oder heruntergefahren wird. Ich habe das [hier] gefunden (http://www.tunnelsup.com/understanding-cisco-asa-interface-counters-and-statistics) –

0

Insbesondere wenn der Probentyp "Counter32" ist, lohnt es sich, die Rollen zu berücksichtigen. Ich bin mir nicht sicher, ob es sich um eine "Best Practice" handelt, aber wenn Sie wissen, dass Sie eine Teilstichprobe haben, können Sie auch das Datenfragment auf Ihre Stichprobe extrapolieren, als ob Sie die gleiche Wachstumsrate in Ihrer gesamten Stichprobe hätten. Wenn Ihre Daten nicht sehr stoßweise sind, sollte dies zu einem glatteren Diagramm führen.

partial_calc = $((sample_time - ifCounterDiscontinuityTime)); 
if ("$interval" -gt "$partial_calc") { 
    sample = $((curr_val * interval/partial_check)) 
} elif "$curr_val" -gt "$prev_val" { 
    sample = $((curr_val - prev_val)); 
} else { 
    if ("$type" -eq "Counter32") { 
    sample = $((4294967295 - prev_val + curr_val)); 
    } else { 
    sample = $curr_val; 
    } 
}