歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> Linux文化

使用cacti監測系統性能


前言: 在CU的論壇上經常看到有人問MRTG的問題,還有很多的關於MRTG的精彩文章。MRTG的確是非常好的東東,但我認為它畢竟已經是一套很舊的軟件了,其作者在多年前就已經開發了RRDTool代替該軟件,現在已經發展得很成熟。既然有更好的選擇,為什麼我們還要用MRTG呢? 第一部分,介紹: 2004年我剛進某公司工作,當時我使用MRTG建立了一套系統,專門監測我們服務器和其它網絡設備的流量。 後來我想將其它的系統性能比如CPU負載、系統負載,網絡連接數等一起監測起來。我在網上查找了很多的資料,也實現了這些功能,但總覺得實現的太費勁,管理起來太麻煩了。比如我有幾百個被監測點,分布在不同的機房,而且我需要將這些服務器和網絡設備分類,這樣的話我就要將這些被監測點放在不同的mrtg配置文件中,運行多個crontab,而且自己還寫了一些html頁面對其進行管理。 後來有幸看到了abelyang兄寫的大作“rrdtool 教學”,裡面列舉了rrdtool的種種優點,於是我下定決心要將MRTG更換為rrdtool。 MRTG的優點:簡單、易上手,基本安裝完了之後只要更改一下配置文件即可。 缺點: 1、使用文本式的數據庫,數據不能重復使用; 2、只能按日、周、月、年來查看數據; 3、只能畫兩個DS(一條線、一個塊); 4、每取一次數據即需要繪圖一次,浪費系統資源; 5、無管理功能; rrdtool的優點:            1、使用rrd存儲格式,數據能重復使用,比如我可以將一個rrd文件中的數據與另一個rrd文件中的數據相加。            2、可以定義任意時間段畫圖,即你可以畫出一張半年以來的數據的圖,也可以畫出一張半小時以來的圖。            3、能畫任意個DS。            4、CDEF讓你能任意擺弄數據。 缺點:         1、rrdtool的作用只是存儲數據和畫圖,它沒有mrtg中集成的數據采集功能;         2、在命令行的使用非常復雜,參數極多。         3、無管理功能。 簡單的說,rrdtool就是一個強大的繪圖的引擎。 由於其非常復雜的命令,對用戶非常不友好,我一度想自己用php寫一套系統。幸運的是,半年前我找到了cacti(www.cacti.net)。對該工具我只有一個字形容:“great!”。 cacti其實是一套php程序,它運用snmpget采集數據,使用rrdtool繪圖。它的界面非常漂亮,能讓你根本無需明白rrdtool的參數能輕易的繪出漂亮的圖形。更難能可貴的是,它提供了強大的數據管理和用戶管理功能,一張圖是屬於一個host的,每一個host又可以掛載到一個樹狀的結構上。用戶的管理上,作為一個開源軟件,它居然做到為指定一個用戶能查看的“樹”、host、甚至每一張圖,還可以與LDAP結合進行用戶的驗證!我不由得佩服作者考慮的周到!Cacti還提供自己增加模板的功能,讓你添加自己的snmp_query和script!可以說,cacti將rrdtool的所有“缺點”都補足了! 最近在公司的內部培訓中,我為Cacti畫了兩張圖,裡面是cacti的架構和cacti的工作流程,現在也一並發上來。 [ 本帖最後由 joecen 於 2005-11-14 16:16 編輯 ]

圖片附件: [Cacti的架構] cacti架構.gif (2005-8-15 15:40, 16.44 K)

screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='點擊在新窗口查看全圖\nCTRL+鼠標滾輪放大或縮小';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/cacti____.gif');}" onmousewheel="return imgzoom(this);">

圖片附件: [Cacti的工作流程] cacti工作流程.gif (2005-8-15 15:39, 19.21 K)

screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='點擊在新窗口查看全圖\nCTRL+鼠標滾輪放大或縮小';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/cacti________.gif');}" onmousewheel="return imgzoom(this);">

第二部分:Cacti的安裝 該安裝文檔是我參照www.cacti.net上的官方文檔進行安裝後,總結出來的。平台是Linux或FreeBSD。 1、安裝mysql cacti從0.4.8g版本開始支持mysql5數據庫 (2006/1/12更新) 下載源碼: http://www.signal42.com/mirrors/mysql/Downloads/MySQL-4.0/mysql-4.0.23.tar.gz for linux: http://www.signal42.com/mirrors/mysql/Downloads/MySQL-4.0/mysql-standard-4.0.23-pc-linux-i686.tar.gz for freebsd47: http://www.signal42.com/mirrors/mysql/Downloads/MySQL-4.0/mysql-standard-4.0.22-unknown-freebsd4.7-i386.tar.gz 上面的鏈接已經失效,請到 http://dev.mysql.com/downloads/mysql/4.1.html 或 http://www.mysql.com 下載mysql數據庫 安裝:

