写在前面

  在阅读这篇文章之前,我们默认您已经具备了Linux基本操作技能,能够搭建LAMP环境了解SNMP简单网络管理协议以及RRDTool绘图工具的使用。

搭建环境:

  • CentOS 6.5 x86

  • Cacti-0.8.8b

  • LAMP


一、概述

    首先,我们对监控要有一定的了解,我们需要层层递进了解。什么是监控?Linux上常见的监控方式(命令或者脚本)?如何监控远程的主机(SNMP)?监控的结果如何展示(日志或者图表)?监控的结果如何绘图,以更直观的方式呈现给终端用户(RRDTool)? 等等。

什么是监控?

    日常生活中,比如小区的摄像头, 保安 , 都可以归为监控。

在计算机领域:

    日常最重要的就是保证网站正常稳定的运行,我们需要实时监控网站、服务器的运行状态,这时需要借助开源软件cactinagios、ntop、zabbix等)监控来实现。

监控一般可以分为两类:

  • 状态的连续监控, 比如 Cacti (RRDTool 基于时间序列数据) 

  • 状态转换监控, 比如 Nagios


SNMP: 

    简单网络管理协议,用于搜集数据。

RRDTool

    RRDTool是一个非常强大的绘图引擎,存储数据并适时取出数据绘图。使用过它的人都知道,利用RRDTool来绘图是一件多么痛苦的事情,命令行上,一大堆的参数,难的脸都绿了j_0021.gif。总的来说,RRDTool主要有以下的缺点:

  1. RRDTool只能存储数据和绘图,没有数据采集的功能,需要手工写脚本收集数据

  2. 命令行参数多且复杂,难以控制

  3. 无用户、图像管理功能

    在之前的实验中,我们知道可以通过snmp协议来收集远程主机的系统状态信息,如CPU使用率、内存的使用率、网卡流量、TCP连接数据等,然后将收集的数据保存在RRD文件中,再通过RRDTool复杂的命令行工具来绘图。感觉用RRDTool  简直在自虐。  

    虽然,rrdtool不是那么易于使用,但是我们也应该有所了解。如果我们不知道rrdtool命令的意义,那么很难理解cacti中自动生成的rrdtool命令,当然也就不能良好精确的操作cacti中的配置选项,以及排错。


此刻,伟大的救世主诞生了: Cacti。

    Cacti 在英文中的意思是仙人掌的意思,Cacti是一套基于PHP、MySQL、SNMP及RRDTool开发的网络流量监测图形分析工具。它通过snmpget来获取数据,使用 RRDtool绘画图形,它的界面非常漂亮,能让你根本无需明白rrdtool的参数能轻易的绘出漂亮的图形。而且你完全可以不需要了解RRDtool复杂的参数。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,让你添加自己的snmp_query和script!功能非常强大完善,界面友好。可以说,Cacti将rrdtool的所有“缺点”都补足了!

Cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据然后用rrdtool储存和更新数据当用户需要查看数据的时候用rrdtool生成图表呈现给用户。因此,snmp和rrdtool是cacti的关键

snmp关系着数据的收集,rrdtool关系着数据存储和图表的生成snmp抓到数据不是存储在mysql中,而是存在rrdtool生成的rrd文件中(在cacti根目录的rra文件夹下,一般以rra为后缀名称)。rrdtool绘图的数据源就是来自此rrd文件,这个数据库是一个大小固定的数据库,它所能存储的数据量及采用哪种聚合函数组织数据在创建时就已确定了。

    cacti本身并不获取数据,不保存数据,也不展示数据,这些功能其实都是rrdtool完成的。cacti仅仅是提供了一个管理框架,然后调用rrdtool来完成这一系列复杂的任务。

Cacti 就是结合 SNMP , RRDTool 以完成复杂任务的PHP程序,主要负责展示。


Cacti的功能:

  • Cacti能够自动的为我们创建rrd数据库(rrdtool create)

  • 周期性的执行能够取得数据的命令(数据采集),并将取回的数据保存至上一步创建的rrd文件中

  • 利用rrdtool绘图并展示

  • 用户管理,精细的用户权限控制

  • 支持插件,扩展cacti的功能

  • 支持模板(导入和导出)

    • 图形模板(绘图)

    • 数据模板(数据如何保存,更新)

    • 主机模板(归类的 图形模板 + 数据查询,可以直接应用到某种主机上:linux,UNIX,WIN)

