Chinaunix首页 | 论坛 | 博客
  • 博客访问: 409150
  • 博文数量: 89
  • 博客积分: 1386
  • 博客等级: 中尉
  • 技术积分: 827
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-20 10:32
个人简介

12年 linux 系统运维工程师,网络架构设计、优化,故障处理。

文章分类

全部博文(89)

文章存档

2019年(1)

2015年(2)

2014年(11)

2013年(14)

2012年(2)

2011年(59)

分类: 系统运维

2011-11-15 16:47:36

Cacti 功能类似于我们所熟悉的 MRTG 。 MRTG 确实是非常好的老牌系统监控工具,但由于他历史实在很久了,使得许多功能以及配置等方面都比较落后。实现得比较费劲,管理起来很麻烦。比如我有几百个被监测点,分布在不同的机房,而且我需要将这些服务器和网络设备分类,这样的话我就要将这些被监测点放在不同的 mrtg 配置文件中,运行多个 crontab,而且还要自己写了一些 html 页面对其进行管理。

Cacti 其实是一套 php 程序,一个 rrdtool 工具。它运用 snmpget 采集数据,使用 rrdtool 绘图。界面非常漂亮,它提供了强大的数据管理和用户管理功能,一张图是属于一个 host 的,每一个 host 又可以挂载到一个树状的结构上。

用户的管理上,作为一个开源软件,它做到为指定一个用户能查看的“树”、host、甚至每一张图,还可以与 LDAP 结合进行用户的验证。 Cacti 还提供自己增加模板的功能,让你添加自己的 snmp_query 和 script 。功能相当强大!

本文前半部分是教程,主要介绍了 Cacti 以及其 PHP 运行环境的安装配置。后半部分将实际举例如何使用 Cacti 监控诸如 Linux,Windows 。以及支持 SNMP 管理协议的路由器等网络设备。





回页首


Cacit 运行环境需要 PHP + Mysql + rrdtool 以及 snmp 工具的支持。

下边是本次配置需要用到的软件。

Catci:

  1. cacti-0.8.6j.tar.gz
  2. rrdtool-1.2.27.tar
  3. net-snmp-5.0.9-2.30E.15
  4. net-snmp-devel-5.0.9-2.30E.15
  5. net-snmp-libs-5.0.9-2.30E.15
  6. net-snmp-utils-5.0.9-2.30E.15

PHP:

  1. php-5.2.6.tar.gz
  2. curl-7.15.0.tar.gz
  3. freetype-2.1.9.tar.gz
  4. gettext-0.16.1.tar.gz
  5. gd-2.0.35.tar.gz
  6. jpegsrc.v6b.tar.gz
  7. libart_lgpl-2.3.17.tar.gz
  8. libpng-1.2.18.tar.gz
  9. libxml2-2.6.32.tar.gz
  10. ZendOptimizer-3.3.0a-linux-glibc21-i386.tar.gz
  11. zlib-1.2.3.tar.gz
  12. libxml2-2.6.32.tar.gz

Apache:

httpd-2.2.6.tar.gz

Mysql:

mysql-5.1.24-rc.tar.gz

开始构建完整的 PHP 运行的环境,我们以全新安装的 RedHatAs4 updata4 操作系统环境为例。

首先编译安装Apache httpd server

  1. # tar zxvf httpd-2.2.6.tar.gz
  2. # cd httpd-2.2.6
  3. # ./configure --prefix=/usr/local/apache26 --enable-module=so --with-mpm=worker --enable-module=rewrite
  4. # make && make install

第二步安装 PHP+GD 等所需的支持插件

编译安装libxml

  1. # tar zxvf libxml2-2.6.32.tar.gz
  2. # cd libxml2-2.6.32.tar.gz
  3. # ./configure --prefix=/usr/local/libxml2/
  4. # make && make install

编译安装zlib

  1. # tar zxvf zlib-1.2.3.tar.gz
  2. # cd zlib-1.2.3
  3. #./configure --prefix=/usr/local/zlib2/
  4. # make && make install

编译安装jpeg支持

  1. # tar -zxf jpegsrc.v6b.tar.gz
  2. # cd jpeg-6b/
  3. # ./configure --prefix=/usr/local/jpeg6
  4. # make
  5. # make install-lib
  6. # make install

( 该版本的 jpeg 在实际安装过程中,make install 的时候会出现好几个找不到目录,或目录不存在的 error 。只需按照提示人手创建缺失目录,然后再令其 make install 直到无任何错误提示且顺利完成为止。 )

