Drawing Load Average and CPU usage on ONE graph?
Moderators: Developers, Moderators
Drawing Load Average and CPU usage on ONE graph?
Hi.
I'm looking for a template for drawing the CPU Usage (as graphed by "ucd/net - CPU Usage") and also the 1 Minute Load Average (as on "Unix - Load Average") on ONE graph.
Does anyone know if there's a template for this around?
The problem I see with creating this is, that those "two" values aren't (necessarily) linked together - ie. the load can range between 0.01 and eg. 20, but it might also be just at about eg. 0.5 - hence the "Use --alt-autoscale-max (accepting a lower limit)" setting.
But the CPU Usage is always between 0% and 100%.
So we'd need to have two seperate Y-Axis. This isn't supported by Cacti right now IIRC.
Q: Does someone know of a good template which would draw those values on one graph?
Thanks,
Alexander
I'm looking for a template for drawing the CPU Usage (as graphed by "ucd/net - CPU Usage") and also the 1 Minute Load Average (as on "Unix - Load Average") on ONE graph.
Does anyone know if there's a template for this around?
The problem I see with creating this is, that those "two" values aren't (necessarily) linked together - ie. the load can range between 0.01 and eg. 20, but it might also be just at about eg. 0.5 - hence the "Use --alt-autoscale-max (accepting a lower limit)" setting.
But the CPU Usage is always between 0% and 100%.
So we'd need to have two seperate Y-Axis. This isn't supported by Cacti right now IIRC.
Q: Does someone know of a good template which would draw those values on one graph?
Thanks,
Alexander
Are you sure, you don´t "fool" your operators doing this kind of "tricks"?
Also System Load is a very unspecific value. Different Systems have different max. Load-Values. Depending on many system parameters like OS-type, Hardwarearchitecture, Ram, CPUs...
If you known the max. Load-Value of your System you can use a CDEF to calculate the Load-Percentage from Current-Load. So you only need 1 Scale the 0-100%.
(Also I would not recommend putting different values in one graph.)
Also System Load is a very unspecific value. Different Systems have different max. Load-Values. Depending on many system parameters like OS-type, Hardwarearchitecture, Ram, CPUs...
If you known the max. Load-Value of your System you can use a CDEF to calculate the Load-Percentage from Current-Load. So you only need 1 Scale the 0-100%.
(Also I would not recommend putting different values in one graph.)
Hm, there is no maximum load value (in theory). And if you draw both of these values on one graph, you'll see, that quite often the CPU Usage idle goes down (or Kernel and/or User goes up) if the Load increases. But it doesn't have to, of course.
It's also quite often the case, that CPU Usage increases, if network traffic increases. So it would be very nice to be able to draw CPU Usage against Network Traffic.
To see the relationship (or non-relationship...) of both figures, it indeed does make sense to have both on one graph.
Back to the Q: I do not know the max load. I cannot know, as there's no such value *G* How do I come around the requirement for having two scales? As I see it, I need two, so that usage is drawn between 0 and 100 and load in the ranges it is shown on the graph.
I suppose the way to go would be to define a new CDEF which scales the current data source between it's current min and max values to 0..100. Does anyone have a RPN or CDEF at hand, which does just that?
PS: I'm thinking about Unix here. Dunno how it is in the Windows world.
It's also quite often the case, that CPU Usage increases, if network traffic increases. So it would be very nice to be able to draw CPU Usage against Network Traffic.
To see the relationship (or non-relationship...) of both figures, it indeed does make sense to have both on one graph.
Back to the Q: I do not know the max load. I cannot know, as there's no such value *G* How do I come around the requirement for having two scales? As I see it, I need two, so that usage is drawn between 0 and 100 and load in the ranges it is shown on the graph.
I suppose the way to go would be to define a new CDEF which scales the current data source between it's current min and max values to 0..100. Does anyone have a RPN or CDEF at hand, which does just that?
PS: I'm thinking about Unix here. Dunno how it is in the Windows world.
I'm no good in RPN, but wouldn't the following be correct?
Is there a function which returns the highest value from this data source on the graph? The RRDTool MAX() function doesn't do that:
Code: Select all
CURRENT_DS_SOURCE * ( 100 / ( MAX(CURRENT_DS_SOURCE) ) )
Comparing values
MIN, MAX
Pops two elements from the stack and returns the smaller or larger, respectively. Note that infinite is larger than anything else. If one of the input numbers is unknown then the result of the operation will be unknown too.
Using the highest value (max) you have seen, would be a workaround I would, too, have choosen.
But there is also a way you can get the max. load. Run an mutlithread io-benchmark utility against your machine. (Sniffering a crowded 1GBit/s should do... ) Htere are some unix linux benchmarks out there.... some people would call Oracle 10g a good bechmark utility...
Can´t tell anything about RPN... I hate it. But there are Commandline-Calculators you can use to debug RPN for Linux. I did so.
But there is also a way you can get the max. load. Run an mutlithread io-benchmark utility against your machine. (Sniffering a crowded 1GBit/s should do... ) Htere are some unix linux benchmarks out there.... some people would call Oracle 10g a good bechmark utility...
Can´t tell anything about RPN... I hate it. But there are Commandline-Calculators you can use to debug RPN for Linux. I did so.
But how would I do that? max() doesn't return the highest value - at least not in a way I need it. If I understood it right, "max(47, 11)" would return 47 - it compares two numbers and returns the biggest.Deviloper wrote:Using the highest value (max) you have seen, would be a workaround I would, too, have choosen.
But I'd need a "function" which returns the higgest number seen. At first, I thought CURRENT_DS_MAXIMUM_VALUE would be it - but no, that returns the defined maximum for the data source. Also CURRENT_GRAPH_MAXIMUM_VALUE isn't the right special data source - it would return 100, because I want the graph max. value to be 100.
Having 2 Y-Axis would be good
Thanks,
Alexander
Wouldn't help much. This might tell me something like a "max" value. But in general, the machine isn't run at the max value. It seems to be at about 3-4 max. But that's not the max it can support. And there are sometimes spikes. That's why it would be kinda required to get the maximum value which has been (or: "would be") drawn on the graph.Deviloper wrote:But there is also a way you can get the max. load. Run an mutlithread io-benchmark utility against your machine.
Alexander
in your example max returns 47, because it is the largest value.
If you dived it by 100 you get one percent. While 47 would be 100 %. Therefor you can see 47 as 100%... if a new max value appears this will become your new base for 100%.
You translate the current value as "percents of 47" or percents of Max.
I would write that:
CURRENT_DS_SOURCE / ( 100 / ( MAX(CURRENT_DS_SOURCE) ) )
(Also math never was my domain.)
Try out the commandline rpn calc tool.
If you dived it by 100 you get one percent. While 47 would be 100 %. Therefor you can see 47 as 100%... if a new max value appears this will become your new base for 100%.
You translate the current value as "percents of 47" or percents of Max.
I would write that:
CURRENT_DS_SOURCE / ( 100 / ( MAX(CURRENT_DS_SOURCE) ) )
(Also math never was my domain.)
Try out the commandline rpn calc tool.
Yes, the question, however, is how to get 47 in the first place.Deviloper wrote:in your example max returns 47, because it is the largest value.
Also, MAX(CURRENT_DS_SOURCE) wouldn't work. From the rrd rpn manual:
Ie. MAX() would need TWO arguments. Kinda like: MAX(A,B). This would translate to:Comparing values
MIN, MAX
Pops two elements from the stack and returns the smaller or larger, respectively. Note that infinite is larger than anything else. If one of the input numbers is unknown then the result of the operation will be unknown too.
Code: Select all
a < b ? a : b
or:
if a < b; then
return a;
else
return b;
end
Alexander
Who is online
Users browsing this forum: No registered users and 3 guests