I recently had to add over 100 new devices into Cacti.
Believe it or not, you can do this in bulk using the command-line tools provided
with Cacti. I used to
add_device.php
,
add_tree.php
, and
add_graphs.php
scripts to get the job done.
First, I created a file (/tmp/slap
) with a list of host names, one per line.
From inside the cacti directory, I used the following command line to add the
hosts into cacti:
for i in `cat /tmp/slap`; do
php cli/add_device.php --description=${i} --ip=${i}.slaptijack.com --community=public --template=5;
done
Template 5 is the cisco router template that comes with cacti. (Note: I do not use "public" as the community string. That's just for the purpose of this example.)
The output from the command included device id numbers. In this example, we'll say that those device ids ranged from 91 to 107. I had already created my graph trees and all of these hosts were going into the same tree. I added the hosts to that tree with:
for i in {91..107} ; do
php cli/add_tree.php --type=node --node-type=host --tree-id=8 --parent-node=51 --host-id=${i};
done
The tree id can either be gotten from the cacti web interface, or
php cli/add_tree.php --list-trees
. The parent node is a header under my tree.
You can also get that node id with the web interface or using the CLI:
php cli/add_tree.php --list-nodes --tree-id=<tree_id>
.
The final piece of the puzzle is adding graphs to the devices. This part was the
most complicated by far, and I really recommend you read the
add_graphs.php
documentation to get an idea of the process. To give you an idea of what can be
done with this, here's what I did to add graphs to the devices. These graphs
include CPU, RAM, and interface traffic, errors, and packets. The interface graphs
query the device and only enable graphs for interfaces that are up.
for i in {91..107}; do
php cli/add_graphs.php --host-id=${i} --graph-type=cg --graph-template-id=18;
php cli/add_graphs.php --host-id=${i} --graph-type=cg --graph-template-id=35;
php cli/add_graphs.php --host-id=${i} --graph-type=ds --snmp-query-id=1 --snmp-query-type-id=2 --snmp-field=ifOperStatus --snmp-value=Up;
php cli/add_graphs.php --host-id=${i} --graph-type=ds --graph-template-id=22 --snmp-query-id=1 --snmp-query-type-id=2 --snmp-field=ifOperStatus --snmp-value=Up;
php cli/add_graphs.php --host-id=${i} --graph-type=ds --graph-template-id=23 --snmp-query-id=1 --snmp-query-type-id=4 --snmp-field=ifOperStatus --snmp-value=Up;
done