编译安装 libpng

  1. # tar zxvf libpng-1.2.18.tar.gz
  2. # cd libpng-1.2.18.tar.gz
  3. #cp scripts/makefile.gcmmx makefile
  4. #./configure --disable-shared --prefix=/usr/local/libpng2/
  5. # make && make install

编译安装 freetype

  1. # tar zxvf freetype-2.1.9.tar.gz
  2. # cd freetype-2.1.9
  3. #./configure --disable-shared --prefix=/usr/local/freetype2/
  4. # make && make install

编译安装 libart_lgpl

  1. # tar zxvf libart_lgpl-2.3.17.tar.gz
  2. # cd ibart_lgpl-2.3.17
  3. #./configure --disable-shared --prefix=/usr/local/libart/
  4. # make && make install

编译安装 gettext

  1. # tar zxvf gettext-0.16.1.tar.gz
  2. # cd gettext-0.16.1
  3. # ./configure --prefix=/usr/local/gettext/
  4. # make && make install

编译安装 gd 库 :

  1. # tar zxvf gd-2.0.35.tar.gz
  2. # cd gd-2.0.35
  3. # ./configure --prefix=/usr/local/gd2 --with-zlib=/usr/local/zlib2/ --with-png=/usr/local/libpng2/ --with-jpeg=/usr/local/jpeg6/ --with-freetype=/usr/local/freetype2/ --with-libart=/usr/local/libart/ --with-gettext=/usr/local/gettext/ --with-libxml=/usr/local/libxml2
  4. # make && make install

编译安装 Curl 支持

  1. # tar zxvf curl-7.15.0.tar.gz
  2. # cd curl-7.15.0
  3. # ./configure --prefix=/usr/local/curl
  4. # make && make install

编译安装 PHP

  1. # tar zxvf php-5.2.6.tar.gz
  2. # cd php-5.2.6
  3. # ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache26/bin/apxs --with-jpeg-dir=/usr/local/jpeg6/ --with-png-dir=/usr/local/libpng2/ --with-gd=/usr/local/gd2/ --with-freetype-dir=/usr/local/freetype2/ --with-zlib-dir=/usr/local/zlib2/ --with-mysql=/usr/local/mysql --with-curl=/usr/local/curl --with-gettext=/usr/local/gettext
  4. # make && make install
  5. # cp php.ini-dist /usr/local/php/lib/php.ini ( 拷贝 PHP 配置文件至安装目录 )
  6. # vi /usr/local/apach26/conf/httpd.conf ( 修改 apache 配置文件并加载 PHP 支持 )

要改的有如下几处

  1. 一般都在 #AddType application/x-tar .tgz 下加一行 :
#LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php

  1. 如果你搜索其它地方没有以下这行 :
LoadModule php5_module modules/libphp5.so

请把上面的 # 号去掉,还有找到
DirectoryIndex index.html index.html.var
在后面加 index.php 让它把 index.php 做为默认页

  1. 保存 httpd.conf 文件 .
    启动 apache
    # /usr/local/apache2/bin/apachectl start
    如果没有出错 , 写一个测试页放到你网页目录下 . 访问就应该可以看到 php 的版本等信息了 !

ZendOptimizer 加速 PHP

  1. #tar zxvf ZendOptimizer-2.5.3-linux-glibc21-i386.tar.gz
  2. #cd ZendOptimizer-2.5.3-linux-glibc21-i386
  3. #./install.sh


安装的时候注意输入正确的安装 apache 的路径等内容 !
安装完毕 , 再看看 phpinfo 页面的 zend 选项就发现了 !!

安装MYSQL# groupadd mysql
# useradd -g mysql mysql
# tar zxvf mysql-5.1.24-rc.tar.gz
# cd mysql-5.1.24-rc
# ./configure --prefix=/usr/local/mysql
--localstatedir=/data/mysql ( 指定数据文件目录 )
--without-innodb --without-debug --with-extra-charsets=gbk
--with-extra-charsets=all --enable-assembler --with-pthread
--enable-thread-safe-client --with-client-ldflags=-all-static
# make && make install

# cp ./support-files/mysql.server /etc/init.d/mysql ( 复制 Mysql 启动服务至系统 )
# chmod 777 /etc/init.d/mysql ( 赐予可执行权限 )
# chown mysql:mysql /data/mysql ( 设置数据文件目录属性 )