cacti是如何获取数据呢?    

    其实cacti获取数据的方式是多样化的,通过周期性的执行某个脚本,或者使用snmp,更或者是ssh,这些都是根据实际需要以及方便性来抉择。cacti需要周期性的驱动这些获取数据的脚本执行,并把取得的数据保存至相应的rrd数据库中。

cacti是如何保存数据(创建rrd,并更新数据)呢?

    这就是数据模板的功能。

cacti是如何展示数据(绘图)呢?

    这就是图形模板的功能。


二、Cacti 的工作流程

    我们从以下这幅图,就能完整的看到cacti的工作流程:

Cacti 提供了一个框架,它把 mysql, rrdtool, snmp及模板组织在一起协同完成任务。SNMP用于数据的采集, 然后通过RRDTool进行存储,填充到rrd数据库中,并绘图。而mysql数据库存放cacti用户信息,模板,主机对应信息及经过rrd聚合后的rra归档数据等。

wKioL1Ph3KuiqrI4AADpHmTppw8423.jpg

下面我们来简单的说明一下Cacti的工作流程,

  • 步骤一,snmp协议收集远程服务器的数据

  • 步骤二,将snmp收集的数据内容保存到rrd数据库中

  • 步骤三,若用户查看某台设备上的流量或其它状态信息

  • 步骤四,在mysql数据库中查找该设备对应的rra数据库文件的名称

  • 步骤五,通过rrdtool命令进行绘图即可

    

    cacti通过计划任务定时把数据采集填充到rrd数据库中,当用户需要查看被监控对象的流量数据时就像cacti发出查询某设备流量数据的命令,cacti在mysql数据库中检索此被监控对象的名称及所对应的rra数据,再调用rrdtool工具进行绘图操作,再把图形返回给用户,这样用户就能观看到图形了。


三、Cacti 的安装

    cacti的官方网站:http://www.cacti.net/download_cacti.php

cacti官方首页上这样描述:

The latest stable version is 0.8.8b, released 08/04/13.

Cacti requires MySQLPHPRRDToolnet-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概述中说过cacti是一个php程序,而它需要rrdtool工具进行绘图,需要snmp工具来收集数据,所以要想让cacti工作起你就需要一个php程序的运行环境、需要安装上rrdtool工作,以及snmp工具。 

    我们知道,

  • cacti实际上就是利用php开发的网页程序,所以cacti的运行依赖于LAMP或者LNMP环境。(LAMP环境有两种安装方法:编译安装和yum安装)

  • 选择编译安装的同学需要注意,在编译PHP的时候,一定要加上 --enable-sockets 选项,配置socket支持, 否则会报错,请注意这点

  • cacti0.8.8之前的版本默认都没有带插件的功能,如果需要某些功能,还需要安装额外的插件,在0.8.8之后的版本,就自动集成了这些插件

    由于源码编译LAMP要花费大量的时间,这里我就偷懒使用yum方式来安装。

安装清单

  • snmp

  • rrdtool

  • lamp  (apache,  mysql,  php)


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、同步时间

[root@localhost ~]# yum -y install ntpdate
[root@localhost ~]# 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环境

## 关闭iptables, SELinux
# service iptables stop
# setenforce 0

## yum 安装 lamp
[root@localhost ~]# yum -y install httpd php php-mysql php-snmp php-xml php-gd mysql mysql-server mysql-devel gd gd-devel

## 设置开机启动
[root@localhost ~]# chkconfig httpd on
[root@localhost ~]# service httpd start

[root@localhost ~]# chkconfig mysqld on
[root@localhost ~]# service mysqld start

## 查看端口
[root@localhost ~]# 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页面并测试php环境
[root@localhost ~]# vim /var/www/html/index.php
<?php
	phpinfo();
?>

然后通过浏览器访问,如果你看到如下页面,说明安装成功,如果拒绝访问,或者无法访问,请仔细检查iptables规则,和SELinux。建议把它们关闭。

wKioL1Ph5h_jVqLTAAL6ybukOrA508.jpg

测试,mysql数据库是否安装并启动, 如果MySQL设置了密码:

## 对mysql 进行安全配置
# /usr/bin/mysql_secure_installation

[root@localhost ~]# 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

[root@localhost ~]# yum -y install net-snmp net-snmp-utils

## 编辑snmpd.conf配置文件, 请根据实际情况更改,强烈建议修改 community ,以及 来源IP
[root@localhost ~]# 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服务,并测试
[root@localhost  ~]#  chkconfig snmpd on
[root@localhost ~]# service snmpd restart
[root@localhost ~]# 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安装,编译容易出现问题,比如缺少某字体,然后导致乱码

