Munin is lacking many features that cacti has but one thing its really good at is creating custom graphs.Basically all you need is a script written in any language that when run will print out the values and when given the config argument will print the config for the graph.In the example below I am graphing the number of unicorn processes running on a box and the number of that are busy.The values:
./unicorn_inuse cap.value 21inuse.value 11
You can see above I am getting 2 values to graph, cap.value is the total number of unicorn processes running and inuse.value is the number that are busy.
The config:
./unicorn_inuse configgraph_title Total Unicorns in useinuse.type GAUGEinuse.label Unicorns in useinuse.draw LINE1graph_category Unicorngraph_args --base 1000 -l 0graph_scale nocap.label Total Unicornscap.draw LINE2cap.type GAUGE
Not too many details in the config but graph_category is how to put graphs in a specific bucket in the munin UI.
The graph:The code:
#!/usr/bin/env ruby def get_total() cmd = 'ps aux| grep capuser | grep unicorn | wc -l' output = `#{cmd}` num = output.match(/d+/) return numenddef get_chillin() cmd = "ps aux| grep capuser | grep unicorn | grep 'chillin'| wc -l" output = `#{cmd}` num = output.match(/d+/) return numenddef config() puts 'graph_title Total Unicorns in use' puts 'inuse.type GAUGE' puts 'inuse.label Unicorns in use' puts 'inuse.draw LINE1' puts 'graph_category Unicorn' puts 'graph_args --base 1000 -l 0' puts 'graph_scale no' puts 'cap.label Total Unicorns' puts 'cap.draw LINE2' puts 'cap.type GAUGE'end argu = ARGV[0] if argu == 'config' config() else total = get_total() chillin = get_chillin() inuse = total[0].to_i - chillin[0].to_i puts "cap.value " + total[0].to_s puts "inuse.value " + inuse.to_s end