设置数据文件目录属性这一步相当重要,许多朋友第一次使用 tar 包安装 Mysql 的时候就因该目录权限问题导致 Mysql 无法启动。相当头大 .

# /usr/local/mysql/bin/mysql_install_db ( 初始化数据库 )
# service mysql start ( 启动 Mysql)
# /usr/local/mysql/bin/mysqladmin -u root -p password 'xxxxx' ( 设置管理员密码 xxx 默认值为空 )

好了,至此 mysql 安装完毕 .

这样构建 Cacit 运行的 PHP+Mysql 环境就基本上完成了。

下边开始安装 Cacit 所需要的 rrdtools 图形工具以及 snmp 工具

编译安装 rrdtools

# tar zxvf rrdtool-1.2.27.tar
# cd rrdtool-1.2.27
# ./configure --prefix=/usr/local/rrdtool
# make && make install

如果 ./configure 时出现下面这个错误

configure: error: Please fix the library issues listed above and try again.

表明系统有功能缺失,需安装 libart_lgpl-devel.rpm 这个包

如果还是提示听样的错误,有可能是找不到 FreeType

把 /usr/local/freetype2/lib/pkgconfig 下的 .pc 文件拷贝到 /usr/lib/pkgconfig 下即可

如果 make install 时出现 [tclrrd.o] 错误

就安装 tcl-8.4.7-2.i386.rpm 以及 tcl-devel-8.4.7-2.i386.rpm 这 2 个包

安装 net-snmp、snmpwalk 和 snmpget 命令
# rpm -qa | grep net-snmp ( 查看系统中有否已经装有所需的软件 )
net-snmp-5.0.9-2.30E.15
net-snmp-devel-5.0.9-2.30E.15
net-snmp-libs-5.0.9-2.30E.15
net-snmp-utils-5.0.9-2.30E.15

没有或者缺少的话都需要逐一安装上。

而且还很有可能会因 rpm 的依存关系无法顺利安装,须使用 - - nodeps 参数。

以上所需的 rpm 安装包都能在 RedHatAs4 安装光盘上找到 .





回页首


至此,Cacti 所需的运行环境都已经准备好了,接下来开始进行安装以及配置。

稍微修改系统中 snmp 的配置

# vi /etc/snmp/snmpd.conf

  1. com2secnotConfigUser default public
    改为:com2secnotConfigUser 127.0.0.1 public
  2. access  notConfigGroup ""  any   noauth    exact  systemview  none none
    改为:accessnotConfigGroup""anynoauthexact all none none
  3. #view all    included  .1         80
    将前面的 # 注释 去掉。
    保存退出 :wq
  4. 重新启动 snmp 服务
    # service snmpd restart

安装 / 配置 cacti

  1. # tar zxvf cacti-0.8.6j.tar.gz
  2. # mv cacti-0.8.6j /data/web_server/admin/cacti
    ( 把 cacit 剪切到自定的 web 目录下 )
  3. # chmod 777 – Rf /data/web_server/admin/cacti
    ( 设置目录权限 , 避免因权限问题而导致目录无法写入 )
  4. # cd /data/web_server/admin/cacti
    在Mysql中创建一个新的库,并导入cacti 目录中cacti.sql 并设置好该表的用户权限,然后编辑 cacti 的数据库配置文件。
  5. # vi /data/web_server/admin/cacti/include/config.php
    $database_type= “ mysql ” ;
    $database_default = “数据库名称” ;
    $database_hostname = “默认是 localhost ” ;
    $database_username = “用户名” ;
    $database_password = “密码” ;


    更改用户、密码等项与上面给出的对应保存退出

  6. # crontab – e (加入自动执行规则,每 5 分钟执行。)
    */5 * * * * /usr/local/php/bin/php /data/web_server/admin/cacti/poller.php \
    > /dev/null 2>&1
    (其中 /usr/local/php/bin/php 这个为 php 的安装目录)

  7. 保存退出:wq
  8. 在 apache 上设置好 cacti 所在 web 目录
  9. 打开浏览器 http://youhostname/cacti
  10. 进入 cacti 的初始设置页面
    第一次默认登陆账号:admin 密码 admin
    登陆后它就会让你立即修改新密码

说一下 cacti 设置页中各项“零件”的路径。

当修改好新密码进入,第一个显示出的页面就是让你设置 rrdtool,snmp 等工具的路径。这是个很重要的环节,必须无误,要不然 cacti 将无法生成出统计图。