[root@localhost ~]# 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 

## 测试是否安装成功
[root@localhost ~]# rrdtool -v
RRDtool 1.3.8  Copyright 1997-2009 by Tobias Oetiker <tobi@oetiker.ch>
               Compiled Aug 21 2010 10:54:58

这里, 我也简单的介绍一下,如何编译安装 rrdtool 1.4.8 版

1、下载 rrdtool

# wget  http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.8.tar.gz

2、安装rrdtool之前需要安装相应的lib库,如下安装:

# yum install cairo-devel libxml2-devel pango pango-devel -y

3、编译安装

# tar xf rrdtool-1.4.8.tar.gz -C /usr/local/src
# cd /usr/local/src/rrdtool-1.4.8/

# ./configure --prefix=/usr/local/rrdtool
# make && make install

报错如下:

Can't locateExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib/perl5/usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl/usr/lib/perl5 /usr/share/perl5 .) at Makefile.PL line 1.

BEGINfailed--compilation aborted at Makefile.PL line 1.

解决:

# yum install perl-ExtUtils-CBuilder  perl-ExtUtils-MakeMaker

继续安装:

# make clean
# make && make install

# vi /etc/profile.d/rrdtool.sh 
export PATH=$PATH:/usr/local/rrdtool/bin

# . /etc/profile.d/rrdtool.sh

检查配置环境

# for svc in mysqld snmpd httpd; do chkconfig --list $svc; done
mysqld         	0:off	1:off	2:on	3:on	4:on	5:on	6:off
snmpd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
httpd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off

# ss -tunl
Netid  State      Recv-Q Send-Q       Local Address:Port         Peer Address:Port 
udp    UNCONN     0      0                        *:161                     *:*     
tcp    LISTEN     0      128                     :::80                     :::*     
tcp    LISTEN     0      128                     :::22                     :::*     
tcp    LISTEN     0      128                      *:22                      *:*     
tcp    LISTEN     0      100                    ::1:25                     :::*     
tcp    LISTEN     0      100              127.0.0.1:25                      *:*     
tcp    LISTEN     0      128              127.0.0.1:199                     *:*     
tcp    LISTEN     0      50                       *:3306                    *:*

搞定, 终于把cacti所依赖的环境的搭好了,下面就开始安装cacti


6、cacti安装和配置

## 下载cacti最新版本
[root@localhost ~]# wget http://www.cacti.net/downloads/cacti-0.8.8b.tar.gz

## 部署,为cacti创建虚拟主机
[root@localhost  ~]# vim /etc/httpd/conf/httpd.conf
.....
#DocumentRoot "/var/www/html"     #中心主机注释掉
...

