在阅读这篇文章之前,我们默认您已经具备了Linux基本操作技能,能够搭建LAMP环境,了解SNMP简单网络管理协议以及RRDTool绘图工具的使用。
环境:
CentOS 6.5 x86
Cacti-0.8.8b
一、概述
首先,我们对监控要有一定的了解,我们需要层层递进。什么是监控?Linux上常见的监控方式(命令或者脚本)?如何监控远程的主机(SNMP)?监控的结果如何展示(日志或者图表)?监控的结果如何绘图,以更直观的方式呈现给终端用户(RRDTool)? 等等
RRDTool是一个非常强大的绘图引擎。使用过它的人都知道,利用RRDTool来绘图是一件多么痛苦的事情。总的来说,RRDTool主要有以下的缺点:
- RRDTool只能存储数据和绘图,没有数据采集的功能,需要手工写脚本收集数据
- 命令行参数多且复杂,难以控制
- 无用户、图像管理功能
此刻,伟大的救世主诞生了: Cacti。
Cacti 在英文中的意思是仙人掌的意思,Cacti是一套基于PHP、MySQL、SNMP及RRDTool开发的网络流量监测图形分析工具。它通过snmpget来获取数据,使用 RRDtool绘画图形,它的界面非常漂亮,能让你根本无需明白rrdtool的参数能轻易的绘出漂亮的图形。而且你完全可以不需要了解RRDtool复杂的参数。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,让你添加自己的snmp_query和script!功能非常强大完善,界面友好。可以说,Cacti将rrdtool的所有“缺点”都补足了!
Cacti的功能:
- Cacti能够自动的为我们创建rrd数据库(rrd create)
- 周期性的执行能够取得数据的命令(数据采集),并将取回的数据保存至rrd文件中
- 利用rrdtool绘图并展示
- 支持插件
- 支持模板(导入和导出)
- 图形模板(绘图)
- 数据模板(采集数据,并保存)
- 主机模板(归类的图形模板+数据模板:linux,UNIX,WIN)
二、Cacti的工作流程
我们从以下这幅图,就能完整的看到cacti的工作流程:
下面我们来简单的说明一下Cacti的工作流程,
- 步骤一,snmp协议收集远程服务器的数据
- 步骤二,将snmp收集的数据内容保存到rrd数据库中
- 步骤三,若用户查看某台设备上的流量或其它状态信息
- 步骤四,在mysql数据库中查找该设备对应的rra数据库文件的名称
- 步骤五,通过rrdtool命令进行绘图即可
其实cacti获取数据的方式是多样化的,通过周期性的执行某个脚本,或者使用snmp,更或者是ssh,这些都是根据实际需要以及方便性来抉择。
三、cacti的安装
cacti的官方网站:http://www.cacti.net/download_cacti.php
cacti官方首页上这样描述:
The latest stable version is 0.8.8b, released 08/04/13.
Cacti requires MySQL, PHP, RRDTool, net-snmp, and a webserver that supports PHP such as Apache or IIS. Please see therequirements section of the manual for information on how to fulfill these requirements under certain operating systems. Please use the install guide for either Unix or Windows for information about installing Cacti.
我们知道,cacti实际上就是利用php开发的网页程序,所以它的运行依赖于LAMP环境。(LAMP环境有两种安装方法:编译安装和yum安装),选择编译安装的同学需要注意,在编译PHP的时候,一定要加上 --enable-sockets 选项,配置socket支持, 否则会报错。
由于源码编译LAMP要花费大量的时间,这里我就偷懒使用yum方式来安装。
1、配置163 yum 源
## 备份 # mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup ## 下载repo文件 # wget http://mirrors.163.com/.help/CentOS6-Base-163.repo # mv CentOS6-Base-163.repo /etc/yum.repos.d/ ## 生成缓存 # yum clean all # yum makecache
2、同步时间
[[email protected] ~]# yum -y install ntpdate [[email protected] ~]# ntpdate 64.113.32.5 6 Aug 15:56:30 ntpdate[20106]: step time server 64.113.32.5 offset 1299865.952230 sec
3、yum安装LAMP环境
[[email protected] ~]# yum -y install httpd php php-mysql php-snmp php-xml php-gd mysql mysql-server mysql-devel gd gd-devel ## 设置开机启动 [[email protected] ~]# chkconfig httpd on [[email protected] ~]# service httpd start [[email protected] ~]# chkconfig mysqld on [[email protected] ~]# service mysqld start ## 查看端口 [[email protected] ~]# netstat -tulpn | egrep ‘80|3306‘ tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 20365/mysqld tcp 0 0 :::80 :::* LISTEN 1848/httpd ## 测试php环境 [[email protected] ~]# vim /var/www/html/index.php <?php phpinfo(); ?>
然后通过浏览器访问,如果你看到如下页面,说明安装成功
测试,mysql数据库是否安装并启动:
[[email protected] ~]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 5.1.73 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. mysql>
OK, LAMP环境已经安装完成。
4、安装net-snmp包
# net-snmp for agent # net-snmp-utils for manager [[email protected] ~]# yum -y install net-snmp net-snmp-utils ## 编辑snmpd.conf配置文件, 请根据实际情况更改 [[email protected] ~]# vi /etc/snmp/snmpd.conf ### com2sec notConfigUser default public #### group notConfigGroup v1 notConfigUser group notConfigGroup v2c notConfigUser #### 请根据实际情况修改 #view systemview included .1.3.6.1.2.1.1 #view systemview included .1.3.6.1.2.1.25.1.1 view all included .1 #### access notConfigGroup "" any noauth exact all none none ## 重启snmpd服务,并测试 [[email protected] ~]# service snmpd restart [[email protected] ~]# snmpnetstat -v2c -c public -Ca -Cp tcp localhost Active Internet (tcp) Connections (including servers) Proto Local Address Remote Address (state) tcp *.ssh *.* LISTEN tcp *.mysql *.* LISTEN tcp localhost.smtp *.* LISTEN tcp localhost.smux *.* LISTEN tcp 192.168.11.103.ssh 192.168.11.4.60805 ESTABLISHED
5、安装rrdtool工具(建议yum安装,编译容易出现问题,比如缺少某字体,然后乱码,我遇到过)
[[email protected] ~]# yum -y install rrdtool # 可以看到,下面依赖了很多font相关的包 Dependency Installed: dejavu-fonts-common.noarch 0:2.30-2.el6 dejavu-lgc-sans-mono-fonts.noarch 0:2.30-2.el6 dejavu-sans-mono-fonts.noarch 0:2.30-2.el6 fontpackages-filesystem.noarch 0:1.41-1.1.el6 ## 测试是否安装成功 [[email protected] ~]# rrdtool -v RRDtool 1.3.8 Copyright 1997-2009 by Tobias Oetiker <[email protected]> Compiled Aug 21 2010 10:54:58
终于把cacti所依赖的环境的搭好了,下面就开始安装cacti
6、cacti安装和配置
## 下载cacti最新版本 [[email protected] ~]# wget http://www.cacti.net/downloads/cacti-0.8.8b.tar.gz ## 部署,为cacti创建虚拟主机 [[email protected] ~]# vim /etc/httpd/conf.d/virtual.conf <VirtualHost *:80> DocumentRoot "/web/cacti" ServerName cacti.monitor.com ErrorLog logs/cacti_error_log CustomLog logs/cacti_access_log common Alias /cacti "/web/cacti" <Directory "/web/cacti"> Options Indexes FollowSymLinks DirectoryIndex index.php index.html index.htm AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost> ## 创建cacti目录 [[email protected] ~]# mkdir -pv /web mkdir: created directory `/web‘ ## 解压cacti.tar.gz 到刚才创建的目录 [[email protected] ~]# tar xf cacti-0.8.8b.tar.gz -C /web [[email protected] ~]# cd /web [[email protected] web]# mv cacti-0.8.8b/ cacti
解释一下virtual.conf中配置的logfile,Contiguration and logfile names: If the fielnames you specify for many of the server‘s control files begin with "/"(or "drive:/" for win32),the server will use that explicit path. If the filenames do "not" begin with "/", the value of ServerRoot is prepended -- so "logs/foo.log" with ServerRoot set to "/etc/httpd" will be interpreted by the server as "/etc/httpd/logs/foo.log"
在cacti的解压目录下,其中cacti.sql保存了所有建表的语句,但是没有创建数据库的语句。所以我们必须要先手动创建一个库。
## 创建名为cactidb的库 [[email protected] cacti]# mysqladmin -uroot -p create cactidb ## 执行建表语句 [[email protected] cacti]# mysql -uroot -p cactidb < cacti.sql ## 因为cacti需要访问数据库,所以我们得给cacti创建一个授权用户 [[email protected] cacti]# mysql -uroot -p -e "GRANT ALL ON cactidb.* TO [email protected] IDENTIFIED BY ‘cactiuser‘" [[email protected] cacti]# mysql -uroot -p -e ‘FLUSH PRIVILEGES‘ ## 测试 cactiuser能够登录Mysql [[email protected] cacti]# mysql -ucactiuser -pcactiuser Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 16 Server version: 5.1.73 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. mysql>
接下来,我们配置cacti的配置文件,配置连接mysql数据库:
[[email protected] cacti]# pwd /web/cacti [[email protected] cacti]# vi include/config.php /* make sure these values refect your actual database/host/user/password */ $database_type = "mysql"; $database_default = "cactidb"; $database_hostname = "localhost"; $database_username = "cactiuser"; $database_password = "cactiuser"; $database_port = "3306"; $database_ssl = false; /* Edit this to point to the default URL of your Cacti install ex: if your cacti install as at http://serverip/cacti/ this would be set to /cacti/ */ $url_path ="/cacti/"; # 这一行非常重要设置cacti程序访问路径的
## 重启httpd, 重启mysqld [[email protected] ~]# service httpd restart [[email protected] ~]# service mysqld restart
然后通过浏览器访问: http://IP/cacti, 会弹出cacti初始化界面
点击 “Next”继续
接下来,让你选择全新安装还是升级,我们选择全新安装“New Install”,然后点击Next继续
这里会检查cacti所依赖的所有配置选项,若有不符合或者没有找到的,会用红色字体标出,我们这里全部提示OK,所以直接 Finish
页面跳转到cacti的登录界面,到此cacti的初始化工作就全部完成,我们登录一次,默认的用户名和密码都是admin,首次登录后,会强制我们更改密码。
好了,下面我们来熟悉一些cacti的界面。
在左上角,有两个比较大的按钮:控制台“console”,和图形“graphs”。我们大部分的配置工作都是在console中完成的,graphs中我们可以查看生成的图形。
所以,console才是我们的重点,下面就分别讲一讲他们是干什么用的。看到上图中左侧边栏的灰色项了吗?console就大致分为这7个部分。
1、Create
- New Graphs:添加新图形
2、Management
- Graph Management 图形管理。删除/复制,Cacti会自动创建图像。
- Graph Trees 图形树,设置分类,以树结构展示。
- Data Source 数据源。管理rrd 数据库文件的,由Cacti自己创建和管理。
- Devices 设备管理,这是我们经常需要修改的地方,可以创建新的需要被监控的设备。
3、Collection Methods
- Data Queries 数据查询
- Data Input Methods 数据输入方法(重要)
4、Templates
- Graph Templates 图形模板
- Host Templates 主机模板
- Data Templates 数据模板
5、Import/Export
模板的导入/导出,可以在cacti的官方网站上找到这些模板,不过需要注意模板的版本。
- Import Templates 导入模板
- Export Templates 导入模板
6、Configuration
- Setting 系统设置,Cacti的主要配置菜单。
- Plugin Management 插件管理
7、Utilities
- System Utilities 系统工具,显示cacti的cache和log信息
- User Management 用户管理,可以在此添加/删除用户,并对每个用户设置详细权限
- Logout User 退出登录
我们着重介绍 Collection Methods,数据收集方法。有两种方法:
- Data Queries 数据查询,xml格式数据收集方法
- Data Input Methods 命令或脚本(比较常用)
注意:数据收集方法仅仅需要指定如何去获取数据,并不需要我们指定每隔多少时间去收集一次。并且获取到的数据经过处理后要按规定的格式输出(格式比较严格),必须要指定输出。
基本格式: TAG:data TAG:data 举例说明: input:20 output:30
我们提到,数据收集方法仅仅指定了如何去获取数据,那么这些数据收集方法是如何被执行的呢?多久时间执行一次呢?这是由cacti自己定义的。cacti/poller.php 会把我们定义好的,所有的数据查询,数据输入方法,每隔一段时间执行一次。poller.php指挥那些数据收集脚本执行。
cacti在运行过程中,需要定期执行poller.php脚本,以收集数据。一般来说,不要让root用户去执行这个poller.php,而是应该建立一个用户,专门做这个事情。
为了安全,我们还需要更改cacti目录的权限。除了log, rra两个目录,其他文件的属主/属组都改为root:root。 log用于存放cacti日志,rra存放rrd数据库文件。所以它们需要有写权限。plugins, resource目录分别用户存放 插件,和模板。
因为cacti在运行过程中,会读写两个目录: cacti/log, cacti/rra, 所以我们专门创建一个cacti用户,并授予对cacti/log,及cacti/rra的读写权限。
[[email protected] ~]# useradd cacti [[email protected] ~]# chown -R root:root /web/cacti [[email protected] ~]# chown -R cacti:cacti /web/cacti/log /web/cacti/rra
我们用脚本定义了收集数据方法,也指定了数据输出,那么脚本多长时间执行一次呢?执行的时间是cacti程序设置的。下面我们来配置cacti安装的最重要的一步也是最后一步,设置cacti收集数据的默认的任务计划。
调用数据收集方法的任务是由poller.php程序完成的。需要说明的是poller.php是由php写的,单线程的功能比较弱,为此cacti官方单独开发一个多线程Spine工具,适合大规模监控应用。
首先,我们手动验证一下,poller.php能够正常工作:
## 切换到cacti用户 [[email protected] ~]# su - cacti [[email protected] ~]$ /usr/bin/php /web/cacti/poller.php
我在执行的时候, 报了一大堆的PHP Warning, 这主要是php.ini配置文件中,时区设置有问题。我们修改一下:
## 注意切换回root [[email protected] ~]$ exit [[email protected] ~]# vi /etc/php.ini [Date] ; Defines the default timezone used by the date functions ; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone date.timezone = Asia/Chongqing # 修改这里 ### 然后,重启httpd 服务 [[email protected] ~]# service httpd restart ### 再次以cacti用户执行一次pooler.php [[email protected] ~]# su - cacti [[email protected] ~]$ /usr/bin/php /web/cacti/poller.php 08/06/2014 08:51:14 PM - POLLER: Poller[0] WARNING: Cron is out of sync with the Poller Interval! The Poller Interval is ‘300‘ seconds, with a maximum of a ‘300‘ second Cron, but 1921 seconds have passed since the last poll! OK u:0.00 s:0.04 r:3.84 OK u:0.00 s:0.04 r:3.87 OK u:0.00 s:0.04 r:3.87 OK u:0.00 s:0.04 r:3.96 OK u:0.00 s:0.04 r:4.26 08/06/2014 08:51:19 PM - SYSTEM STATS: Time:5.2785 Method:cmd.php Processes:1 Threads:N/A Hosts:2 HostsPerProcess:2 DataSources:5 RRDsProcessed:5
然后我们把它添加到cron任务计划,每隔5分钟执行一次:
[[email protected] ~]# echo ‘*/5 * * * * /usr/bin/php /web/cacti/poller.php &>/dev/null‘ > /var/spool/cron/cacti [[email protected] ~]# crontab -u cacti -l */5 * * * * /usr/bin/php /web/cacti/poller.php &>/dev/null
OK,Cacti的安装就全部完成了。
Cacti概述及安装