是的,我知道,
"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',
进入,退出和第95(进/出)。
但是第95(In + Out)虽然正确,但它不是我需要的总计第95位。
我需要传统的In值和Out值一起" flattened"并且第95次计算出来了。 因此,如果1个链接主要是Inbound with big In spikes,那么更好的第95个百分位将是更接近平均入站流量的数字,因为大多数/所有最高峰值将是入站流量出站不会影响总使用量。 类似地,链接2主要是出站,这个第95百分位数将是更接近出站平均流量的数字。
有没有办法单独使用RRDtools,类似于上面的命令参数?
在Perl中,我做过像这样的事情(脏),但我没有调整时间窗口(-a
无法将rrdtool fetch
识别为参数)并且持续时间更长一段时间(比如说一个月)我得到的样本很少,所以对我来说隐藏了一些和解;
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);
其中
my $end = DateTime->now(time_zone => 'local')->truncate(to => 'minute');
my $start = $end->clone->subtract(hours => 168)->epoch();
$end = $end->epoch();
答案 0 :(得分:1)
我不太清楚你的意思是什么&#39;被压扁的&#39;但也许你可以保留更大的那个?
"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'