I did some changes to the makefile I published last month. It would be too much to completely rewrite the blog post to adapt for the changes, so I am just publishing the update here, and you can do the diff yourself.
There is still a lot of factorization left to do, I am leaving it to when I'll have more time. If, in the meanwhile, you come up with a better version, please leave a comment here.
I still have problems with LVS metrics, in particular: "LVS traffic in" is not getting any data. If you can spot the mistake and tell me, that would be much appreciated.
Have fun! …
######################################################################## # # This makefile tries to help you to automate the following tasks: # # - add an SNMP host to cacti # - add a set of graphs to the host # - add the host to a tree # # Before using this makefile, please check that the following settings # are correct for your installation. # ######################################################################## PHP=/usr/bin/php CLI_DIR=/opt/cacti/cli # Default tree where we add hosts to DEFTREE_ID=1 # Default host template to use HOST_TID=9 # Host template to use for LVS LVS_HOST_TID=10 # In the following variables, you have: # *_GTID: Graph Template ID # *_QID: Query ID # *_QTID: Query template ID # Network interfaces IFACE_GTID=2 IFACE_QID=1 IFACE_QTID=13 IFACE_FIELD=ifOperStatus IFACE_VALUE=Up # Individual CPUs CPUS_GTID=27 CPUS_QID=9 CPUS_QTID=19 CPUS_FIELD=hrProcessorFrwID # Cumulative CPU info CPU_GTID=38 # Load average LA_GTID=11 # Memory MEM_GTID=39 # Processes PROC_GTID=37 # Used space US_GTID=26 US_QID=8 US_QTID=18 US_FIELD=hrStorageDescr # LVS - Connections, cumulative # This is just GUESSWORK! Maybe this will work LVSCONN_CG_GTID=35 # LVS - Service traffic in # This is just GUESSWORK! Maybe this will work LVSTRAF_CG_GTID=36 # LVS - Connections, per port # This is just GUESSWORK! Maybe this will work # The following parameters will be used to get the list of managed ports, # and to add a graph accordingly. These graphs will be of the ds type. LVSCONN_GTID=35 LVSCONN_QID=10 LVSCONN_QTID=23 LVSCONN_FIELD=srvPort # LVS - Service traffic in # This is just GUESSWORK! Maybe this will work LVSTRAF_GTID=36 LVSTRAF_QID=10 LVSTRAF_QTID=24 LVSTRAF_FIELD=srvPort # You shouldn't need to edit anything below this line ######################################################################## ADD_GRAPHS=$(PHP) $(CLI_DIR)/add_graphs.php ADD_TREE=$(PHP) $(CLI_DIR)/add_tree.php ADD_DEVICE=$(PHP) $(CLI_DIR)/add_device.php ADD_DATA_QUERY=$(PHP) $(CLI_DIR)/add_data_query.php LIST_HOSTS=$(ADD_GRAPHS) --list-hosts MATCH=$(or $(FQDN),$(NAME)) RESOLVE=$(if $(MATCH),$(shell $(LIST_HOSTS) | grep "$(MATCH)" | head -n 1 | awk '{ print $$1 }')) # The following will set ID to the value of RESOLVE, but only if ID was not # already defined ID ?= $(RESOLVE) .SILENT: nothing nothing: echo "Impossible is nothing [$(RESOLVE)]" echo "FQDN: $(FQDN)" echo "NAME: $(NAME)" echo "ID: $(ID)" # add_host_to_cacti will require FQDN and NAME to be defined, so if # this target is running, we are sure they are OK # These variables are then passed along to the sub-instances of make # automatically, hence there is no need to pass them along explicitly. # Having them set, and not having ID manually set, will assign ID the # id value of the newly added host. So, once again, no need to set it # explicitly on the command line. # I like this stuff :-D all: add_host_to_cacti make add_all_graphs make add_host_to_tree add_lvs_host: make add_host_to_cacti HOST_TID=$(LVS_HOST_TID) make lvs make add_host_to_tree interfaces: _idcheck $(ADD_GRAPHS) --host-id=$(ID) --graph-type=ds --graph-template-id=$(IFACE_GTID) --snmp-query-id=$(IFACE_QID) --snmp-query-type-id=$(IFACE_QTID) --snmp-field=$(IFACE_FIELD) --snmp-value=$(IFACE_VALUE) cpus: cpu_cumulative cpu_single cpu_cumulative: _idcheck $(ADD_GRAPHS) --host-id=$(ID) --graph-type=cg --graph-template-id=$(CPU_GTID) cpu_single: _idcheck $(ADD_GRAPHS) --list-snmp-values --host-id=$(ID) --snmp-query-id=$(CPUS_QID) --snmp-field="$(CPUS_FIELD)" | grep "^[0-9]" | while read CPUID ; do $(ADD_GRAPHS) --host-id=$(ID) --graph-type=ds --graph-template-id=$(CPUS_GTID) --snmp-query-id=$(CPUS_QID) --snmp-query-type-id=$(CPUS_QTID) --snmp-field="$(CPUS_FIELD)" --snmp-value=$$CPUID ; done loadaverage: _idcheck $(ADD_GRAPHS) --host-id=$(ID) --graph-type=cg --graph-template-id=$(LA_GTID) memory: _idcheck $(ADD_GRAPHS) --host-id=$(ID) --graph-type=cg --graph-template-id=$(MEM_GTID) processes: _idcheck $(ADD_GRAPHS) --host-id=$(ID) --graph-type=cg --graph-template-id=$(PROC_GTID) usedspace: _idcheck $(ADD_GRAPHS) --list-snmp-values --host-id=$(ID) --snmp-query-id=$(US_QID) --snmp-field="$(US_FIELD)" | grep -v "^Known" | while read DEVID ; do if [ -z "$$DEVID" ] ; then continue ; fi ; $(ADD_GRAPHS) --host-id=$(ID) --graph-type=ds --graph-template-id=$(US_GTID) --snmp-query-id=$(US_QID) --snmp-query-type-id=$(US_QTID) --snmp-field="$(US_FIELD)" --snmp-value="$$DEVID" ; done lvs: lvs_conn lvs_traffic lvs_conn: _idcheck $(ADD_GRAPHS) --list-snmp-values --host-id=$(ID) --snmp-query-id=$(LVSCONN_QID) --snmp-field="$(LVSCONN_FIELD)" | grep "^[0-9]" | while read PORTID ; do $(ADD_GRAPHS) --host-id=$(ID) --graph-type=ds --graph-template-id=$(LVSCONN_GTID) --snmp-query-id=$(LVSCONN_QID) --snmp-query-type-id=$(LVSCONN_QTID) --snmp-field="$(LVSCONN_FIELD)" --snmp-value=$$PORTID ; done lvs_traffic: _idcheck $(ADD_GRAPHS) --list-snmp-values --host-id=$(ID) --snmp-query-id=$(LVSTRAF_QID) --snmp-field="$(LVSTRAF_FIELD)" | grep "^[0-9]" | while read PORTID ; do $(ADD_GRAPHS) --host-id=$(ID) --graph-type=ds --graph-template-id=$(LVSTRAF_GTID) --snmp-query-id=$(LVSTRAF_QID) --snmp-query-type-id=$(LVSTRAF_QTID) --snmp-field="$(LVSTRAF_FIELD)" --snmp-value=$$PORTID ; done add_host_to_cacti: _namecheck _fqdncheck $(ADD_DEVICE) --description="$(NAME)" --ip="$(FQDN)" --template=$(HOST_TID) add_host_to_tree: _idcheck $(ADD_TREE) --type=node --node-type=host --tree-id=$(DEFTREE_ID) --host-id=$(ID) add_all_graphs: _idcheck interfaces cpus loadaverage memory processes usedspace fulldump: _idcheck dump_hosts dump_host_templates dump_graph_templates dump_queries_and_types dump_snmp_fields_per_query_type dump_fields_and_values dump_input_fields dump_hosts: @echo "# HOSTS" @$(LIST_HOSTS) dump_host_templates: @echo "# HOST TEMPLATES" @$(ADD_DEVICE) --list-host-templates dump_graph_templates: @echo "# GRAPH TEMPLATES" @$(ADD_GRAPHS) --list-graph-templates dump_queries_and_types: @echo "# QUERIES AND TYPES" @$(ADD_GRAPHS) --list-snmp-queries | grep "^[0-9]" | while read ID NAME ; do echo "= $$ID - $$NAME =" ; $(ADD_GRAPHS) --list-query-types --snmp-query-id=$$ID ; echo ; done dump_snmp_fields_per_query_type: _idcheck @echo "# SNMP FIELDS PER QUERY TYPE" @$(ADD_GRAPHS) --list-snmp-queries | grep "^[0-9]" | while read ID NAME ; do echo "= $$ID - $$NAME =" ; $(ADD_GRAPHS) --list-snmp-fields --host-id=$(ID) --snmp-query-id=$$ID ; echo ; done dump_fields_and_values: _idcheck @echo "# SNMP FIELDS AND VALUES" @$(ADD_GRAPHS) --list-snmp-queries | grep "^[0-9]" | while read ID NAME ; do echo "= $$ID - $$NAME =" ; $(ADD_GRAPHS) --list-snmp-fields --host-id=$(ID) --snmp-query-id=$$ID | grep -v "^Known" | while read FIELD ; do if [ -z "$$FIELD" ] ; then continue ; fi ; echo "== $$FIELD ==" ; $(ADD_GRAPHS) --list-snmp-values --host-id=$(ID) --snmp-query-id=$$ID --snmp-field="$$FIELD" ; echo ; done ; echo ; done dump_input_fields: @echo "# INPUT FIELDS" @$(ADD_GRAPHS) --list-graph-templates | grep "^[0-9]" | while read ID NAME ; do echo "= $$ID - $$NAME =" ; $(ADD_GRAPHS) --list-input-fields --graph-template-id=$$ID ; done _idcheck: @if [ -z "$(ID)" ] ; then echo "No ID specified" ; exit 1 ; fi @echo "Selected ID: $(ID)" _namecheck: @if [ -z "$(NAME)" ] ; then echo "Please specify a name/description for this device" ; exit 2 ; fi _fqdncheck: @if [ -z "$(NAME)" ] ; then echo "Please specify a fqdn or IP address for this device" ; exit 3 ; fi