cacti
http://www.cacti.net/downloads/docs/html/index.html
Cacti脚本及模板论坛:http://forums.cacti.net/forum-12.html
一个完整的cacti脚本及模板列表:http://forums.cacti.net/about15067.html
http://blog.sina.com.cn/s/blog_4e424e2101000b6o.html
http://blog.chinaunix.net/uid-20209814-id-1727415.html
Cacti完全使用手册 ( 让你快速个性化使用Cacti )
http://linux.chinaunix.net/techdoc/net/2009/02/11/1061680.shtml
http://allanfan.blog.51cto.com/520839/401941/
在用cacti snmp监控topsec防火墙时,不能获取防火墙接口列表,最后将改为version 1即可
一,数据收集
1、collection methods简介
Data input methods是基本的数据收集工具,其通常是一个外部脚本、简单的SNMP查询或其它任意可以抓取非索引数据的组件。如果想实现对于cacti正在运行的本机进行监控,
使用脚本即可以实现;但如果对于远程主机进行监控,通常要基于SNMP来实现或利用SSH在远程主机运行脚本收集数据来进行。
与Data input methods相反,Data queries则是用于那些可被索引数据的,比如交换机接口流量相关的数据通常是基于索引关联至某特定接口的。因此,Data queries通常用于复杂数据。
2、创建Data input methods
这里说明如果基于SSH,通过在远程主机上运行脚本的方式进行数据收集
二,模板
1、数据模板(Data templates)
数据模板用于描述Cacti将数据存储于RRD文件中的方式,其存储通常使用rrdtool create命令进行。Cacti通常使用rrdtool create命令将数据存储于RRD文件中,这也是cacti存储数据的最基本方式。而数据以何种结构或形式保存于RRD文件中,则需要用数据模板(Data templates)来定义。需要注意的是,一旦使用某数据模板创建了RRD文件后再改用别的数据模板,原有的数据则仍保持为原来的模板定义的格式不变。
2、数据收集方法(Data input methods)
通常,收集某监控对象或资源相关指标数据的方法有多种方式,如基于SNMP协议或自定义脚本等;而数据收集方法则正是用于描述Cacti收集数据并将其存储至“数据源(通常是RRD文件)”文件中的不同方式。事实上,数据模板就是基于“数据收集方法”创建的。
3、数据查询(Data queries) 数据查询是用于收集索引数据的方式,如收集一个路由器设备上的所有接口的流量数据或某操作系统上运行的进程的相关信息等。它通常是一个XML文件,文件中定义了要收集数据的对象(如路由器接口)及针对此对象收集数据的方法。因此,数据查询是一种比“数据收集方法”更复杂的数据收集方式。
4、图像模板(Graph templates)
rrdtool graph命令基于RRD文件进行图像绘制,可以基于时间序列绘制曲线(line)图、面积(area)图等来展示数据走势。图像模板即是关联于某RRD文件上的事先定义好的rrd graph命令,它确定了图形的最终显示。这也意味着,修改图像模板,所有基于此模拟的图形都会随机而改变。
5、主机模板(Host templates) 主机模板即预定义的关联至某特定类型被监制设备的所有图像模板和数据查询,当需要监控此类设备时,直接将主机模板应用至此设备上即可快速实现对其进行监控。
三,监控网络或服务器
1、网络设备
大多数据网络设备都支持SNMP协议,而且支持众多的监控指标,如接口流量、CPU使用率等。因此,现实中此类设备的监控通常通过SNMP协议进行。安全起见,通常需要配置监控设备的SNMP功能的ACL以实现仅将监控信息输出给指定的合法监控端。
2、Linux主机
Linux系统可利用net-snmp等提供对SNMP协议的支持,并可实现通过SNMP输出本机的网络流量数据、系统资源利用率等。因此,对Linux主机的监控也可基于SNMP实现。此外,也可以通过在Linux主机上运行脚本并基于SSH将执行结果收集的数据传递给cacti端的数据收集脚本来实现对Linux主机的监控。
3、Windows主机
对Windows主机的监控可以通过SNMP协议或WMI来实现。WMI为应用程序提供了一个统一的接口,用于输出性能统计数据等,因此,使用WMI监控Windows是一种更便捷的方式。
可以到http://forums.cacti.net/viewtopic.php?f=12&t=30438下载cacti WMI,并基于svn checkout
http://dev.zenoss.org/svn/trunk/wmi/Samba/source获取wmic命令以实现在cacti端与cacti WMI通信。
四、cacti插件
Cacti插件体系能够让程序员在不改变Cacti核心代码的情况下为cacti开发附加功能,并且能够在不影响cacti运行的前提下为其添加安全补丁,而且也能够让终端用户为Cacti添加其需要但cacti核心缺失的功能。
1、插件特性
增强的用户接口
访问Cacti数据库
管理RRD文件
增进的缓存和增强的性能
附加的新功能,如统计报告、日志和阈值监控等
2、常见的插件
MAC Track插件 —— 用于记录设备接口相关的MAC、IP等信息
Network WeatherMap —— 用于在Cacti中创建网络设备间连接关系图,并能在图像中简单展现其性能指标,具体请参照:http://forums.cacti.net/viewtopic.php?t=24433;
Thold —— 阈值监控功能,并可实现“通知”功能;更进一步信息请参见:http://cactiusers.org/;
Cacti自0.8.8版本起已经将Plugin Architechture整合进了Cacti包,不再需要额外安装。
log cacti的日志
rra *.rrd文件
scripts 在path_cacti/scripts下面 pl,sh,php脚本
resource xml文件
command line scripts 在path_cacti/cli下面
[root@localhost cli]# php -q rebuild_poller_cache.php --help
[root@localhost cli]# php -q poller_reindex_hosts.php --help
chown -R apache:apache html/
mysql -u root
mysql> create database cacti;
#创建cacti数据库
mysql> insert into mysql.user(host,user,password) values ('localhost','cacti',password('cacti123'));
#建立用户cacti,密码cacti123
mysql> flush privileges;
#重载mysql授权表
mysql> grant all on cacti.* to cacti@'localhost' identified by 'cacti123';
#把数据库cacti授权于用户cacti
[root@cacti ~]# cd /var/www/html/
[root@cacti html]# mysql -ucacti -pcacti123 cacti<cacti.sql #将cacti数据库导入
vi /var/www/html/include/config.php 修改下面的值
/* make sure these values refect your actual database/host/user/password */
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cacti";
$database_password = "cacti123";
$database_port = "3306";
$database_ssl = false;
然后就可以浏览器访问下面的地址
----在httpd中添加cacti目录的配置
[root@node2 app]# cat /etc/httpd/conf.d/cacti.conf
Alias /cacti /var/www/html/
<Directory /var/www/html/>
DirectoryIndex index.php
Options -Indexes
AllowOverride all
order deny,allow
allow from all
AddType application/x-httpd-php .php
php_flag magic_quotes_gpc on
php_flag track_vars on
</Directory>
----如果不添加此配置,登陆页面会报:
/cacti/auth_changepassword.php was not found on this serve
cacti脚本数据采集
脚本对接方式有两种方法,一个是直接将脚本放到script目录里,然后添加相应的数据查询方法、创建数据模板图形模板即可。二个是在每台主机内放置脚本,然后自定义OID,然后创建模板,即可。
优缺点:
优点:支持非SNMP数据源,可以返回多个数据,灵活性强
缺点: 操作相对复杂,会写脚本
步骤:
1.编写脚本
示例:<path_cacti>/scripts/diskfree.sh
2.配置Data Input Methods
input type选择script/Command,
3.配置数据模版
4.配置图形模版
5.图形模版应用
编写脚本:
若你想使用脚本来采集数据,你需要建立数据输入方法(data input method),并保证在输入类型(Input Type field)中选择script/command.
你要定义一个或多个输出字段:
当只有一个输出字段时,输出格式:
<value_1>
Example script output using 1 field
67
多输出字段时:
Example script output using 3 fields
1min:0.40 5min:0.32 10min:0.01
示例:
1.编写脚本
vim my_ip_conn.sh
#!/bin/sh
host=$1
ip_conns=`ssh $host "netstat -an | grep tcp | grep EST | wc -l"`
echo $ip_conns
2.配置Data Input Methods
Console/Data Input Methods/data inputmethod:
填写:
name:zz_ip_conn
Input Type:script/command
Input String: #(指定脚本位置及data source,如ip)
sh <path_cacti>/scripts/my_ip_conn.sh <hostname>
#eg.python <path_cacti>/scripts/python_rrdb_test.py <host> <port>
填写完毕后: 单击Create,继续完成input fields,output的填写
Input Fields :(输入字段)
The Input Fields box is used to define any fields that require information from the user.
若你需要当前主机ip, 你可使用 'management_ip' here and Cacti will fill this field in with the current IP address of the selected host.
输出字段: (和脚本的输出字段名要完全相同)
In Cacti, I name the output fields '1min', '5min', and '10min', respectively. Based on these two things, the output of the script should look like the following:
Example 11-2. Example script output using 3 fields
1min:0.40 5min:0.32 10min:0.01
安装spine可以提升cacti性能和执行速度。在安装spine之前必须已经安装好了net-snmp;使用cmd.php来完成数据采集,发现 cmd.php采集存在很大的延迟,执行效率太低。比较了一下,从添加device好到设备up,spine只需要不到一分钟,而cmd等的时间较长。
Cacti默认轮询器cmd.php执行效率有点低,spine为C语言编写的组件,性能要好许多。
wget http://www.cacti.net/downloads/spine/cacti-spine-0.8.8b.tar.gz
mkdir /usr/local/spine
tar -zxvf cacti-spine-0.8.8b.tar.gz -C /usr/local/spine
cd /usr/local/spine/
yum install gcc
如果mysql是rpm装的,需要安装mysql-devel这个包
configure: error: Cannot find SNMP headers. Use --with-snmp= to specify non-default path.
yum install net-snmp-devel
./configure
make ;make install
cd /usr/local/spine/etc/
cp spine.conf.dist spine.conf
修改数据库名、数据库用户名和密码等信息
vim /usr/local/spine/etc/spine.conf
[root@localhost snmp_queries]# ln -s /usr/local/spine/etc/spine.conf /etc/spine.conf
[root@localhost snmp_queries]# /usr/local/spine/bin/spine
SPINE: Using spine config file [/etc/spine.conf]
SPINE: Version 0.8.8b starting
SPINE: Time: 0.3640 s, Threads: 1, Hosts: 3
[root@localhost snmp_queries]#
设置spine路径,Console——Settings——Paths
cacti设置spine路径
/usr/local/spine/bin/spine
更改cacti轮询器为spine,Console——Settings——Poller
cacti更改轮询器为spine
The minimal steps to create a graph from a script are simply:
Create a Data Input Method to tell Cacti how to call the script and what to expect from it.
Create a Data Source to tell cacti how and where the data will be stored.
Create a Graph to tell cacti how the data will be presented in graph form.
Add Graph to Graph View so you can view the graph.
View the Graph
<path_cacti>/scripts/diskfree.sh <partition>
创建平均值时,只需修改“Consolidation Function”和“Text Format”的内容即可。
创建最大值,也是修改“Consolidation Function”和“Text Format”的内容,不过多了一项“Insert Hard Return”,表示插入一个硬回车,这是为了和其它新创建的图形不要重叠显示在一起。
http://www.cnblogs.com/mchina/archive/2013/02/20/2883404.html
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 验证配文正确性
手工启动
/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
通过脚本启动
# /etc/init.d/nagios start
or
# service nagios start
rrd
3.如何绘制rrd环型数据库中的采集到的数据 rrdtool graph filename [option ...] [data definition ...] [data calculation ...] [variable definition ...] [graph element ...] [print element ...] filename 要绘制的图片名称 Time range时间范围 [-s|--start time] 启始时间[-e|--end time]结束时间 [-S|--step seconds]步长 Labels [-t|--title string]图片的标题 [-v|--vertical-label string] Y轴说明 Size [-w|--width pixels] 显示区的宽度[-h|--height pixels]显示区的高度 [-j|--only-graph] Limits [-u|--upper-limit value] Y轴正值高度[-l|--lower-limit value]Y轴负值高度 [-r|--rigid] Data and variables DEF:vname=rrdfile:ds-name:CF[:step=step][:start=time][:end=time] CDEF:vname=RPN expression VDEF:vname=RPN expression 主要用处是说明您要取出那个RRD档案的 DSN 到这个 graph 的参数中来 CDEF 通过运算得到一个虚拟的变量, 其运算式需写成后序 EX: a=1+3 写成 a=1,3 + LINE{1|2|3}:vname[#rrggbb[:legend]] LINE1:your_var#rgb顏色值:图例说明, 这个 "your_var" 需存在 DEF 或 CDEF 的宣告中, AREA:vname[#rrggbb[:legend]] AREA 画出样本数值至 0 之间的区块图 STACK:vname[#rrggbb[:legend]] STACK 叠在上一个值上的图形 请注意,如果使用 AREA/STACK 时需特別注意图盖图的问题,一定要先画大的值, 再画小的值,这才会有层次的效果,不然,最大的数据若最后画,会盖住前面的数据 COMMENT 说明文字, 如 COMMENT:"Last Updated" 将在图上产生该文字,可以用 \n 等换行符号 GPRINT GPRINT:vname:CF:format vname 即DEF 中的 your_var, 而 CF 看你要输出的文字是 AVERAGE/MAX/MIN/LAST 等数值,format 如同 printf 中的格式, EX: GPRINT:telnet:AVERAGE:"%10.0lf \n" 意即要输出这段时间中 (-s ~ -e 中,telnet的平均值,%10.0lf 则是为了好算位置)。 /usr/bin/rrdtool graph - \ --imgformat=PNG \ --start=1414996498 \ --end=1415082898 \ --title='192.168.2.2 - Traffic - eth0' \ --rigid \ --base=1000 \ --height=120 \ --width=500 \ --alt-autoscale-max \ --lower-limit='0' \ COMMENT:"From 2014/11/03 14\:34\:58 To 2014/11/04 14\:34\:58\c" \ COMMENT:" \n" \ --vertical-label='bytes per second' \ --slope-mode \ --font TITLE:10: \ --font AXIS:7: \ --font LEGEND:8: \ --font UNIT:7: \ DEF:a='/var/www/html/rra/db2_traffic_in_23.rrd':'traffic_in':AVERAGE \ DEF:b='/var/www/html/rra/db2_traffic_in_23.rrd':'traffic_out':AVERAGE \ AREA:a#00CF00FF:'Inbound' \ GPRINT:a:LAST:' Current\:%8.2lf %s' \ GPRINT:a:AVERAGE:'Average\:%8.2lf %s' \ GPRINT:a:MAX:'Maximum\:%8.2lf %s\n' \ LINE1:b#002A97FF:'Outbound' \ GPRINT:b:LAST:'Current\:%8.2lf %s' \ GPRINT:b:AVERAGE:'Average\:%8.2lf %s' \ GPRINT:b:MAX:'Maximum\:%8.2lf %s\n' 不过我觉得CACTI建图的基本原理是先创建数据模板,然后创建图形模板,而图形模板是调用数据模板而来,意思就是将数据转换到图形上来输出,这样便于我们直观查看到,然后我们可以把相应的图形模板加到主机模板里面去,这样我们就可以在创建设备监控的时候就可以选择相应的主机模板来创建图形喽,说了这么多不知道你明白了没有?这是CATCI精髓之所在,你一定要搞明白,其时我们导入的这些模板可以在数据模板里面找得到,你可以深入研究它究竟是怎样写公式来得到相关数据滴.