網上也有許多相關文章,之前公司重搭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<$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<$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<$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<$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腳本确實強大,許多參數都還沒有用過呢。有時間一定要好好學學。