背景:
测试环境前段时间应用服务器的IP段更换后,cacti中一直用的旧IP都没人管过,同事反馈能不能批量把各网新IP段的机器添加上去。批量就涉及脚本作业,但对于catci之前没接触过的,只能现学现解决问题了。
自动化的基础是先手工确认一套可行的流程,所以我这次其实走了弯路。
网上一搜一大把关于批量添加机器的文章,但。。真的是一言难尽呐,唯一帮我的就是:哦,原来php文件可以直接执行的哟,跟其它语言写的脚本命令一样。
首先,我为了图方便,在cacti这台服务器的环境变量中增加了php指令,不用每次都要带全路径敲出来。
[root@test740_5 cli]# vim ~/.bashrc
export PATH=/data/src/bak/bin/:$PAT
[root@test740_5 cli]# source ~/.bashrc
其实,cacti监控clent机器,完全是靠snmp服务来通信的,所以首先需要查看添加的机器是否开启了snmp服务:
[root@test740_5 cli]# snmpwalk -v 2c -c public 192.168.xx.xx
如果结果出来这一堆数据,就证明要监控的客户机上的snmp服务已开启
第1步:添加device
进入cacti管理平台,用amdin管理员帐户 登录(你的密码别问我),点击console下的Devices,会显示所有的已创建的配置列表
点击右上角的“Add”,增加一个新的device
其实,这里的【Host Template】也是可以查到的,主机模板ID,我们选择的是[3]
用命令:php add_device.php --list-host-templates
[root@test740_5 cli]# php add_device.php --list-host-templates
Valid Host Templates: (id, name)
0 None
1 Generic SNMP-enabled Host
3 ucd/net SNMP Host
4 Karlnet Wireless Bridge
5 Cisco Router
6 Netware 4/5 Server
7 Windows 2000/XP Host
8 Local Linux Machine
第2步,创建图形模板Create Graphs for this Host
我们添加的就3项,
最后一步,添加Graph Trees
我添加的是虚拟机,到你想要添加的节点下点Add
我选择的是节点下的host,并不是header.选择相应信息
添加成功:退出重新登陆,查看节点tree下是否有刚添加的机器,右侧监控图表预计需要5-10分钟才会有数据出来
其实集合成命令也就是3步而已:
php add_device.php --description=$host_name --ip=$ip --template=3 --version=2 --community=public
php add_graphs.php --host-id="$host_id" --graph-type=cg --graph-template-id=$template-id
php add_graphs.php --host-id="$host_id" --graph-type=cg --graph-template-id=$template-id
php add_graphs.php --host-id="$host_id" --graph-type=cg --graph-template-id=$template-id
php add_tree.php --host-id="$host_id" --type=node --node-type=host --tree-id=2 --parent-node=192
$host_name:我的ips.txt中定义的名称,也就是tree上挂的名称
$ip:就是添加的device的ip了
--template=3 : 上面有讲到,就是添加机器的时候选择的模板3 ucd/net SNMP Host
--version=2 :SNMP Version的版本号,管理后台,一般会默认,
--community=public :snmp的共享方式,这里与客户机的snmp配置有关,如果客户机没有此配置,则cacti无法监控到此客户机,而且也会报错的,报错原因和解决方案后面有讲。
$host_id:添加机器成功后,会自动生成host_id,Success - new device-id: (183) 183就是host_id
[root@test740_5 cli]# php add_device.php --description="53.149" --ip="192.168.53.149" --avail=snmp --version=2 --community="public" --template="8"
Adding 53.149 (192.168.53.149) as "Local Linux Machine" using SNMP v2 with community "public"
Success - new device-id: (183)
添加机器如果报错:Timeout: No Response from 192.168.53.xx.xx.需要检查被监控机器192.168.53.xx.xx.上的snmp服务是否开启,我们使用命令检查:snmpwalk -v 2c -c public $ip
有开启服务,但仍然有问题,需要检查配置项:
$template-id:就是需要添加的监控图形模板
用命令查找一共有哪些图形模板: php add_graphs.php --list-graph-templates
[root@test740_5 cli]# php add_graphs.php --list-graph-templates
Known Graph Templates:(id, name)
2 Interface - Traffic (bits/sec)
3 ucd/net - Available Disk Space
4 ucd/net - CPU Usage
5 Karlnet - Wireless Levels
6 Karlnet - Wireless Transmissions
7 Unix - Ping Latency
8 Unix - Processes
9 Unix - Load Average
10 Unix - Logged in Users
12 Linux - Memory Usage
13 ucd/net - Memory Usage
14 Netware - File System Cache
15 Netware - CPU Utilization
16 Netware - File System Activity
17 Netware - Logged In Users
18 Cisco - CPU Usage
19 Netware - Volume Information
20 Netware - Directory Information
21 Unix - Available Disk Space
22 Interface - Errors/Discards
23 Interface - Unicast Packets
24 Interface - Non-Unicast Packets
25 Interface - Traffic (bytes/sec)
26 Host MIB - Available Disk Space
27 Host MIB - CPU Utilization
28 Host MIB - Logged in Users
29 Host MIB - Processes
30 Netware - Open Files
31 Interface - Traffic (bits/sec, 95th Percentile)
32 Interface - Traffic (bits/sec, Total Bandwidth)
33 Interface - Traffic (bytes/sec, Total Bandwidth)
34 SNMP - Generic OID Template
38 SNMP - Get TCP Connection Status
39 load Average
--type=node --node-type=host :添加是虚拟机节点,并不是主机
--tree-id=2:树型的id,可以查询,我添加的是虚拟机
--parent-node=192:其实我最开始并不知道带这个参数,总是试不成功,后来我看了帮助,发现它有这个--parent-node参数
又查了tree-id=2下的所有nodes:
成功!
写成批量脚本就是:我的--parent-node=192用的固定的,当然也可以在ips.txt第3列中加上这个--parent-node-id
#!/bin/bash
##cacti批量脚本位置
device=/opt/lampp/htdocs/cacti-0.8.7g/cli/add_device.php
graphs=/opt/lampp/htdocs/cacti-0.8.7g/cli/add_graphs.php
tree=/opt/lampp/htdocs/cacti-0.8.7g/cli/add_tree.php
##需要添加的host ip在ip.txt中
ips=/opt/lampp/htdocs/cacti-0.8.7g/cli/ips.txt
##开始循环遍历
cat $ips |while read host_ip;
do
echo $host_ip
host_name=$(echo $host_ip |awk '{print $1}')
echo "host_name==="$host_name
host_ip=$(echo $host_ip |awk '{print $2}')
echo "host_ip==="$host_ip
parent_node=$(echo $host_ip |awk '{print $3}')
echo "parent_node============="$parent_node
##这个是添加device 其中--tempate是应用的主机模板,可以通过add_device.php --list-host-templates来查看,后面的是snmp的
php $device --description=$host_name --ip=$host_ip --template=3 --version=2 --community=public
##添加host后获取Host的ip
host_id=`php $graphs --list-hosts | grep $host_ip | awk -F " " '{print $1}'`
##开始绘图,可以通过add_graphs.php --list-templates来查看有哪些图形模板,可以从手动添加监控绘图里面查看绘图的模板,然后来湖区其模板id
php $graphs --host-id="$host_id" --graph-type=cg --graph-template-id=4
php $graphs --host-id="$host_id" --graph-type=cg --graph-template-id=39
php $graphs --host-id="$host_id" --graph-type=cg --graph-template-id=13
##绘制流量图形,后面是接口,需要注意template id是否正确
#检查snmp服务是否启动:snmpwalk -v 2c -c public $host_ip
##加入到tree中,可以用过add_tree.php --list-tree查看已有tree
php $tree --host-id="$host_id" --type=node --node-type=host --tree-id=2 --parent-node=192
done
讲真,因为之前完全不懂这个,中间也遇到很多细节问题,问题大多与具体环境有关,我花了5小时搞定了所有原理性的东西,再加调试成功!