[hobbit] vmstat/cpu graphs for OS X

Henrik Stoerner henrik at hswn.dk
Wed Aug 23 22:56:31 CEST 2006


On Wed, Aug 23, 2006 at 11:27:42AM -0500, Scheblein, Adam wrote:
> 
> I am currently working on implementing a script that will give output the
> same as vmstat but for mac.  Does Hobbit create graphs based on what the
> client is??

The Hobbit server will only process the types of data it knows about. 
And for OSX it doesn't know about any vmstat data since I've never seen 
any vmstat data from that type of system.

So first of all, it requires modifying the hobbitd/rrd/do_vmstat.c file
to recognize your vmstat data format and create/update an RRD file.
Second, if you're sending the data as part of the client message then
the hobbitd/client/darwin.c file must have a line added to actually
send the vmstat data to the RRD module.

> I ask because currently I have the following output coming from the mac:
> 
> [vmstat]
> procs -----------memory---------- ---swap-- -----io---- --system--  ----cpu----
> r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs    us sy id
> 2  0      0      0      0      0    0    0     0     0    0     0    3 47 49
> 2  0      0      0      0      0    0    0     0     0    0     0    8 42 49
> 
> (I only have r, us, sy and id implemented at the moment)

Still, it's a start. Are the other values impossible to get, or haven't
you gotten around to implementing them yet?

To get the graph, add these two items to the hobbitd/rrd/do_vmstat.c file:
First a table describing the vmstat columns - just put it somewhere with
the other tables:

static vmstat_layout_t vmstat_darwin_layout[] = {
        { 0, "cpu_r" },
        { 1, "cpu_b" },
        { -1, "cpu_w" },
        { 2, "mem_swpd" },
        { 3, "mem_free" },
        { 4, "mem_buff" },
        { 5, "mem_cach" },
        { 6, "mem_si" },
        { 7, "mem_so" },
        { 8, "dsk_bi" },
        { 9, "dsk_bo" },
        { 10, "cpu_int" },
        { 11, "cpu_csw" },
        { 12, "cpu_usr" },
        { 13, "cpu_sys" },
        { 14, "cpu_idl" },
        { -1, "cpu_wait" },
        { -1, NULL }
};

Next, in the same file find this bit:
          case OS_DARWIN:
                errprintf("Cannot handle Darwin vmstat from host '%s' \n", hostname);
                return -1;
and replace it with
          case OS_DARWIN:
		layout = vmstat_darwin_layout; break;

Finally, in the hobbitd/client/darwin.c file add this to invoke the
standard vmstat handler from the client data: First a line declaring
a variable for the vmstat data, just after the other declarations:

	char *portsstr;
	char *vmstatstr;  <-- add this line

A bit further down grab the vmstat data:
	portsstr = getdata("ports");
	vmstatstr = getdata("vmstat");	<-- add this line

And finally pass this data to the vmstat module: After the line
	unix_ifstat_report(hostname, clienttype, os, hinfo, fromline, timestr, ifstatstr);
add this line:
	unix_vmstat_report(hostname, clienttype, os, hinfo, fromline, timestr, vmstatstr);


Regards,
Henrik




More information about the Xymon mailing list