[rrd-users] find out the current scale (output from autoscaler)

Karl Fischer rrd-users at ficos.de
Fri Jan 9 13:32:23 CET 2009


Scott Brumbaugh wrote:
> Hi Karl,
> 
> Karl Fischer wrote:
>> Happy New Year to everyone.
>>
>>
>> Is there a way to find out what the current (y) scale is?
>>
>> I'm trying to display some values only if they fit the current scale but
>> I don't want these values to extend the current scale.
>> For example when watching disk usage I'd like to show a line for disk
>> capacity when (and only when) disk usage gets near the disk capacity.
>> But I don't want the scale to be extended to - lets say 100G - when only
>> 1.83 GB is used ...
>>
>> So what I've tried so far is:
>>
>> CDEF:my_scale=df_used,MAX,1.2,*
>> CDEF:my_total=df_total,0,my_scale,LIMIT
>>
>> So I'm 'guessing' the current scale is about 20% higher than the highest value.
>> But it would be much nicer to get the values from the autoscaler ...
>> Any way?
>>
>>
>> Thanks
>>
>> - Karl
>>
> 
> This won't do exactly what you want but has helped us with scaling
> issues.  Maybe it will help someone else.
> 
> We can use the VDEF and PRINTS functions to get a numeric readout of the
> peaks in our timeseries using the rrd_graph function.
> 
> We define DEFS as usual,
> 
>  DEF:BytesIn_28=ifHCInOctets.28.rrd:BytesIn:AVERAGE
>  DEF:BytesIn_6=ifHCInOctets.6.rrd:BytesIn:AVERAGE
>  DEF:BytesIn_31=ifHCInOctets.31.rrd:BytesIn:AVERAGE
>  ...
> 
> Then some VDEFS that calculate the maximums,
> 
>  VDEF:BytesIn_28_max=BytesIn_28,MAXIMUM
>  VDEF:BytesIn_6_max=BytesIn_6,MAXIMUM
>  VDEF:BytesIn_31_max=BytesIn_31,MAXIMUM
>  ...
> 
> and use PRINT to get the results,
> 
>  PRINT:BytesIn_28_max:curve oid ifHCInOctets iid 28 %.3lf
>  PRINT:BytesIn_6_max:curve oid ifHCInOctets iid 6 %.3lf
>  PRINT:BytesIn_31_max:curve oid ifHCInOctets iid 31 %.3lf
>  ...
> 
> If we call rrd_graph (perl bindings) like this,
> 
>  @max = RRDs::graph('/dev/null', ..., @DEFS, @VDEFS, @PRINTS);
> 
> The result @max contains the peak values for all the timeseries,
> 
>  curve oid ifHCInOctets iid 28 2195.571
>  curve oid ifHCInOctets iid 6 92099111.699
>  curve oid ifHCInOctets iid 31 975549.175
>  ...
> 
> We actually run against graphs with 1000's of DEFS.  We can run
> processing against the PRINT outputs and identify peaks efficiently.
> 
> 
> Scott B

Thanks Scott,

I'm doing basically the same within one graph call rather than having
to do a second one to find out the scale like in your example ...
The problem is I'm guessing the scale to be 20% larger than the peak
value, which isn't right. Sometimes the peak value is eg. 45 but the
autoscaler has choosen to use a scale of 100, so it would be safe to
display another reference value at eg. 75 without extending the scale.

It would be helpful to know the algorithm of the autoscaler to adjust
the peak values accordingly ...

I'll phrase another post for this question ...

- Karl




More information about the rrd-users mailing list