本文轉載自:http://www.ibm.com/developerworks/cn/linux/l-cn-cacti/index.html?ca=drs-cn-0430
級別: 初級
范 綽耘 (qbanke@163.com), 系統(tǒng)管理員, 廣州市摩網(wǎng)信息技術有限公司
2009 年 4 月 30 日
本文主要介紹說明用于支持 Cacti 運作的 PHP+RRDtool 環(huán)境的詳細配置方法。使其能集中式監(jiān)控多臺,不同平臺類型的服務器。以及支持 SNMP 網(wǎng)絡設備運作狀態(tài)。前言
Cacti 功能類似于我們所熟悉的 MRTG 。 MRTG 確實是非常好的老牌系統(tǒng)監(jiān)控工具,但由于他歷史實在很久了,使得許多功能以及配置等方面都比較落后。實現(xiàn)得比較費勁,管理起來很麻煩。比如我有幾百個被監(jiān)測點,分布在不同的機房,而且我需要將這些服務器和網(wǎng)絡設備分類,這樣的話我就要將這些被監(jiān)測點放在不同的 mrtg 配置文件中,運行多個 crontab,而且還要自己寫了一些 html 頁面對其進行管理。
Cacti 其實是一套 php 程序,一個 rrdtool 工具。它運用 snmpget 采集數(shù)據(jù),使用 rrdtool 繪圖。界面非常漂亮,它提供了強大的數(shù)據(jù)管理和用戶管理功能,一張圖是屬于一個 host 的,每一個 host 又可以掛載到一個樹狀的結構上。
用戶的管理上,作為一個開源軟件,它做到為指定一個用戶能查看的“樹”、host、甚至每一張圖,還可以與 LDAP 結合進行用戶的驗證。 Cacti 還提供自己增加模板的功能,讓你添加自己的 snmp_query 和 script 。功能相當強大!
本文前半部分是教程,主要介紹了 Cacti 以及其 PHP 運行環(huán)境的安裝配置。后半部分將實際舉例如何使用 Cacti 監(jiān)控諸如 Linux,Windows 。以及支持 SNMP 管理協(xié)議的路由器等網(wǎng)絡設備。
Cacit 運行環(huán)境需要 PHP + Mysql + rrdtool 以及 snmp 工具的支持。
下邊是本次配置需要用到的軟件。
Catci:
- cacti-0.8.6j.tar.gz
- rrdtool-1.2.27.tar
- 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
PHP:
- php-5.2.6.tar.gz
- curl-7.15.0.tar.gz
- freetype-2.1.9.tar.gz
- gettext-0.16.1.tar.gz
- gd-2.0.35.tar.gz
- jpegsrc.v6b.tar.gz
- libart_lgpl-2.3.17.tar.gz
- libpng-1.2.18.tar.gz
- libxml2-2.6.32.tar.gz
- ZendOptimizer-3.3.0a-linux-glibc21-i386.tar.gz
- zlib-1.2.3.tar.gz
- libxml2-2.6.32.tar.gz
Apache:
httpd-2.2.6.tar.gz
Mysql:
mysql-5.1.24-rc.tar.gz
開始構建完整的 PHP 運行的環(huán)境,我們以全新安裝的 RedHatAs4 updata4 操作系統(tǒng)環(huán)境為例。
首先編譯安裝Apache httpd server
- # tar zxvf httpd-2.2.6.tar.gz
- # cd httpd-2.2.6
- # ./configure --prefix=/usr/local/apache26 --enable-module=so --with-mpm=worker --enable-module=rewrite
- # make && make install
第二步安裝 PHP+GD 等所需的支持插件
編譯安裝libxml
- # tar zxvf libxml2-2.6.32.tar.gz
- # cd libxml2-2.6.32.tar.gz
- # ./configure --prefix=/usr/local/libxml2/
- # make && make install
編譯安裝zlib
- # tar zxvf zlib-1.2.3.tar.gz
- # cd zlib-1.2.3
- #./configure --prefix=/usr/local/zlib2/
- # make && make install
編譯安裝jpeg支持
- # tar -zxf jpegsrc.v6b.tar.gz
- # cd jpeg-6b/
- # ./configure --prefix=/usr/local/jpeg6
- # make
- # make install-lib
- # make install
( 該版本的 jpeg 在實際安裝過程中,make install 的時候會出現(xiàn)好幾個找不到目錄,或目錄不存在的 error 。只需按照提示人手創(chuàng)建缺失目錄,然后再令其 make install 直到無任何錯誤提示且順利完成為止。 )
編譯安裝 libpng
- # tar zxvf libpng-1.2.18.tar.gz
- # cd libpng-1.2.18.tar.gz
- #cp scripts/makefile.gcmmx makefile
- #./configure --disable-shared --prefix=/usr/local/libpng2/
- # make && make install
編譯安裝 freetype
- # tar zxvf freetype-2.1.9.tar.gz
- # cd freetype-2.1.9
- #./configure --disable-shared --prefix=/usr/local/freetype2/
- # make && make install
編譯安裝 libart_lgpl
- # tar zxvf libart_lgpl-2.3.17.tar.gz
- # cd ibart_lgpl-2.3.17
- #./configure --disable-shared --prefix=/usr/local/libart/
- # make && make install
編譯安裝 gettext
- # tar zxvf gettext-0.16.1.tar.gz
- # cd gettext-0.16.1
- # ./configure --prefix=/usr/local/gettext/
- # make && make install
編譯安裝 gd 庫 :
- # tar zxvf gd-2.0.35.tar.gz
- # cd gd-2.0.35
- # ./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
- # make && make install
編譯安裝 Curl 支持
- # tar zxvf curl-7.15.0.tar.gz
- # cd curl-7.15.0
- # ./configure --prefix=/usr/local/curl
- # make && make install
編譯安裝 PHP
- # tar zxvf php-5.2.6.tar.gz
- # cd php-5.2.6
- # ./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
- # make && make install
- # cp php.ini-dist /usr/local/php/lib/php.ini ( 拷貝 PHP 配置文件至安裝目錄 )
- # vi /usr/local/apach26/conf/httpd.conf ( 修改 apache 配置文件并加載 PHP 支持 )
要改的有如下幾處
- 一般都在 #AddType application/x-tar .tgz 下加一行 :
#LoadModule php5_module modules/libphp5.so AddType application/x-httpd-php .php
- 如果你搜索其它地方?jīng)]有以下這行 :
LoadModule php5_module modules/libphp5.so
請把上面的 # 號去掉,還有找到 DirectoryIndex index.html index.html.var 在后面加 index.php 讓它把 index.php 做為默認頁
- 保存 httpd.conf 文件 .
啟動 apache # /usr/local/apache2/bin/apachectl start 如果沒有出錯 , 寫一個測試頁放到你網(wǎng)頁目錄下 . 訪問就應該可以看到 php 的版本等信息了 !
用 ZendOptimizer 加速 PHP
- #tar zxvf ZendOptimizer-2.5.3-linux-glibc21-i386.tar.gz
- #cd ZendOptimizer-2.5.3-linux-glibc21-i386
- #./install.sh
安裝的時候注意輸入正確的安裝 apache 的路徑等內容 ! 安裝完畢 , 再看看 phpinfo 頁面的 zend 選項就發(fā)現(xiàn)了 !!
安裝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 ( 指定數(shù)據(jù)文件目錄 ) --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 啟動服務至系統(tǒng) ) # chmod 777 /etc/init.d/mysql ( 賜予可執(zhí)行權限 ) # chown mysql:mysql /data/mysql ( 設置數(shù)據(jù)文件目錄屬性 )
設置數(shù)據(jù)文件目錄屬性這一步相當重要,許多朋友第一次使用 tar 包安裝 Mysql 的時候就因該目錄權限問題導致 Mysql 無法啟動。相當頭大 .
# /usr/local/mysql/bin/mysql_install_db ( 初始化數(shù)據(jù)庫 ) # service mysql start ( 啟動 Mysql) # /usr/local/mysql/bin/mysqladmin -u root -p password 'xxxxx' ( 設置管理員密碼 xxx 默認值為空 )
好了,至此 mysql 安裝完畢 .
這樣構建 Cacit 運行的 PHP+Mysql 環(huán)境就基本上完成了。
下邊開始安裝 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 時出現(xiàn)下面這個錯誤
configure: error: Please fix the library issues listed above and try again.
|
表明系統(tǒng)有功能缺失,需安裝 libart_lgpl-devel.rpm 這個包
如果還是提示聽樣的錯誤,有可能是找不到 FreeType
把 /usr/local/freetype2/lib/pkgconfig 下的 .pc 文件拷貝到 /usr/lib/pkgconfig 下即可
如果 make install 時出現(xiàn) [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 ( 查看系統(tǒng)中有否已經(jīng)裝有所需的軟件 ) 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 參數(shù)。
以上所需的 rpm 安裝包都能在 RedHatAs4 安裝光盤上找到 .
至此,Cacti 所需的運行環(huán)境都已經(jīng)準備好了,接下來開始進行安裝以及配置。
稍微修改系統(tǒng)中 snmp 的配置
# vi /etc/snmp/snmpd.conf
- com2secnotConfigUser default public
改為:com2secnotConfigUser 127.0.0.1 public
- access notConfigGroup "" any noauth exact systemview none none
改為:accessnotConfigGroup""anynoauthexact all none none
- #view all included .1 80
將前面的 # 注釋 去掉。 保存退出 :wq
- 重新啟動 snmp 服務
# service snmpd restart
安裝 / 配置 cacti
- # tar zxvf cacti-0.8.6j.tar.gz
- # mv cacti-0.8.6j /data/web_server/admin/cacti
( 把 cacit 剪切到自定的 web 目錄下 )
- # chmod 777 – Rf /data/web_server/admin/cacti
( 設置目錄權限 , 避免因權限問題而導致目錄無法寫入 )
- # cd /data/web_server/admin/cacti
在Mysql中創(chuàng)建一個新的庫,并導入cacti 目錄中cacti.sql 并設置好該表的用戶權限,然后編輯 cacti 的數(shù)據(jù)庫配置文件。
- # vi /data/web_server/admin/cacti/include/config.php
$database_type= “ mysql ” ; $database_default = “數(shù)據(jù)庫名稱” ; $database_hostname = “默認是 localhost ” ; $database_username = “用戶名” ; $database_password = “密碼” ;
更改用戶、密碼等項與上面給出的對應保存退出
- # crontab – e (加入自動執(zhí)行規(guī)則,每 5 分鐘執(zhí)行。)
*/5 * * * * /usr/local/php/bin/php /data/web_server/admin/cacti/poller.php \ > /dev/null 2>&1 (其中 /usr/local/php/bin/php 這個為 php 的安裝目錄)
- 保存退出:wq
- 在 apache 上設置好 cacti 所在 web 目錄
- 打開瀏覽器 http://youhostname/cacti
- 進入 cacti 的初始設置頁面
第一次默認登陸賬號:admin 密碼 admin 登陸后它就會讓你立即修改新密碼
說一下 cacti 設置頁中各項“零件”的路徑。
當修改好新密碼進入,第一個顯示出的頁面就是讓你設置 rrdtool,snmp 等工具的路徑。這是個很重要的環(huán)節(jié),必須無誤,要不然 cacti 將無法生成出統(tǒng)計圖。
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
默認的配置中會出現(xiàn)許多“ NotFound ”
按照上邊的路徑把“ NotFound ”的項都重新填上。
手動運行一次
/usr/local/php/bin/php /data/web_server/admin/cacti/poller.php > /dev/null 2>&1
你就能在頂上 graphs 中 localhost 里頭看到本機的內存,CPU,登陸用戶等的統(tǒng)計圖 .
圖 1. Cacti 統(tǒng)計圖

但默認 Cacti 是沒有創(chuàng)建網(wǎng)卡流量的監(jiān)控圖的。要我們自己來加。
回到 console 菜單
選擇 Devices 監(jiān)控設備。
圖 2. 設備監(jiān)控
圖 3. 添加設備

然后點擊右上角的 Add 進行添加
Description 設備名稱 ( 可隨意輸入 )
Hostname 設備地址 ( 如果是本機就填 127.0.0.1 )
Host Template 設備的類型 ( 選擇 ucd/net SNMP Host )
然后其他按照默認即可,如下圖
圖 4. 添加的新設備

點 create 創(chuàng)建。
如果剛才填寫的地址無誤,創(chuàng)建成功后,會在該頁面左上方出現(xiàn)所新建設備的 SNMP Information
然后點擊隔壁醒目的 * Create Graphs for this Host 即開始創(chuàng)建監(jiān)控圖表
圖 5. 創(chuàng)建圖表-1
圖 6. 創(chuàng)建圖表-2

如圖 6,溝選你所要監(jiān)控的網(wǎng)卡以及 IP,點 create 。
這樣就完成了你所指定設備統(tǒng)計圖的創(chuàng)建。
圖 7. 添加的設備統(tǒng)計圖

點擊菜單中的 Graph Management 即可瀏覽到你剛才所創(chuàng)建的圖表,如圖 7 箭頭所示。
圖 8. 統(tǒng)計圖表

有一個小技巧,初次要求 cacti 創(chuàng)建指定設備的統(tǒng)計圖表,通過 Graph Management 進入圖 8 所示頁面時,統(tǒng)計表圖片會是一個 X ( 叉 ) 。這是因為在配置初期指定系統(tǒng)中每 5 分鐘執(zhí)所行的 php 語句還沒到點運作。要么你就等 5 分鐘,要么你就直接進入系統(tǒng)手動執(zhí)行:
/usr/local/php/bin/php /data/web_server/admin/cacti/poller.php > /dev/null 2>&
然后曲線表中就能出現(xiàn)第一個峰值,每 5 分鐘自動更新。 24 小時后,曲線圖就能完整地出現(xiàn)在你眼前。
回到圖 7 Graph Management 的界面勾選新建的圖表項,然后在下邊
Choose an action 框中選擇 Place on a Tree(default Tree)
就能把該圖表類似快捷方式的樣子張貼到本文圖 1 所示的 Graphs,Default tree 欄目中。然而你也能自己在菜單欄的 Graph Trees中新建定制欄目,然后用相同的方法把新建的統(tǒng)計圖往你所定制的欄目中放。
Cacti 的強大功能不單止可以通過 snmp 獲取裝有 Linux,Unix 操作系統(tǒng)服務器的運行狀態(tài),還能監(jiān)控 Windows 系統(tǒng)服務器。跟諸如 Cisco,Linksys, 路由器,交換機,無線 AP ?;蛘咂渌С?snmp 管理協(xié)議的網(wǎng)絡設備。
實際應用
下邊我們舉出實應用的例子。 設備結構:
- 網(wǎng)絡入口路由器 Linksys RV042。
Linksys 的一款路由器,主要負責,外網(wǎng)接入路由,防火墻,以及端口映射。
- server1 WEB 應用服務器
操作系統(tǒng): Linux RedHat As4 Eth0,Eth1 雙網(wǎng)卡工作。前者接入路由器映射至外網(wǎng)。后者直連至 server2 進行反向代理 ( proxy ) 以及數(shù)據(jù)備份以及同步等功能。 IP 分別為 192.168.3.2 以及 192.168.10.2
- server2儲存,FTP與WEB 應用服務器
操作系統(tǒng): Windows2003 r2 與 server1 網(wǎng)絡環(huán)境相仿,雙網(wǎng)卡工作。 IP 分別為 192.168.3.3 以及 192.168.10.3
Cacti 已經(jīng)配置完成,安裝在 server1 上。第一臺添加到監(jiān)控表里邊的是路由器 RV042 。打開路由器的 WEB 設置頁面,勾選并啟用 SNMP 功能。如圖 9
Send SNMP Trap to: 192.168.3.2( server1 的 IP )
然后其他輸入框按照默認留空即可,但需留意 Get Community Name: 所填寫的組名: public 。保存設置。 圖 9. 保存設置

登陸 Cacti ,console 菜單欄中點擊 Devices。跟前邊圖 1 至 8 添加新設備以及創(chuàng)建統(tǒng)計圖表的步驟相同
Description 設備名稱 ( 我們這里自定為 Linksys RV042)
Hostname 設備地址 ( 路由器的地址 192.168.3.1 )
Host Template 設備的類型 ( 選擇 ucd/net SNMP Host 或者是 Cisco Router )
然后其他按照默認即可。
創(chuàng)建成功后,也會在該頁面左上方出現(xiàn)所新建設備的 Linksys RV042 SNMP Information
點擊隔壁 *Create Graphs for this Host 創(chuàng)建監(jiān)控圖表 圖 10. 創(chuàng)建監(jiān)控圖表

路由器 RV042 的端口以及 IP 等數(shù)據(jù)都取出來了。
勾選好所要監(jiān)控的端口,點擊 create 就能完成路由器監(jiān)控圖表的建立。
Cacti 運行在 Server1 上,所以配置方式跟前邊所介紹是一樣的,這里就掠過了。但順帶說一下,如果環(huán)境中還存在 Server3,而且跟 Server1 一樣都是 Linux 系統(tǒng),需要添加到 cacti 里頭。哪么只需在該服務器上修改 snmp 配置,修改的內容也跟 server1 上幾乎一樣,不同的是。
編輯 /etc/snmp/snmpd.conf 的時候,原來填 127.0.0.1 ( 本機地址 ) 的地方換成 Cacti 所在運行的服務器 IP,即 server1: 192.168.3.2
- com2secnotConfigUser default public
改為:com2secnotConfigUser 192.168.3.2(server1 地址) public
- access notConfigGroup "" any noauth exact systemview none none
改為:accessnotConfigGroup""anynoauthexact all none none
- #view all included .1 80
將前面的 # 注釋 去掉。
- 保存退出 :wq
重新啟動 snmp 服務
# service snmpd restart
在 Cacti ,Devices中創(chuàng)建新設備,
填寫 Server3 IP 地址,設備類型: ucd/net SNMP Host , 創(chuàng)建圖表 , 完成。
到 Server2 的 win2003 系統(tǒng)了。
- 給 Windows 安裝 SNMP 協(xié)議支持
通常由于 SNMP 是一個建議關閉的協(xié)議 ( 因為有安全漏洞 ),所以 Windows 2003 不是缺省安裝的。但 Cacti 用的就是 SNMP 協(xié)議,而且服務器處于內網(wǎng)中,有路由器防火墻對外隔著,所以裝吧。
控制面板– > 添加或刪除程序– > 添加 / 刪除 Windows 組件– > 管理和監(jiān)視工具– > 簡單網(wǎng)絡管理協(xié)議 (SNMP)
- 修改 SNMP 的安全設置
這臺服務是被監(jiān)控方,所以需要像剛才舉例的 Server3 那樣修改 SNMP 的配置。否則在 server 1 里頭的 Cacti 則永遠也收不到 SNMP 的消息。打開 Services 窗口并找到 SNMP 服務,打開右鍵菜單,選擇屬性。在打開的窗口中找到“安全”選項頁。在選項頁中有兩部分設置,上半部分是指 SNMP 服務接受哪種 Community 指示字,缺省情況下 Windows 2003 不對任何指示字反饋,我一般都添加設置為。
團體名稱:public, 權限:只讀
下半部分添加可信任的主機名、IP 或是 IPX 名稱。這里就也是添加 server1 的 IP 192.168.3.2 如圖 11 圖 11. 修改 SNMP 的安全設置

- 修改防火墻
如果你安裝了防火墻,還要記得打開 UDP 161 端口。
完成后重新啟動 SNMP server 服務
登陸 Cacti 點 Devices 創(chuàng)建新設備。
填寫 Server2 IP 地址,設備類型:Windows 2000/XP hosts
從 Windows 上獲取到的 SNMP 信息也挺多,CPU,內存,虛擬內存,硬盤空間使用,網(wǎng)卡流量,一應俱全。最后創(chuàng)建圖表 , 完成。 圖 12. 修改防火墻

Cacti 真是一個世界。在正式使用 Cacti 接管原來的 MRTG 負責服務器狀態(tài)監(jiān)控的這段時間, 我所能最深刻感受到的,不止是它漂亮的界面跟圖表。而且是對監(jiān)控設備的創(chuàng)建,跟管理,都有著史無前例地簡單,高效。作為系統(tǒng)管理員,我真相當感激 Cacti 的作者能開發(fā)出這一套如此拔尖的監(jiān)控程序。
雖然它所運行的 PHP 環(huán)境以及 RRDtool 在前期配置的時候要花好多的時間跟功夫,
但也未嘗不是一個新的選擇。試想一下,你只需一陣子的功夫在一臺服務器上把環(huán)境配好,Cacti 裝好。以后,無論你要再添更多的服務器,要了解他們的”情緒”,就只需簡單地在瀏覽器上登陸 Cacti – > 新建設備 – > 新建圖表。區(qū)區(qū)幾步,整整有條的服務器列表,CPU,硬盤,網(wǎng)卡等等讀數(shù)的曲線都能一清二楚地顯示在你面前。
當然! Cacti 帶來的強大功能以及方便還遠不止這些,就交由大家之后去使用,去體驗了。
參考資料
范綽耘,服務器軟硬件技術架構、開源軟件的熱衷者,現(xiàn)任職廣州市摩網(wǎng)信息技術有限公司系統(tǒng)管理員,您可以通過開源中國社區(qū)網(wǎng)站 http://www.oschina.net 來聯(lián)系我。
|