snmpwalk Binary Path : /usr/bin/snmpwalk
snmpget Binary Path: /usr/bin/snmpget
RRDTool Binary Path: /usr/local/rrdtool/bin/rrdtool
PHP Binary Path: /usr/local/php/bin/php
Cacti Log File Path: /data/web_server/admin/cacti/log/cacti.log
Cactid Poller File Path: /data/web_server/admin/cacti/poller.php


默认的配置中会出现许多“ NotFound ”

按照上边的路径把“ NotFound ”的项都重新填上。

手动运行一次

/usr/local/php/bin/php /data/web_server/admin/cacti/poller.php > /dev/null 2>&1

你就能在顶上 graphs 中 localhost 里头看到本机的内存,CPU,登陆用户等的统计图 .



Cacti 统计图

但默认 Cacti 是没有创建网卡流量的监控图的。要我们自己来加。

回到 console 菜单

选择 Devices 监控设备。



设备监控


添加设备

然后点击右上角的 Add 进行添加

Description 设备名称 ( 可随意输入 )

Hostname 设备地址 ( 如果是本机就填 127.0.0.1 )

Host Template 设备的类型 ( 选择 ucd/net SNMP Host )

然后其他按照默认即可,如下图



添加的新设备

点 create 创建。

如果刚才填写的地址无误,创建成功后,会在该页面左上方出现所新建设备的 SNMP Information

然后点击隔壁醒目的 * Create Graphs for this Host 即开始创建监控图表



创建图表-1


创建图表-2

如图 6,沟选你所要监控的网卡以及 IP,点 create 。

这样就完成了你所指定设备统计图的创建。



添加的设备统计图

点击菜单中的 Graph Management 即可浏览到你刚才所创建的图表,如图 7 箭头所示。



统计图表

有一个小技巧,初次要求 cacti 创建指定设备的统计图表,通过 Graph Management 进入图 8 所示页面时,统计表图片会是一个 X ( 叉 ) 。这是因为在配置初期指定系统中每 5 分钟执所行的 php 语句还没到点运作。要么你就等 5 分钟,要么你就直接进入系统手动执行:

/usr/local/php/bin/php /data/web_server/admin/cacti/poller.php > /dev/null 2>&

然后曲线表中就能出现第一个峰值,每 5 分钟自动更新。 24 小时后,曲线图就能完整地出现在你眼前。

回到图 7 Graph Management 的界面勾选新建的图表项,然后在下边

Choose an action 框中选择 Place on a Tree(default Tree)

就能把该图表类似快捷方式的样子张贴到本文图 1 所示的 Graphs,Default tree 栏目中。然而你也能自己在菜单栏的 Graph Trees中新建定制栏目,然后用相同的方法把新建的统计图往你所定制的栏目中放。

Cacti 的强大功能不单止可以通过 snmp 获取装有 Linux,Unix 操作系统服务器的运行状态,还能监控 Windows 系统服务器。跟诸如 Cisco,Linksys, 路由器,交换机,无线 AP 。或者其他支持 snmp 管理协议的网络设备。





回页首


下边我们举出实应用的例子。
设备结构:

  1. 网络入口路由器 Linksys RV042
    Linksys 的一款路由器,主要负责,外网接入路由,防火墙,以及端口映射。
  2. server1 WEB 应用服务器
    操作系统: Linux RedHat As4
    Eth0,Eth1 双网卡工作。前者接入路由器映射至外网。后者直连至 server2
    进行反向代理 ( proxy ) 以及数据备份以及同步等功能。
    IP 分别为 192.168.3.2 以及 192.168.10.2
  3. server2储存,FTPWEB 应用服务器
    操作系统: Windows2003 r2
    与 server1 网络环境相仿,双网卡工作。
    IP 分别为 192.168.3.3 以及 192.168.10.3

Cacti 已经配置完成,安装在 server1 上。第一台添加到监控表里边的是路由器 RV042 。打开路由器的 WEB 设置页面,勾选并启用 SNMP 功能。如图 9

Send SNMP Trap to: 192.168.3.2( server1 的 IP )

然后其他输入框按照默认留空即可,但需留意 Get Community Name: 所填写的组名: public 。保存设置。



保存设置

登陆 Cacti ,console 菜单栏中点击 Devices。跟前边图 1 至 8 添加新设备以及创建统计图表的步骤相同

Description 设备名称 ( 我们这里自定为 Linksys RV042)

Hostname 设备地址 ( 路由器的地址 192.168.3.1 )

