2016-05-06 12 views
0

Ja, ich weiß,95th Perzentil Erhalten Sie nur durch RRD

"DEF:in=$rrd_file:traffic_in:AVERAGE:step=1", 
"DEF:out=$rrd_file:traffic_out:AVERAGE:step=1", 
'CDEF:bitin=in,8,*', 
'CDEF:bitout=out,8,*', 
'CDEF:total=bitin,bitout,+', 
'VDEF:pct_total=total,95,PERCENT', 
'VDEF:pct_in=bitin,95,PERCENT', 
'VDEF:pct_out=bitout,95,PERCENT', 

Um In, Out und ein 95th zu bekommen (In + Out).

Aber 95. (In + Out) obwohl richtig für was es ist, ist es nicht das, was ich brauche als insgesamt 95th.

Ich brauche es die konventionellen In-Werte und Out-Werte zusammen "abgeflacht" und 95. daraus berechnet. Wenn also 1 Link hauptsächlich Inbound mit großen In-Spikes macht, ist dieses bessere 95. Perzentil eine Nummer näher am durchschnittlichen eingehenden Datenverkehr, da die meisten/alle Top-Spikes eingehenden Datenverkehr nicht viel in die Gesamtnutzung einbeziehen. Und in ähnlicher Weise Link 2 tut meist Outbound dieses 95. Perzentil wäre eine Zahl näher an den Outbound durchschnittlichen Verkehr.

Gibt es eine Möglichkeit, dies mit RRDtools allein zu tun, ähnlich den obigen Befehlsparametern?

In Perl habe ich sowas (dreckig) gemacht aber das Zeitfenster (wird nicht von rrdtool fetch als Parameter erkannt) und über längere Zeiträume (sagen wir einen Monat) bekomme ich keins Proben, also ist etwas Versöhnung von mir verborgen;

my ($start, $end, $rrd_file) = @_; 

my @series = `rrdtool fetch -s $start -e $end $rrd_file MAX`; 

my @all; 
foreach my $line (@series) { 
    if ($line !~ m/nan/ig && $line =~ m/(\d+): (\S+) (\S+)/) { 
     my ($time, $in, $out) = ($1, $2, $3); 

     push(@all, $in * 8, $out * 8); 
    } 
} 

@all = sort {$b <=> $a} @all; 

my $index_all = int(scalar(@all) * 0.05) + 1; 

return sprintf("%.2f", $all[$index_all]/1000/1000); 

wo

my $end = DateTime->now(time_zone => 'local')->truncate(to => 'minute'); 
my $start = $end->clone->subtract(hours => 168)->epoch(); 
$end = $end->epoch(); 

Antwort

1

Ich bin nicht ganz sicher, was Sie unter ‚abgeflachte‘ aber vielleicht ein Mann Sie zu halten, je nachdem, was größer ist?

"DEF:in=$rrd_file:traffic_in:AVERAGE:step=1", 
"DEF:out=$rrd_file:traffic_out:AVERAGE:step=1", 
'CDEF:bitin=in,8,*', 
'CDEF:bitout=out,8,*' 
'CDEF:bitmax=bitin,bitout,MAX', 
'VDEF:pct_max=total,95,PERCENT', 
'VDEF:pct_in=bitin,95,PERCENT', 
'VDEF:pct_out=bitout,95,PERCENT' 
+0

Ja einfach nicht zu kümmern, die in oder aus, aber alle Datenpunkte verwenden beide von ein und aus, legen Sie sie und die 95th steigen, dass, werden Sie sehen, wie das aussieht, aber ich vermute, es wird die untere außer Acht lassen und ich werde endlbin mit 95th (in) oder 95th (out) je nachdem, was war max – Recct

+0

Bekommt mir nur die 9. der größeren Wert, vielleicht mit einigen Set-Operationen könnte ich die 2 Datenquellen nicht sicher, wie das könnte kombinieren sieht aus wie – Recct

+0

Im Wesentlichen berechnen 95. Perzentil auf 'in' und' out' Serie und nicht die Ergebnisse ihrer Mittelung/Umwandlung in Bits – Recct