We use the Pandora FMS as a monitoring system. It is pretty easy to get going and provides a low-cost network monitoring system comparable to Nagios.
The central server can poll clients and/or the clients can send data from agents to the central server. There are agents for Window and Unix. Out of the box the agent has a few settings like CPU and free memory but more machine specific values you need to roll your own scripts. This is actually really easy with a typical shell-script interface plus using the likes of awk to trim command line results to what you can graph.
Here are some examples that I have created and use,
FreeSWITCH
# Count of registrations
module_begin
module_name FSRegnsCount
module_type generic_data
module_exec /usr/local/freeswitch/bin/fs_cli -x "show registrations count" | awk '{if (match($0,"total")) { printf("%d",$1);}}'
module_description FreeSWITCH registrations
module_end
# Count of calls
module_begin
module_name FSCallsCount
module_type generic_data
module_exec /usr/local/freeswitch/bin/fs_cli -x "show calls count" | awk '{if (match($0,"total")) { printf("%d",$1);}}'
module_description FreeSWITCH calls
module_end
# Count of Channels
module_begin
module_name FSChansCount
module_type generic_data
module_exec /usr/local/freeswitch/bin/fs_cli -x "show channels count" | awk '{if (match($0,"total")) { printf("%d",$1);}}'
module_description FreeSWITCH channels
module_end
# Count of gateways:
module_begin
module_name FSGatesCount
module_type generic_data
module_exec /usr/local/freeswitch/bin/fs_cli -x "sofia status gateways" | awk '{if (match($0,"gateways:")) { printf("%d",$1);}}'
module_description FreeSWITCH gateways
module_end
Hard Disk Temperature
You need to install the hddtemp program. Adjust which drive/device you are after and if you want it in Celsius or Fahrenheit.
module_begin module_name hddtemp module_type generic_data module_exec /usr/sbin/hddtemp -n --unit=C /dev/sda module_description Hard Disk temperature (Deg C) module_end
CPU Temperature
This needs you to add the sensors program. The actual output from this is different for each CPU and chipset sensor so you need to tweak the awk command
module_begin
module_name CPUTemp
module_type generic_data
module_exec sensors | awk '{if (match($0, "CPU Temperature")){printf("%d",$3);} }'
module_description CPU temperature (Deg C)
module_end