2015-05-29 10 views
6

Küçük bir izleme çözümü yapıyorum ve önceki okumaların mevcut okumadan daha büyük olduğu durumlarda doğru/en iyi davranışın ne olduğunu anlamak istiyorum. Örneğin, ifHCOutOctets SNMP nesnesi, Cisco yönlendiricide bir arabirimden iletilen baytları sayar. Grafik sayacı, örneğin yeniden yönlendiricinin yeniden başlatılması nedeniyle örneğin 0'a geri sıfırlanırsa nasıl davranmalıdır?SNMP sayacı önceki okumadan daha küçük bir değere sahip olduğunda grafik aracı nasıl davranmalıdır?

: Bu dayanarak inşa edildi

bandwidth graph based on algorithm

Trafik grafiğinin:

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 

Ben de yukarıdaki algoritmaya dayalı küçük bir örnek grafiği yaptı: algoritması aşağıdaki Benim seçenekte doğru davranıştır

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 

Bana göre bu küçük algoritma düzgün çalışıyor gibi görünüyor.

Lütfen bir şey belirsiz ise bildirin. Soruyu düzeltirim.

+0

Grafik uygulaması, iletilen baytların bazı deltalarını veya mutlak değerini gösterecektir? –

+0

Delta göstermesi gerekiyor. Bir bant genişliği (bps) grafiği olacaktır. – Martin

cevap

0

Yanıp sönen şey ile gördüğüm problem, normal işlem durumunda sayacın değişmesidir. Yöneltici yeniden başlatıldıktan sonra, bazı mutlak değerler gösterecektir.

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 

Ayrıca elif bölümünü kaldırmak ve sadece sayaç/yönlendirici yeniden belirtmek için negatif bir değer yazdırabilirsiniz: Eğer öneririm 2 okuma delta göstermek istiyorsanız bu 2. karşılaştırma yolu artık var

+0

Uygulamada arayüz sayaçlarının sürekliliğine nasıl sebep oluyorsunuz? Ayrıca, neden if\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ İlk sorumu ile hiçbir ilişki görmüyorum. – Martin

+0

Cisco SNMP belgelerini anladığım kadarıyla, “ifCounterDiscontinuityTime” bir arabirim sayacının yeniden başlatıldığı zamanı gösterir. Örneğin, yalnızca arabirimin yeniden başlatılması ("kapatma" ve "kapatma" komutları) veya kablosunun çıkarılması gibi durumlardan kaynaklanabileceğinden şüpheleniyorum. Bunu test edemiyorum çünkü şu anda Cisco'ya erişimim yok cihazlar –

+0

Arabirim sıfırlamaları, bir arayüzün sıfırlanma sayısıdır. Bir arabirim üç saniye boyunca iletemiyorsa, ASA iletimi yeniden başlatmak için arabirimi sıfırlar. Bu aralıkta bağlantı durumu korunur. Bir arabirim geri döndüğünde veya kapatıldığında, arabirim sıfırlaması da yapılabilir. Bunu [http://www.tunnelsup.com/understanding-cisco-asa-interface-counters-and-statistics] (http://www.tunnelsup.com/understanding-cisco-asa-interface-counters-and-statistics) ( –

0

Özellikle örnek tipi 'Counter32' ise, sayaçların yuvarlanmasının hesaba katılması önemlidir. Bir "en iyi uygulama" olup olmadığından emin değilim. Ancak, kısmi bir örneğiniz olduğunu bildiğinizde, tam örnekleminizde aynı oranda bir artış yaşatmış olsanız da, örnekleminizdeki veri parçasını da tahmin edebilirsiniz. Verileriniz çok dağınık değilse, daha akıcı bir grafik oluşturmalıdır.

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; 
    } 
} 
İlgili konular