CODE:[Copy to clipboard]shell>; groupadd mysql shell>; useradd -g mysql mysql shell>; cd /usr/local shell>; gunzip < /PATH/TO/MYSQL-VERSION-OS.tar.gz | tar xvf - shell>; ln -s FULL-PATH-TO-MYSQL-VERSION-OS mysql shell>; cd mysql shell>; scripts/mysql_install_db --user=mysql shell>; chown -R root . shell>; chown -R mysql data shell>; chgrp -R mysql . shell>; bin/mysqld_safe --user=mysql & ./bin/mysqladmin -u root password "yourpasswd" 基於安全的原因,為root用戶設置密碼才能讓root用戶登陸mysql,不然會有2002錯誤出現 建立啟動腳本:

CODE:[Copy to clipboard]cp ./support-files/mysql.server /etc/init.d/mysql ln -s ../init.d/mysql S85mysql ln -s ../init.d/mysql K85mysql2、安裝apache 下載: http://apache.freelamp.com/httpd/httpd-2.0.54.tar.bz2 安裝:

CODE:[Copy to clipboard]./configure --prefix=/www --enable-so make && make install 建立啟動腳本

CODE:[Copy to clipboard]cp /www/bin/apachectl /etc/init.d/httpd cd /etc/rc3.d ln -s ../init.d/httpd S85httpd ln -s ../init.d/httpd K85httpd 啟動 /www/bin/apachectl start 3、安裝php 下載: http://us4.php.net/get/php-4.3.10.tar.gz/from/cn2.php.net/mirror 安裝:

CODE:[Copy to clipboard]/configure --prefix=/www/php --with-apxs2=/www/bin/apxs --with-config-file-path=/www/php --enable-sockets --with-mysql=/usr/local/mysql --with-zlib-dir=/usr/include --with-gd make && make install cp php.ini-dist /www/php/php.ini vi /www/conf/httpd.conf 加入: ###############for php and cacti################### AddType application/x-tar .tgz AddType application/x-httpd-php .php AddType image/x-icon .ico DirectoryIndex index.php index.html index.html.var #######################over######################## ../bin/apachectl restart 4、設置mysql

CODE:[Copy to clipboard]# mysql -u root -prootroot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 to server version: 4.0.23-standard Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>; create database cactidb; Query OK, 1 row affected (0.00 sec) mysql>; grant all on cactidb.* to root; Query OK, 0 rows affected (0.01 sec) mysql>; grant all on cactidb.* to root@localhost; Query OK, 0 rows affected (0.01 sec) mysql>; grant all on cactidb.* to cactiuser; Query OK, 0 rows affected (0.00 sec) mysql>; grant all on cactidb.* to cactiuser@localhost; Query OK, 0 rows affected (0.01 sec) mysql>; set password for cactiuser@localhost=password('cactipw'); Query OK, 0 rows affected (0.00 sec) mysql>; exit 5、安裝rrdtool 下載: http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/rrdtool-1.0.x/rrdtool-1.0.50.tar.gz 然後 ./configure make && make install 即可 與mrtg相比,rrdtool自帶了gd庫,所以不用先安裝gd庫.(不過由於rrdtool自帶的gd庫不支持中文,所以rrdtool畫出來的圖也不能有中文,否則會出現亂碼). 注意:rrdtool1.2的版本由於已經不再自帶外部的lib庫(如cgilib,zlib等),所以需要從http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/libs/下載這些庫來安裝。建議還是使用1.0的版本,比較方便。 6、安裝net-snmp 幾乎所有的網絡設備和操作系統默認都安裝了snmp服務。 unix系統安裝的都是net-snmp或ucd-snmp(其實兩個都是同一組人寫的)。 如果沒有安裝snmp,可以到net-snmp.sourceforge.org上下載源碼編譯安裝。 我這裡說的安裝SNMP服務並不是要求安裝SNMPD,其實是Cacti需要用到net-snmp中的兩個命令――snmpwalk和snmpget進行數據的采集。 我們可以直接在系統中運行snmpwalk和snmpget看是否有該命令,如果有則不用安裝了。 7、安裝cacti 注意:寫該文檔時cacti的最高版本時0.8.6c,現在的最高版本是0.8.6f。由於0.8.6f以下的版本有SQL注入漏洞,請大家下載0.8.6f或以上的版本進行安裝。 下載: http://www.cacti.net/downloads/cacti-0.8.6c.tar.gz 安裝:

CODE:[Copy to clipboard]cp cacti-0.8.6c.tar.gz /www/htdocs tar xzvf cacti-0.8.6c.tar.gz mv cacti-0.8.6c cacti cd cacti導入表:

CODE:[Copy to clipboard]/usr/local/mysql/bin/mysql –u root –prootroot cactidb < cacti.sql chown –R cactiuser rra/ log/設置配置文件:

CODE:[Copy to clipboard]vi /www/htdocs/cacti/include/config.php $database_type = “mysql”; $database_default = “cactidb”; $database_hostname = “localhost”; $database_username = “cactiuser”; $database_password = “cactipw”;核對以上幾項是否正確

CODE:[Copy to clipboard]Crontab –u cactiuser –e 為cactiuser用戶加入 */5 * * * * /www/php/bin/php /www/htdocs/cacti/poller.php >; /dev/null 2>;&1 (不要使用root用戶運行上面的命令,否則要再運行一次chown –R cactiuser rra/ log/) 8、頁面設置: 在浏覽器上輸入: http://IP/cacti 進入cacti的初始設置頁面: 在這裡我們要輸入一些原始的信息: NEXT -》 輸入一些信息,如rrdtool、php、snmpwalk、snmpget的位置,使用ucd-snmp還是net-snmp等 -》 輸入原始的用戶和密碼:admin/admin -》 更改admin用戶的密碼 -》 點擊 Save 安裝完成!!! 現在可以在浏覽器中進入Cacti的世界了!

第三部分,cacti的部分界面

圖片附件: [樹狀結構顯示圖形] 樹狀結構.JPG (2005-8-15 15:47, 71.98 K)

screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='點擊在新窗口查看全圖\nCTRL+鼠標滾輪放大或縮小';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/_________84251124092063.jpg');}" onmousewheel="return imgzoom(this);">

圖片附件: [主控制台] 主控制台.JPG (2005-8-15 15:51, 55.23 K)

screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='點擊在新窗口查看全圖\nCTRL+鼠標滾輪放大或縮小';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/_________44101124092291.jpg');}" onmousewheel="return imgzoom(this);"> 開始考慮到大家都用過MRTG,應該對snmp有所了解,所有沒有將snmp的配置寫上來。現在發現有些朋友發貼說不能取到CPU和系統負載的數據,其原因應該是snmp設置默認沒有允許取這些數據造成的。下面是我對linux和FreeBSD下的net-snmp的一些簡單的配置。 一、Linux(RedHat)的配置 打開默認的/etc/snmp/snmpd.conf文件,更改如下配置: 1、查找以下字段:

CODE:[Copy to clipboard]#       sec.name  source          community com2sec notConfigUser  default       public將"comunity"字段改為你要設置的密碼.比如"public".                                                 將“default”改為你想哪台機器可以看到你的snmp信息,如10.10.10.10。 2、查找以下字段:

CODE:[Copy to clipboard]#### # Finally, grant the group read-only access to the systemview view. #       group          context sec.model sec.level prefix read   write  notif access  notConfigGroup ""      any       noauth    exact  all none none將"read"字段改為all.

CODE:[Copy to clipboard]#access  notConfigGroup ""      any       noauth    exact  systemview none none3、查找以下字段:

CODE:[Copy to clipboard]##           incl/excl subtree                          mask #view all    included  .1                               80將該行前面的"#"去掉. 保存關閉. 4、運行/etc/init.d/snmpd start命令運行snmpd. 最後運行netstat -ln查看161端口是否打開了. 二、FreeBSD 如果使用port安裝net-snmp,默認的配置文件應該是在/usr/local/share/snmp/snmpd.conf(沒有默認的文件)。 可以建立一個簡單的配置文件,如:

CODE:[Copy to clipboard]syslocation  YourDefineName syscontact  YourEmailAddress sysservices 77 rocommunity  public  (請更改) load  12 12 12然後運行snmpd,netstat 看是否打開了161端口。 上述用法只針對默認的安裝,如果你是自定義的安裝請依照你的安裝目錄來設置。 我自己做的圖:

圖片附件: CPU負載.JPG (2005-8-15 15:56, 46.8 K)

screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='點擊在新窗口查看全圖\nCTRL+鼠標滾輪放大或縮小';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/cpu____.jpg');}" onmousewheel="return imgzoom(this);">

圖片附件: squid命中率.JPG (2005-8-15 15:56, 47.3 K)

screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='點擊在新窗口查看全圖\nCTRL+鼠標滾輪放大或縮小';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/squid______.jpg');}" onmousewheel="return imgzoom(this);">

Cacti雖然只是一套開源軟件,但我覺得它比起其它的商業管理軟件來說真的是毫不遜色,而MRTG根本就無法與其相比,希望大家能好好使用。 真心希望在論壇上看到討論得最多的是Cacti和RRDTool而不只是MRTG。 參考: http://bbs.chinaunix.net/forum/v ... p;highlight=RRDTOOL http://www.cacti.net/downloads/docs/html/install_unix.html cacti的使用文檔: http://www.cacti.net/downloads/docs/html/ Cacti FAQ: http://www.cacti.net/downloads/docs/html/faq.html


摘自:chinaunix.net


Copyright © Linux教程網 All Rights Reserved