[root@localhost ~]# 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目录
[root@localhost ~]# mkdir -pv /web
mkdir: created directory `/web'

## 解压cacti.tar.gz 到刚才创建的目录
[root@localhost ~]# tar xf cacti-0.8.8b.tar.gz -C /web
[root@localhost ~]# cd /web
[root@localhost web]# ln -sv 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的解压目录下,其中cacti.sql保存了所有建表的语句,但是没有创建数据库的语句。所以我们必须要先手动创建一个库。

## 创建名为cactidb的库
[root@localhost cacti]# mysqladmin -uroot -p create cactidb
## 导入建表语句,以及数据
[root@localhost cacti]# mysql -uroot -p cactidb < cacti.sql 
mysql> show tables from cacti;  #验证表是否创建
+---------------------------+
| Tables_in_cacti           |
+---------------------------+
| cdef                      |
| cdef_items                |
| colors                    |
| data_input                |
| data_input_data           |
| data_input_fields         |
| data_local                |
| data_template             |
| data_template_data        |
| data_template_data_rra    |
| data_template_rrd         |
| graph_local               |
| graph_template_input      |
| graph_template_input_defs |
| graph_templates           |
| graph_templates_gprint    |
| graph_templates_graph     |
| graph_templates_item      |
| graph_tree                |
| graph_tree_items          |
| host                      |
| host_graph                |
| host_snmp_cache           |
| host_snmp_query           |
| host_template             |
| host_template_graph       |
| host_template_snmp_query  |
| plugin_config             |
| plugin_db_changes         |
| plugin_hooks              |
| plugin_realms             |
| poller                    |
| poller_command            |
| poller_item               |
| poller_output             |
| poller_reindex            |
| poller_time               |
| rra                       |
| rra_cf                    |
| settings                  |
| settings_graphs           |
| settings_tree             |
| snmp_query                |
| snmp_query_graph          |
| snmp_query_graph_rrd      |
| snmp_query_graph_rrd_sv   |
| snmp_query_graph_sv       |
| user_auth                 |
| user_auth_perms           |
| user_auth_realm           |
| user_log                  |
| version                   |
+---------------------------+
52 rows in set (0.00 sec)

## 因为cacti需要访问数据库,所以我们得给cacti创建一个授权用户,最好不要使用root账号
## 所以我们为了安全,仅创建一个用户仅对cacti这个库有所有权限
[root@localhost cacti]# mysql -uroot -p -e "GRANT ALL ON cactidb.* TO cactiuser@localhost IDENTIFIED BY 'cactiuser'"
[root@localhost cacti]# mysql -uroot -p -e 'FLUSH PRIVILEGES'

## 测试 cactiuser能够登录Mysql
[root@localhost 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> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| cactidb           |
+--------------------+
2 rows in set (0.00 sec)

    接下来,我们编辑 cacti 的配置文件,配置如何连接mysql数据库:

[root@localhost cacti]# pwd
/web/cacti
[root@localhost 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程序访问路径的

#这一项是可选项,默认是“$url_path = "/cacti/”,表示在访问cacti控制台时需要加上"/cacti"这个URI,而修改为“$url_path = "/”后,访问cacti的控制台只需要“http://IP”即可

## 保存退出

好的,重启一下 httpd 服务    

## 重启httpd, 重启mysqld
[root@localhost ~]# service httpd restart

[root@localhost ~]# service mysqld restart

然后通过浏览器访问一下: http://IP/cacti ,  会弹出cacti初始化界面

wKioL1Ph-HWAZ0m8AAIlNJuYuEY680.jpg

点击 “Next”继续

wKioL1Ph-ceCrwayAADc281ejnY473.jpg

接下来,让你选择全新安装还是升级,我们选择全新安装“New Install”,然后点击Next继续

wKiom1Ph-LjBNHDNAALm-EWrw2g630.jpg

这里会检查cacti所依赖的所有配置选项,若有不符合或者没有找到的,会用红色字体标出 ERROR,根据提示进行修正,我们这里全部提示OK,所以直接 Finish

wKioL1Ph-kWBTFzKAADMiS5FwJ4159.jpg

  页面跳转到cacti的登录界面,到此cacti的初始化工作就全部完成。

  • 默认的用户名和密码都是admin

  • 首次登录后,会强制我们更改密码。


四、Cacti 页面概览

    好了,我们已经进入cacti的主页,下面我们来熟悉一些cacti的界面。

wKioL1PjUumi1jOlAAHMqkQzAao471.jpg

 在左上角,有两个比较大的按钮:控制台【console】,和图形【graphs】。我们大部分的配置工作都是在console中完成的,graphs中我们可以查看生成的图形。下面我们点击一下“graphs”标签,如下图:

wKiom1W_90-iZMl6AAF3pK0ZOPA875.jpg

    由于我们还没做任何配置cacti如何去监控我们的主机,所以这里没有任何图像。


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】

    收集方法:指的是数据的收集方法。我们前面以及提到,cacti需要调用SNMP,rrdtool工具去收集和存储数据,那问题来了:我们如何去收集数据呢?

    我们着重介绍 Collection Methods,数据收集方法,定义通过哪种方法, 到哪里去收集数据。数据收集方法主要有两种方法"Data Queries"  and "Data Input Mehtods":

wKioL1PkHZSDqJetAAAiL8oFmf0694.jpg

  • Data Queries             数据查询,事先定义好的 xml 格式数据收集方法

  • Data Input Methods 命令或脚本(比较常用)

  注意:数据收集方法仅仅需要指定如何去获取数据,并不需要我们指定每隔多少时间去收集一次并且获取到的数据经过处理后要按规定的格式输出(格式比较严格),必须要指定输出。

基本格式: TAG:data  TAG:data    # 标签:数据,有多个输出在一行上列出,以空白分隔
举例说明: input:20  output:30

  

安装配置cacti的最后一步,也是最重要的一步(出图的关键)

    我们提到,数据收集方法仅仅指定了如何去获取数据,那么这些数据收集方法是如何被执行的呢?多久时间执行一次呢?这是由cacti自己定义的。

    cacti在运行过程中,需要每5分钟获取一次数据,而获取这个数据的过程需要执行一个php脚本,这个脚本会驱动那些数据收集方法执行。cacti/poller.php 会把我们定义好的,所有的数据查询,数据输入方法执行一次。

    poller.php指挥那些数据收集脚本执行,所以poller.php能够周期性的执行,那么其他那些收据收集方法也就可以周期性的执行了。这就是为什么收集收集脚本不需要指定多长时间执行一次的原因。

周期性执行poller.php, 驱动指挥那些能够取得数据的命令脚本,并将取回的数据保存至rrd文件中。

    cacti在运行过程中,需要定期执行poller.php脚本,以收集数据。一般来说,不要让root用户去执行这个poller.php ,而是应该建立一个普通用户,专门做这个事情,周期性的执行poller.php。

    为了安全,我们还需要更改cacti目录的权限。除了log, rra两个目录,其他文件的属主/属组都改为root:root。 log用于存放cacti日志,rra存放rrd数据库文件。所以它们需要有写权限。plugins, resource目录分别用户存放 插件,和模板。

    因为cacti在运行过程中,会读写两个目录: cacti/log, cacti/rra, 所以我们专门创建一个cacti用户,并授予对cacti/log,及cacti/rra的读写权限。

[root@localhost ~]# useradd cacti
[root@localhost ~]# chown -R root:root /web/cacti
[root@localhost ~]# chown -R cacti:cacti /web/cacti/log /web/cacti/rra

  我们用脚本定义了收集数据方法,也指定了数据输出,那么为问题是数据收集脚本多长时间执行一次呢?执行的时间是cacti程序设置的。下面我们来配置cacti安装的最重要的一步也是最后一步,设置cacti收集数据的默认的任务计划。

      调用数据收集方法的任务是由poller.php程序完成的。需要说明的是poller.php是由php写的,只支持单线程,功能比较弱。为此cacti官方单独开发一个多线程Spine工具,用于替换poller.php,适合大规模监控应用。

首先,我们手动验证一下,poller.php能够正常工作:

## 切换到cacti用户,以cacti身份执行 poller.php
[root@localhost ~]# su - cacti
[cacti@localhost ~]$ /usr/bin/php /web/cacti/poller.php

我在执行的时候, 报了一大堆的 PHP Warning, 这主要是php.ini配置文件中,时区设置有问题。我们修改一下:

## 注意切换回root
[cacti@localhost ~]$ exit
[root@localhost ~]# 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 服务
[root@localhost ~]# service httpd restart

### 再次以cacti用户执行一次pooler.php
[root@localhost ~]# su - cacti
[cacti@localhost ~]$ /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分钟执行一次:(出图的关键所在)

只有执行过后才会出图。只有过一段时间后才会有数据(如果不出图,检查snmp服务是否启动、检查rra和log是否有可写权限,)

[root@localhost ~]# echo '*/5 * * * * /usr/bin/php /web/cacti/poller.php &>/dev/null' > /var/spool/cron/cacti
[root@localhost ~]# crontab -u cacti  -l
*/5 * * * * /usr/bin/php /web/cacti/poller.php &>/dev/null

查看一下执行日志,

[root@localhost cacti]# cd log
[root@localhost log]# tail cacti.log
10/12/2013 04:18:26 PM - SYSTEM STATS: Time:0.2288 Method:cmd.php Processes:1 Threads:N/A Hosts:2 HostsPerProcess:2 DataSources:5 RRDsProcessed:5

尼玛,这是什么鬼 ??j_0064.gif  编译安装 rrdtool 1.4.8 ,生成的图片出现乱码的情况。

wKioL1W9XKfT6Ys-AAG64D4zBCo034.jpg


原因是Linux系统本身缺少字体。

解决办法一:重新安装 rrdtool

  • 通过yum 安装 rrdtool:     yum -y install rrdtool

  • 然后 setting – General – RRDTool Utility Version 选择适当的rrdtool版本即可。

解决办法二:安装字体库。

#  yum -y install xorg-x11-font*            (可行)

或者

#  yum -y groupinstall chinese-support 

安装中文字体即可,再次刷新页面,页面正常显示了!

解决办法三:复制windows 下的字体到linux系统

将windows中C:\WINDOWS\Fonts\simsun.ttc复制到/usr/share/fonts/chinese/TrueType/  目录中,rrdtool即可支持中文。
第一步: windows上执行  cp  C:\WINDOWS\Fonts\simsun.ttc    C:\ 
第二步: 然后用你自己的方法,把simsun.ttf  传到  /usr/share/fonts/chinese/TrueType/    中去吧 。
接着修改Cacti配置文件,设置=》路径=》RRDTool默认字体路径.


OK,Cacti的安装就全部完成了。在下一篇中,继续讲解cacti如何监控主机。