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