天天看点

cacti批量添加脚本

网上也有许多相关文章,之前公司重搭cacti的时候学习过一阵。一直忘了总结。这里先把脚本放上。

使用脚本其实和手工添加的流程是一样的,添加device,然后画图。(感谢<b>futurelinux</b>的关于添加树状图的解答~)

首先是添加device,ip列表文件:hosts格式如下10.10.10.10=monitor(等号前面ip,后面主机名)

#!/bin/sh

say() {

/usr/local/bin/php -q /xxxxx/cacti/cli/add_device.php --description="$2" --ip="$1" --template=3 --community="public"

}

for i in `cat hosts`

do

v1=`echo -n $i |awk -F = '{printf $1}'`

v2=`echo -n $i |awk -F = '{printf $2}'`

say $v1 $v2

echo $v1

echo $v2

done

添加device后cacti会给那些机器分配id,通常批量添加时,那些主机的id是连续的。用seq命令生成序列写到idlist里。

现在根据那些id画图。

首先画出基础的图,所以有参数‘--graph-type=cg’。由于主机都是centos机器,这里使用4,11,13这三个画图模板(不同的cacti版本的里面的画图模板也许会不一样,所以写脚本之前最好先跑一下add_graphs.php看看。应该使用什么模板)。

for t in `cat idlist`

for i in `echo -n "4 11 13"`

#echo $t $i

/usr/local/bin/php -q /xxxxx/cacti/cli/add_graphs.php --host-id=$t --graph-type=cg --graph-template-id=$i

# –snmp-query-id=1 –snmp-query-type-id=13 –snmp-field=ifOperStatus –snmp-value=Up

#add_graphs.php --graph-type=[cg|ds] --graph-template-id=[ID] --host-id=[ID]

之后画一些定制的图,如网卡,磁盘。这里先用add_graphs.php的‘--list-snmp-values’这个参数查出那个主机具体有哪些设备,然后逐一添加。

画这些定制图时,都要有这一个参数‘--graph-type=ds’ ,网卡的画图模板id是2,分区的id是26(不同的cacti版本的里面的画图模板也许会不一样,所以写脚本之前最好先跑一下add_graphs.php看看。应该使用什么模板~~真啰嗦,又说了一遍~)

脚本里的添加网卡语句我注释了,需要的话可以打开。

for ID in `cat idlist`

#add_interface

#for j in  `/usr/local/bin/php /xxxxx/cacti/cli/add_graphs.php --host-id=$ID --graph-type=ds  --graph-template-id=2 --snmp-query-id=1 --snmp-query-type-id=16 --snmp-field=ifDescr --list-snmp-values|grep -v ifDescr|grep -v lo|grep -v sit0`

#do

#/usr/local/bin/php /xxxxx/cacti/cli/add_graphs.php --host-id=$ID --graph-type=ds  --graph-template-id=2 --snmp-query-id=1 --snmp-query-type-id=16 --snmp-field=ifDescr --snmp-value=$j

#done

#add_partition

for i in  `/usr/local/bin/php /xxxxx/cacti/cli/add_graphs.php --host-id=$ID --graph-type=ds  --graph-template-id=26 --snmp-query-id=8 --snmp-query-type-id=18 --snmp-field=hrStorageDescr --list-snmp-values|grep -v hrStorage|grep -v Memory|grep -v Swap|grep -v Space|grep -v Buffers|grep -v Real`

/usr/local/bin/php /xxxxx/cacti/cli/add_graphs.php --host-id=$ID --graph-type=ds  --graph-template-id=26 --snmp-query-id=8 --snmp-query-type-id=18 --snmp-field=hrStorageDescr --snmp-value=$i

########################################

以下是<b>futurelinux</b>补充的用脚本建立tree目录树的方法。

建立tree目录树 用add_tree.php文件 php add_tree.php 查询 --list-hosts查询主机节点 --list-trees查询树形根结构id和名字 --list-nodes --tree-id= 查询节点

#!/bin/bash

yphp=/usr/bin/php

device=/var/www/html/cacti/cli/add_tree.php 

ay=(kandian KSS Smallfile video_cdn weibo_cdn)

numbers=`echo ${#ay[*]}`

for ((i=0;i&lt;$numbers;i++))

    allname=`echo "${ay[$i]}"`

    $yphp $device --type=tree --name=$allname   --sort-method=manual ##--type=[tree|node] "这个你想建立的是根tree还是node" --name="就是想取的名字了" --sort-method=manual就是方法了。

首先建立kandian KSS Smallfile video_cdn weibo_cdn 5个tree根

拿一个kandian 根tree出来

num1=`$yphp $device --list-trees|grep -w "kandian"|awk '{print $1}'` ##找出kandian的node号码

nodearray1=(电信 网通 Edu) ###kandian下面需要加的3个 电信 网通 Edu 二级目录枝

numbers1=`echo ${#nodearray1[*]}`

for ((m=0;m&lt;$numbers1;m++))

    allname1=`echo "${nodearray1[$m]}"`

    $yphp $device --type=node --node-type=header --tree-id=$num1 --name=$allname1

建好了之后,这就是查询kandian下 电信 网通 Edu 3个节点node号

kandian_node1=`$yphp $device --list-nodes --tree-id=$num1|grep -w '电信'|awk '{print $2}'`

kandian_node2=`echo $(($kandian_node1+1))`

kandian_node3=`echo $(($kandian_node2+1))`

这个为kandian 电信 下 需要加入的城市三级目录枝

kandian_ctc=(东莞 温州 南京 武汉 西安 上海 成都)

kandain_num=`echo ${#kandian_ctc[*]}` ##数量

然后添加节点

for ((kd=0;kd&lt;$kandain_num;kd++))

    kandian_node_name=`echo "${kandian_ctc[$kd]}"`

    $yphp $device --type=node --node-type=header --tree-id=$num1 --parent-node=$kandian_node1   --name=$kandian_node_name ####--tree-id=“就是看点的kandian的tree根node号码 ”--parent-node="就为 电信 的node号 它的父(上一级)node号,叮在这个 电信 node下"

host_id=`$yphp $device --list-hosts|grep -w '192.168.122.16'|awk '{print $1}'` ##为cacti上已经add的主机node号

host_id_1=`$yphp $device --list-hosts|grep -w '192.168.122.153'|awk '{print $1}'`

kd_xf_node=(东莞 温州 南京 武汉 西安 上海 成都)

kd_xf_num=`echo ${#kd_xf_node[*]}`

for ((kd=0;kd&lt;$kd_xf_num;kd++))

    kd_xf_id=`echo "${kd_xf_node[$kd]}"`

    kd_node=`$yphp $device --list-nodes --tree-id=$num1|grep -w $kd_xf_id|awk '{print $2}'` ##这个为查询 东莞 温州 南京 武汉 西安 上海 成都 这些城市的node号

    for kdid in `seq "$host_id" "$host_id_1"`

    do

    $yphp $device --type=node --node-type=host --tree-id=$num1 --parent-node=$kd_node --host-id=$kdid #####这个为在这些节点上添加host主机 这里--node-type="就为host了(加主机了)而不是header了" --host-id="这里就需要你的主机id号"

    done

那么一个kandian的tree结构就出来了,如果还想加4级目录也可以,也按这个方法。给不同的城市不同的主机ip,给予不同的 --host-id=“这个为id号”。

#####################################

cacti的那几个php脚本确实强大,许多参数都还没有用过呢。有时间一定要好好学学。

继续阅读