Cacti是一套基於PHP,MySQL,SNMP及RRDTool開發的網絡流量監測圖形分析工具。Cacti是通過 snmp get來獲取數據,使用 RRDtool繪畫圖形,而且你完全可以不需要了解RRDtool復雜的參數。它提供了非常強大的數據和用戶管理功能,可以指定每一個用戶能查看樹狀結構、host以及任何一張圖,還可以與LDAP結合進行用戶驗證,同時也能自己增加模板,功能非常強大完善。界面友好。軟件 Cacti 的發展是基於讓 RRDTool 使用者更方便使用該軟件,除了基本的 Snmp 流量跟系統資訊監控外,Cacti 也可外掛 Scripts 及加上 Templates 來作出各式各樣的監控圖。
Cacti是用php語言實現的一個軟件,它的主要功能是用snmp服務獲取數據,然后用rrdtool儲存和更新數據,當用戶需要查看數據的時候用rrdtool生成圖表呈現給用戶。因此,snmp和rrdtool是cacti的關鍵。Snmp關系着數據的收集,rrdtool關系着數據存儲和圖表的生成。即如果想監控一台主機,需要在被監控主機上安裝net-snmp相關軟件包,在監控主機上安裝rrdtool和cacti。
Mysql配合PHP程序存儲一些變量數據並對變量數據進行調用,如:主機名、主機ip、snmp團體名、端口號、模板信息等變量。
通過snmp抓到的數據不是存儲在mysql中,而是存在rrdtool生成的rrd文件中(在cacti根目錄的rra文件夾下)。rrdtool對數據的更新和存儲就是對rrd文件的處理,rrd文件是大小固定的檔案文件(Round Robin Archive),它能夠存儲的數據筆數在創建時就已經定義。
利用cron定期執行php腳本代碼,通過snmp讀取指定監控項目的snmp信息,然后將結果保存到rrdtool數據文件中。在web監控界面中通過php讀取rrdtool並生成指定監控項目和指定時間段的監控曲線圖。
Data Retrieval
Cacti首先要做的工作就是收集數據,cacti使用Poller(輪詢器)收集數據。Poller是操作系統scheduler的擴展,如在類Unix系統中的crontab。現在的IT設施中會有許多不同的設備,如服務器、網絡設備等,cacti主要使用SNMP協議來從遠端的設備上收集數據,所有可以使用SNMP協議的設備都可以被cacti監控。
Data Storage
存儲收集到的數據有許多方法,可以使用數據庫、平面文件等,cacti使用的是RDDTool。RRD是Round Robin Database(環形數據庫)的縮寫,RRD用來存儲和顯示時間序列數據,如網絡帶寬、機房溫度、服務器負載等,RRD使用非常緊湊的方式存儲數據,數據不會隨着時間的推移而增大,RRD還可以生成美觀的圖形。這些特性使得cacti沒有存儲需求。RRD也做一席位其他的工作,如RRD會將原始數據與已整合的數據進行合並,以使得歷史數據的存儲節省空間,RRD支持的整合功能包括:AVERAGE, MAXIMUM, MINIMUM和LAST。
Data Presentation
Cacti最大的一個特點是內置了RRDTool畫圖功能,將其與通用的web服務器相結合,可以實現在任意平台上使用瀏覽器就可以查看監控畫面。
安裝RRDTool和SNMP
#安裝RRDTool yum install rrdtool rrdtool-devel rrdtool-php rrdtool-perl #安裝 snmp,因為此事例中監控和被監控主機是同一台,所以在此主機中安裝net-snmp相關軟件包 yum -y install net-snmp* #安裝其他依賴,Spine依賴 yum -y install mysql-devel openssl-devel #啟動snmp service snmpd start #開機啟動snmp chkconfig snmpd on
下載Cacti和Spine
Cacti: wget http://www.cacti.net/downloads/cacti-0.8.8h.tar.gz
Spine: wget http://www.cacti.net/downloads/spine/cacti-spine-0.8.8h.tar.gz
由於默認cmd.php來輪詢數據,速度會很慢,特別是在監控節點比較多的情況下,cmd.php就更顯不足了,因此我們采用Spine來輪詢數據。cacti-spine是一個由C語言開發的,用於替代cmd.php的快速獲取速度的引擎。
#解壓cacti,需要使用sql tar -xzf cacti-0.8.8h.tar.gz
MySQL中創建給Cacti使用的數據庫,帳號等信息,並導入Cacti數據表信息
#登錄 mysql -u root -p #創建數據庫 create database if not exists 數據庫名 default charset utf8 COLLATE utf8_general_ci; #創建用戶,並設置對數據庫的訪問權限 grant all on 數據庫名.* to '用戶名'@'%' identified by '密碼'; #刷新系統授權表,使設置生效 flush privileges; #導入cacti數據庫文件 use 數據庫名 source 解壓后的cacti目錄/cacti.sql
安裝Cacti
#把已經解壓的 cacti-0.8.8h 挪到 nginx 指定的網站目錄,可以作為一個網站,也可以作為一個網站目錄 mv cacti-0.8.8h /網站目錄/cacti #修改cacti的MySQL配置信息 vim /網站目錄/cacti/include/config.php
#如果用的cacti作為一個網站,非某網站的子目錄,需要修改include/global.php,否則一直跳轉url,且跳轉地址錯誤
vim /網站目錄/cacti/include/global.php #把 $url_path = '/cacti/' 改為 $url_path = '/';
#修改 Nginx 配置,添加 cacti 網站 vim /Nginx配置文件路徑/nginx.conf #重啟 Nginx service nginx restart
訪問Cacti
#會提示安裝,安裝完登錄,初始帳號密碼都是 admin http://xxx.xxx.xxx/
安裝Spine
#編譯安裝Spine
tar -xzf cacti-spine-0.8.8h.tar.gz cd cacti-spine-0.8.8h ./configure make && make install #拷貝配置文件 cp /usr/local/spine/etc/spine.conf.dist /etc/spine.conf #修改配置文件中的給Spine使用的數據庫信息 vim /etc/spine.conf
測試Spine
#執行此命令會輸出如下:
#SPINE: Using spine config file [/etc/spine.conf] #SPINE: Version 0.8.8h starting #SPINE: Time: 0.1129 s, Threads: 5, Hosts: 2 /usr/local/spine/bin/spine
配置Cacti與Spine
#cacti的web配置界面選擇setting settings->paths->Spine Poller File Path [/usr/local/spine/bin/spine] settings->poller->Poller Type [spine] console->settings->poller->Maximum Threads per Process [5]
定時采集,每分鍾采集一次
#把如下內容加入crontab
* * * * * /PHP執行文件所在目錄/php /cacti網站所在目錄/poller.php
配置被監控主機的snmp
參考:http://www.cnblogs.com/JohnABC/p/6073445.html
添加被監控主機
添加完主機,如果成功,則可以通過snmpget獲取到可以監控的項(與主機模版相關的“數據查詢”、“圖形模版”)。必須至少選擇一個數據查詢或圖形模板與新設備關聯,否則無法在下一步創建圖表。如果沒有可用的圖形模板或數據查詢適用設備,可以官網查詢模板庫或自己創建。
cacti 是時間序列展示工具
nagios 狀態監控工具
snmp 有三個版本。被監控端啟動snmp服務,監聽snmpget請求,根據請求響應指定結果,有CPU,內存等信息。中間認證機制是靠community(共同體)實現的。監控端:“老子是aaa團伙的,你要是認可aaa團伙就給放行”,被監控端:“aaa團伙我放心”。community相當於密碼。
snmp與MIB庫。
a