Host Template 设备的类型 ( 选择 ucd/net SNMP Host 或者是 Cisco Router )

然后其他按照默认即可。

创建成功后,也会在该页面左上方出现所新建设备的 Linksys RV042 SNMP Information

点击隔壁 *Create Graphs for this Host 创建监控图表



创建监控图表

路由器 RV042 的端口以及 IP 等数据都取出来了。

勾选好所要监控的端口,点击 create 就能完成路由器监控图表的建立。

Cacti 运行在 Server1 上,所以配置方式跟前边所介绍是一样的,这里就掠过了。但顺带说一下,如果环境中还存在 Server3,而且跟 Server1 一样都是 Linux 系统,需要添加到 cacti 里头。哪么只需在该服务器上修改 snmp 配置,修改的内容也跟 server1 上几乎一样,不同的是。

编辑 /etc/snmp/snmpd.conf 的时候,原来填 127.0.0.1 ( 本机地址 ) 的地方换成 Cacti 所在运行的服务器 IP,即 server1: 192.168.3.2

  1. com2secnotConfigUser default public
    改为:com2secnotConfigUser 192.168.3.2(server1 地址) public
  1. access  notConfigGroup ""  any   noauth    exact  systemview  none none

改为:accessnotConfigGroup""anynoauthexact all none none

  1. #view all    included  .1         80
    将前面的 # 注释 去掉。
  1. 保存退出 :wq

重新启动 snmp 服务

# service snmpd restart

在 Cacti ,Devices中创建新设备,

填写 Server3 IP 地址,设备类型: ucd/net SNMP Host , 创建图表 , 完成。

到 Server2 的 win2003 系统了。

  1. 给 Windows 安装 SNMP 协议支持

    通常由于 SNMP 是一个建议关闭的协议 ( 因为有安全漏洞 ),所以 Windows 2003 不是缺省安装的。但 Cacti 用的就是 SNMP 协议,而且服务器处于内网中,有路由器防火墙对外隔着,所以装吧。

    控制面板– > 添加或删除程序– > 添加 / 删除 Windows 组件– > 管理和监视工具– > 简单网络管理协议 (SNMP)

  2. 修改 SNMP 的安全设置

     这台服务是被监控方,所以需要像刚才举例的 Server3 那样修改 SNMP 的配置。否则在 server 1 里头的 Cacti 则永远也收不到 SNMP 的消息。打开 Services 窗口并找到 SNMP 服务,打开右键菜单,选择属性。在打开的窗口中找到“安全”选项页。在选项页中有两部分设置,上半部分是指 SNMP 服务接受哪种 Community 指示字,缺省情况下 Windows 2003 不对任何指示字反馈,我一般都添加设置为。

    团体名称:public, 权限:只读

    下半部分添加可信任的主机名、IP 或是 IPX 名称。这里就也是添加 server1 的 IP 192.168.3.2 如图 11




    修改 SNMP 的安全设置

  3. 修改防火墙

    如果你安装了防火墙,还要记得打开 UDP 161 端口。

    完成后重新启动 SNMP server 服务

    登陆 Cacti 点 Devices 创建新设备。

    填写 Server2 IP 地址,设备类型:Windows 2000/XP hosts

    从 Windows 上获取到的 SNMP 信息也挺多,CPU,内存,虚拟内存,硬盘空间使用,网卡流量,一应俱全。最后创建图表 , 完成。




    修改防火墙





回页首


Cacti 真是一个世界。在正式使用 Cacti 接管原来的 MRTG 负责服务器状态监控的这段时间,我所能最深刻感受到的,不止是它漂亮的界面跟图表。而且是对监控设备的创建,跟管理,都有着史无前例地简单,高效。作为系统管理员,我真相当感激 Cacti 的作者能开发出这一套如此拔尖的监控程序。

虽然它所运行的 PHP 环境以及 RRDtool 在前期配置的时候要花好多的时间跟功夫,

但也未尝不是一个新的选择。试想一下,你只需一阵子的功夫在一台服务器上把环境配好,Cacti 装好。以后,无论你要再添更多的服务器,要了解他们的”情绪”,就只需简单地在浏览器上登陆 Cacti – > 新建设备 – > 新建图表。区区几步,整整有条的服务器列表,CPU,硬盘,网卡等等读数的曲线都能一清二楚地显示在你面前。

当然! Cacti 带来的强大功能以及方便还远不止这些,就交由大家之后去使用,去体验了。



阅读(730) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~