利用cacti提供的api接口可以进行添加查询监控


这些api脚本放在cacti的cli目录下面:


/web/cacti02/cli

编写脚本循环调用下面这些api脚本,就可以达到批量添加的效果,省去大量的人力和时间

add_data_query.php  add_device.php  add_graphs.php 
add_graph_template.php  add_perms.php  add_tree.php

下面我们来实践添加一次cacti监控的过程:


1.添加设备

/usr/local/php/bin/php /usr/local/web/cacti02/cli/add_device.php --description="设备名称" --ip="设备ip" --avail=snmp --version=2 --community="snmp的团体名" --template="模板id"

如果你不知道模板id的话可以利用这个脚本的查询功能得到:

/usr/local/php/bin/php add_device.php  --list-host-templates

直接运行该脚本可以看到更多参数,我就不一一解释了:

/usr/local/php/bin/php add_device.php        
Add Device Script 1.0, Copyright 2004-2012 - The Cacti Group
A simple command line utility to add a device in Cacti
usage: add_device.php --description=[description] --ip=[IP] --template=[ID] [--notes="[]"] [--disable]
    [--avail=[ping]] --ping_method=[icmp] --ping_port=[N/A, 1-65534] --ping_retries=[2]
    [--version=[1|2|3]] [--community=] [--port=161] [--timeout=500]
    [--username= --password=] [--authproto=] [--privpass= --privproto=] [--context=]
    [--quiet]
Required:
    --description  the name that will be displayed by Cacti in the graphs
    --ip           self explanatory (can also be a FQDN)
Optional:
    --template     0, is a number (read below to get a list of templates)
    --notes        '', General information about this host.  Must be enclosed using double quotes.
    --disable      0, 1 to add this host but to disable checks and 0 to enable it
    --avail        pingsnmp, [ping][none, snmp, pingsnmp]
    --ping_method  tcp, icmp|tcp|udp
    --ping_port    '', 1-65534
    --ping_retries 2, the number of time to attempt to communicate with a host
    --version      1, 1|2|3, snmp version
    --community    '', snmp community string for snmpv1 and snmpv2.  Leave blank for no community
    --port         161
    --timeout      500
    --username     '', snmp username for snmpv3
    --password     '', snmp password for snmpv3
    --authproto    '', snmp authentication protocol for snmpv3
    --privpass     '', snmp privacy passphrase for snmpv3
    --privproto    '', snmp privacy protocol for snmpv3
    --context      '', snmp context for snmpv3
    --max_oids     10, 1-60, the number of OID's that can be obtained in a single SNMP Get request
List Options:
    --list-host-templates
    --list-communities
    --quiet - batch mode value return

添加好设备后我们就可以为设备添加图像了,首先我们通过api获取到刚刚添加的设备的id号:

host_ids=`/usr/local/php/bin/php add_graphs.php --list-hosts | grep "设备名称" | awk -F " " '{print $1}'`-直接运行add_graphs.php -l

直接运行add_graphs.php --list-hosts会输出所有的设备信息,通过grep筛选出刚刚添加的设备名称,再通过awk截取id列,这些是shell的基础我就不多做解释了

有了设备的id号我们就可以为该设备添加图像:

/usr/local/php/bin/php /usr/local/web/cacti02/cli/add_graphs.php --host-id="设备id" --graph-type=cg --graph-template-id="图像模板id"

图像的模板id可以通过--list-graph-templates查到,和设备的模板id查询方法类似

最后就到树的构建了,首先我们添加最外层的树,如果已经有的话,可以通过add_tree.php --list-trees查到树的id,如果没有则:

/usr/local/php/bin/php add_tree.php  --type=tree  --name="树名"


然后我们添加树下的节点:

/usr/local/php/bin/php add_tree.php  --type=node  --tree-id="树的id" --node-type=header --name="节点的名称"

如果我们不需要添加节点,而是直接就在树下添加主机,那样把上面语句的--node-type=header 改成--node-type=host就可以了

如果是直接在树下添加图像,那样把--noed-type=header改成--node-type=graph

添加好节点后我们可以选择在该节点下添加主机或图像:

主机:

/usr/local/php/bin/php add_tree.php --graph-id="图像的id" --type=node --node-type=host --tree-id="树的id" --parent-node="节点的id"

图像的id可以通过如下语句查出:

/usr/local/php/bin/php add_tree.php --list-graphs --host-id="设备id" |grep "该树的名称" |awk -F " " '{print $1}'

节点的id可以通过如下语句查出:

/usr/local/php/bin/php /usr/local/web/cacti02/cli/add_tree.php --list-nodes --tree-id="树的id" |grep "N/\A.*节点的名称" |awk -F " " '{print $2}'

如果是添加图像的话把--node-type=host改成--node-type=graph就可以了


通过循环批量执行如上步骤,就能批量添加cacti的监控,有兴趣的可以尝试下,下面贴上一个别人写的比较简单的添加脚本希望能够加深你们的理解:



#!/bin/bash
#by 崔元荣
#QQ:295749093
#cacti批量加监控
#读取IP列表
host_ips=`cat ips.txt`
for host_ip in $host_ips
do
        #添加cacti设备
        php add_device.php --description="$host_ip" --ip="$host_ip" --template=3 --version=2 --community="public"
        #读取设备ID
        host_ids=`php add_graphs.php --list-hosts | grep $host_ip | awk -F " " '{print $1}'`
        #创建模板图像
        php add_graphs.php --host-id="$host_ids" --graph-type=cg --graph-template-id=4
        php add_graphs.php --host-id="$host_ids" --graph-type=cg --graph-template-id=11
        php add_graphs.php --host-id="$host_ids" --graph-type=cg --graph-template-id=13
        #创建网卡数据图像
        php add_graphs.php --host-id="$host_ids" --graph-type=ds  --graph-template-id=2 --snmp-query-id=1 --snmp-query-type-id=16 --snmp-field=ifDescr --snmp-value="eth0"
        php add_graphs.php --host-id="$host_ids" --graph-type=ds  --graph-template-id=2 --snmp-query-id=1 --snmp-query-type-id=16 --snmp-field=ifDescr --snmp-value="eth1"
        #创建分区数据图像
        php add_graphs.php --host-id="$host_ids" --graph-type=ds  --graph-template-id=26 --snmp-query-id=8 --snmp-query-type-id=18 --snmp-field=hrStorageDescr --snmp-value="/"
        php add_graphs.php --host-id="$host_ids" --graph-type=ds  --graph-template-id=26 --snmp-query-id=8 --snmp-query-type-id=18 --snmp-field=hrStorageDescr --snmp-value="/data"
        php add_graphs.php --host-id="$host_ids" --graph-type=ds  --graph-template-id=26 --snmp-query-id=8 --snmp-query-type-id=18 --snmp-field=hrStorageDescr --snmp-value="/usr/local"
        php add_graphs.php --host-id="$host_ids" --graph-type=ds  --graph-template-id=26 --snmp-query-id=8 --snmp-query-type-id=18 --snmp-field=hrStorageDescr --snmp-value="Memory Buffers"
        php add_graphs.php --host-id="$host_ids" --graph-type=ds  --graph-template-id=26 --snmp-query-id=8 --snmp-query-type-id=18 --snmp-field=hrStorageDescr --snmp-value="Real Memory"
        php add_graphs.php --host-id="$host_ids" --graph-type=ds  --graph-template-id=26 --snmp-query-id=8 --snmp-query-type-id=18 --snmp-field=hrStorageDescr --snmp-value="Swap Space"
        #添加设备到相应的组
        php add_tree.php --host-id="$host_ids" --type=node --node-type=host --tree-id=2
done