開源監控Cacti的架構及應用
一:cacti 的簡介
二:Cacti 的特點以及優點
三:Cacti 所監控的對象
四:監控的步驟
五:snmp 的工作原理
六:cacti 架構及應用
一:Cacti 的簡介:
Cacti是通過 snmpget來獲取數據,使用 RRDtool繪畫圖形,而且你完全可以不需要了解RRDtool複雜的參數。它提供了非常強大的數據和用戶管理功能,可以指定每一個用戶能查看樹狀結構、host以及任何一張圖,還可以與LDAP結合進行用戶驗證,同時也能自己增加模板,功能非常強大完善。界面友好。
Cacti 的發展是基於讓 RRDTool 使用者更方便使用該軟件,除了基本的 Snmp 流量跟系統資訊監控外,Cacti 也可外掛 Scripts 及加上 Templates 來作出各式各樣的監控圖。
cacti是用php語言實現的一個軟件,它的主要功能是用snmp服務獲取數據,然後用rrdtool儲存和更新數據,當用戶需要查看數據的時候用rrdtool生成圖表呈現給用戶。因此,snmp和rrdtool是cacti的關鍵。Snmp關係着數據的收集,rrdtool關係着數據存儲和圖表的生成。
Mysql配合PHP程序存儲一些變量數據並對變量數據進行調用,如:主機名、主機ip、snmp團體名、端口號、模板信息等變量。
snmp抓到數據不是存儲在mysql中,而是存在rrdtool生成的rrd文件中(在cacti根目錄的rra文件夾下)。rrdtool對數據的更新和存儲就是對rrd文件的處理,rrd文件是大小固定的檔案文件(Round Robin Archive),它能夠存儲的數據筆數在創建時就已經定義。
二:Cacti 的特點以及優點:
1、開源
1,自由發行
2,開放源代碼
3,運行高效
2、跨平臺
支持的平臺redhat 、windows 、solaris、centos 、suse
3、界面友好
圖形豐富 各種模板 自定義模板
4、可擴展
支持二十種的插件,豐富的插件資源,大大提高了cacti的功能。
三:Cacti 所監控的對象:
1、服務器cpu 、內存、磁盤、進程、連接數
2、Web、 mail 、ftp 數據庫 、中間件
3、網絡接口流量、轉發速率、丟包率
4、網絡設備性能 、配置文件 、路由數
5、安全設備性能、連接數、電源、溫度
6、機房運行環境:電流、電壓、溼度等
四:監控的步驟:
1,如何獲取數據?
命令:ping ssh telnet
腳本:編輯相應的腳本測試被監控主機的狀態
Snmp協議:
SNMP(Simple Network Management Protocol,簡單網絡管理協議)的前身是簡單網關監控協議(SGMP),用來對通信線路進行管理。隨後,人們對SGMP進行了很大的修改,特別是加入了符合Internet定義的SMI和MIB:體系結構,改進後的協議就是著名的SNMP。SNMP的目標是管理互聯網Internet上衆多廠家生產的軟硬件平臺,因此SNMP受Internet標準網絡管理框架的影響也很大。
2,如何存儲數據?
數據的存儲是靠rrd數據庫來實現的,也叫環狀數據庫,數據庫格式以.rrd結尾。數據庫中存放的不是直接收集到的信息,而是通過聚合函數聚合之後的數據,默認每隔5分鐘,收集一次信息,也可以每隔5秒鐘收集一次信息,這叫做pdp。通過聚合之後的數據存放到rrd表格中叫做rra,rrd表格是由數據庫管理,這裏數據庫也叫做數據源,而數據庫的創建是靠rrdtool工具完成的。
Rrdtool 創建數據庫 更新數據庫 繪圖
3,如何展示以及報警?
圖形的展示,以及報警是通過基於web頁面的cacti這個軟件來實現的,報警的方式有發送郵件、msn消息、飛信消息。
五:Snmp的工作原理:
1、三層架構:第一層叫網管工作站簡稱nms ,第二層叫做agent ,也就是被監管的設備,第三層就是數據庫。
2、原理:
agent 把收集到的信息放到數據庫中,nms把要請求的數據的信息提交給agent ,nms與agent 打交道的方式有GetRequest 、 GetNextRequest、 SetRequest、 GetResponse、trap 向數據庫中收集數據,然後把數據提交給nms。
GetReques:請求得到這個對象本節點相關信息
GetNextRequest:請求得到這個對象本節點以下的所有信息
SetRequest:agent 設置本節點的信息
Trap :agent主動向nms 提交信息
3、OID :
爲了在系統中能夠找到所需對象,我們需要爲每一個對象分配一個唯一的表示號。在關係數據庫中我們稱之爲關鍵字,而在對象術語中,則叫做對象標識(Object identifier-OID)。通常OID在內部都使用一個或多個大整數表示,而在應用程序中則提供一個完整的類爲其他類提供獲取、操作。一個OID必須在一層中保持唯一,理想上應該在所有對象上都唯一。
把被監控對象的名稱和OID放在一個文件中,這個文件叫做MIB庫。
不同的設備的MIB-2 的OID 是不同的,比如說udp的報文OID 是1.3.6.1.2.7,udp 進來的報文OID 1.3.6.1.2.7.2 ,udp出錯的報文OID 1.3.6.1.2.7.3。
六:架構cacti及其應用
1、snmp 的安裝
1,rpm 包安裝snmp
net-snmp-5.3.2.2-7.el5.i386.rpm 提供snmpd服務,開啓這個服務將成爲agent將提供161端口。
net-snmp-utils-5.3.2.2-7.el5.i386.rpm 安裝這個軟件包,將成爲nms ,提供很多工具。
開啓snmpd 服務查看端口
2,nms 與agent 打交道需要進行身份認證,在snmp的1版本 、2c 版本是靠團體名進行身份驗證的,明文傳遞信息,不安全。3版本 是靠賬號驗證的。密文傳遞信息,比較安全,但是,一般使用2c版本,比較方便。
通過snmp的工具snmpwalk 簡單獲取agent(本地主機)的信息
Snmpwalk -v 2c - c public 127.0.0.1
將會得到很多MIB 信息,在安裝snmp的軟件包時,將各節點的MIB庫文件就已經存放到/usr/share/snmp/mibs 目錄下面了。
Nms 只能得到 SNMPv2-MIB 和HOST-RESOURCES-MIB的相關信息,這是因爲在snmp的配置在文件中,只打開了這兩個節點OID,所以nms 只能獲得這兩個節點以下的相關信息。
如果想監控到到更多節點的相關信息,只需把節點的OID 添加到配置文件中
比如說獲取TCP-MIB.txt中的信息tcp節點的OID是 1.3.6.1.2.1.6,設置好之後重啓服務,將會得到tcp的相關信息。
Snmpwalk -v 2c - c public 127.0.0.1
2、Rrdtool 的應用
2,rrdtool 的簡介:
高性能的記錄繪圖工具rrdtool ,主要用於處理時間序列的數據
Rrdtool 提供了幾個子命令實現對.rrd 文件的管理,如create,update,updatev ,graph ,dump ,last ,info 等命令。
使用rrdtool 繪圖的步驟:
1、使用rrdtool create 創建一個新的rrd數據文件;
2、使用, rrdtool update 爲前面的創建的rrd 數據文件提供數據;此數據需要週期性的進行更新,因此,應該講rrdtool update 創建爲cron任務;
3、使用rrdtool graph 從rrd 數據文件中獲取數據並繪圖;
3,Rrdtool create 命令的用法:
Rrdtool create filename 【--start |-b start time 】【--step| -s step】【--no-overtime】【DS:dst arguments 】 【RRA:CF:cf arguments】
Filename :rrd數據庫文件名稱
Start :開始時間
Step :步長,每隔多長時間記錄一次,默認每隔300秒。
no-overtime:不覆蓋一個已經存在的rrd數據文件
DS:數據源
Dst :數據源類型
Arguments:變量
RRA:每隔幾個步長統計一下信息
CF:對數據進行處理的統計函數:AVERAGE 平均值,MIN 最小值,MAX 最大值
1.使用rrdtool創建rrd數據庫文件
rrdtool create test.rrd -s 5 DS:testds:GAUGE:8:0:U RRA:AVERAGE:0.5:1:17280
創建的數據庫文件test.rrd ,每隔5秒收集一下信息,數據源是testds,對數據求絕對值,到8秒的時候也可以接受數據,最小值是0最大值沒有,對錶格中的數據求平均值,數據不超過50%,步長爲1,記錄統計每隔5秒的一天之內的數據,欄位是17280。
將會在當前目錄下產生一個rrd數據庫文件test.rrd
查看rrd數據庫文件的數據平均值信息
rrdtool fetch test.rrd AVERAGE
當前還沒有信息,以爲沒有往表格中輸入信息,所以統計不到信息,編輯一個腳本不斷地往表格中輸入信息,運行腳本
#!/bin/bash
while true ;do
rrdtool update test.rrd N:$RANDOM
sleep 5
done
查看rrd數據庫文件的數據平均值信息,將會得到一些數據
rrdtool fetch test.rrd AVERAGE
2..使用rrdtool 工具創建圖形,獲取的是test.rrd數據庫中的數據,每隔五秒收集一次信息,數據源是testds,求數據的平均值,圖形的形式是線條顏色爲黃色。
rrdtool graph test.png -s 1382934740 --step 5 -t tupian -v vtupian DEF:vname=test.rrd:testds:AVERAGE LINE1:vname#ff0
在當前目錄下將產生test.png,查看圖片
3、cacti的安裝
Rrdtool 太過繁瑣麻煩,所以很少有人願意使用這個工具,cacti的出現大大簡化了操作,cacti是基於web頁面的開源監控軟件,在頁面裏,就可以收集數據信息,繪製圖形。
1,LAMP的環境搭建
使用yum安裝lamp的軟件包
打開httpd 服務,設置開機啓動
打開mysqld 服務,設置開機啓動
修改mysql服務器的登陸密碼
Mysqladmin -u root -p password ‘123’
登陸mysql 服務器,創建數據庫,數據庫的名稱是cacti ,用於存放收集到的數據信息
,然後授予所有權限給cacti 這個用戶來管理cacti數據庫中的所有表格,然後刷新權限。
create database cacti;
grant all privileges on cacti.* to cacti@localhost identified by 'cacti';
Query OK, 0 rows affected (0.00 sec)
flush privileges;
2,使用cacti的源代碼中帶的腳本,往cacti數據庫中導入表格
cacti-0.8.7g.tar.gz cacti的php頁面
cacti-plugin-0.8.7g-PA-v2.8.tar.gz cacti的插件管理器
monitor-latest.tgz 插件 實現監控的功能
sendMsg.zip 實現msn報警功能
settings-latest.tgz 增加設置的功能
feition.tar.bz2 實現飛信報警的功能
thold-latest.tgz 設置域值大小的功能
解壓cacti-0.8.7g.tar.gzi到站點主目錄下/var/www/html
切換到cacti 目錄下,將會看到很多php 文件和一些目錄,poller.php是cacti利用snmp協議不斷地獲取數據的php腳本,rra 目錄,用戶存放rrd數據庫,image 目錄,存放cacti生產的圖片。Cacti.sql 文件,用於導入到mysql數據庫服務器中的cacti數據庫中,給cacti數據庫創建表格。
mysql -u root -p cacti <./cacti.sql
進入到cacti數據庫中查看錶格
3,製作個人的計劃任務運行poller.php這個文件,使得cacti不斷地獲得數據
crontab -e
*/5 * * * * php /var/www/html/cacti/poller.php >/dev/null 2>&1
4,切換到include 目錄下打開config.php ,指明php連接到cacti數據庫的賬號和口令
5,創建系統賬號cacti,把log、 rra 目錄的擁有者設置爲cacti
useradd cacti
passwd cacti
Chown -R log rra
6,通過瀏覽器訪問站點主目錄下的cacti,將出現安裝嚮導,如果沒有問題的話點擊finnish
將會出現後臺管理員的登陸界面管理員的賬號admin,密碼;admin
然後系統會讓你修改密碼,之後將會進入cacti的主界面
剛進去因爲沒有安裝插件只能看到console 和graphs兩個菜單,在console菜單下有很多子菜單,比如說 create 、management 、templates 、configuration、utilities等。
management 菜單下的graph trees ,用於創建節點的,節點掛載到默認樹下面,比如說,創建linux 、windows 、防火牆節點,與linux相關的圖形,掛載到linux節點下,與windows節點相關的圖形掛載到windows節點下,與防火牆相關的圖像掛載到防火牆相關的節點下。
Templates (模板)菜單下的有圖形模板、主機模板、數據模板。當被監管的主機的被監控的對象相同或相似時就可以直接套用模板,主機模板包括一個或多個圖形模板 ,圖形模板包括一個或多個數據模板。
Configuration 菜單下可以進行相應的設置,
General 進行全局的設置,比如說snmp的版本,rrdtool的版本,團體名的版本,設置好之後點擊save進行保存。
四 、cacti的應用
1、監控linux本機
1,點擊 devices 進行設置添加被監控主機的描述ip地址 和套用的模板,使用snmp獲取信息
2,點擊保存之後將會看到保存之後的信息,顯示的是用snmp獲取的信息
,點擊create graphs ,對獲取的信息製作圖形。
將會根據相關聯的圖形模板,創建圖形,也可以添加模板,與inux主機相關聯的圖形模板有linux的內存使用、用戶登錄數、 進程數。
點擊create 將會創建linux內存使用情況圖形,用戶登錄數圖形,進程數圖形。
切換到cacti的rra目錄下面,將會形成相應的rrd數據庫文件,生成rrd文件就一定會有相應的圖片產生。
2、監控windows主機的磁盤使用狀況
1,準備工作
安裝snmp服務,開啓snmp服務,使得windows主機成爲一個被監管的設備(agent)
Windows 主機的ip地址爲192.168.1.102
開始--》控制面板--》添加刪除服務--》添加刪除組件--》管理和監視工具
進行相關的設置,添加團體名和nms的ip地址
2, 點擊graph trees 創建節點windows xp ,以後windows主機的圖形就可以掛 載 到這個節點上
3,點擊devices 添加被監控的主機,t添加被監管設備的ip地址和要使用的模板,然 後點擊create創建。
4,爲主機選擇圖形模板
5,根據所選擇的圖形模板,繪製磁盤使用情況的圖形
點擊devices 將會出現window這臺主機,選擇windows這臺主機掛在到剛剛創建的 windows xp 節點上
6,點擊graphs這個插件,將會看到windowsxp這個節點,但是還沒有出現圖片,這個沒有關係,點擊右上角的logout,從新登陸一下cacti就可以了,將會看到windowsxp節點下面有一臺主機winxp,點擊winxp將會看到被監控信息,磁盤 物理內存 、虛擬內存使用狀況。
五、cacti的報警
簡要說明: 實現郵件報警和飛信報警兩種功能,cacti所要監控的設備有linux主機本身的用戶數,apache服務器的狀態 ,磁盤使用情況和windows 主機的磁盤使用情況
拓撲圖:
一:cacti插件管理器和插件的安裝
Apache 服務器狀態的監測,要靠apache的一個運行狀態腳本來獲取apache運行狀態信息的, ss_apache_stats.php ,監控apache
狀態的圖形模板爲cacti_host_template_webserver_-_apache.xml,這些圖形模板和腳本到網上可以下載,模板可以中cacti的web頁面中導入導出。
1,把腳本拷貝到cacti的scripts的目錄下面
cp -p ss_apache_stats.php /var/www/html/cacti/scripts/
2,通過web方式的訪問進入到cacti的主界面,導入監控apache服務器的圖形模板
導入之後出現如下提示,說明模板導入成功
要想監控apache的運行狀態的信息,必須打開apache的配置文件,開啓狀態輸出的功能,狀態輸出功能的實現,是靠apache在啓動時調用一個模塊來實現的,然後打開輸出狀態的訪問方式,ss_apache_stats.php這個php腳本就是獲取apache輸出狀態的運行腳本。
重啓apache服務器,用瀏覽器訪問http://192.168.1.4/server-status,將會看到apache的輸出信息,版本信息,CPU使用信息等。
3,點擊devices 菜單,找到apache所在的linux主機,也就是本地主機,在添加圖形模板的位置,將會出現有關apache狀態信息的模本,這根導入的模板有關。
然後點擊添加 保存 最後創建圖形
點擊graphs 找到host :localhost,將會形成相應的圖形
4,但是怎麼樣才能實現報警呢?目錄前cacti實現不了,因爲沒有安裝插件,比如說限制域值的插件,狀態圖標插件。
cacti-plugin-0.8.7g-PA-v2.8.tar.gz 插件管理器
monitor-latest.tgz 顯示狀態圖標的插件,當被監控的設備是綠顏色,說明是up 狀態,當爲紅顏色是就是down狀態
sendMsg.zip 實現msn報警的功能
settings-latest.tgz 增加設置功能
thold-latest.tgz 主要設置域值,超出設置的域值,將要報警。
5, 解壓cacti的插件管理器cacti-plugin-0.8.7g-PA-v2.8.tar.gz
切換到cacti-plugin-arch/,將會看到一個補丁,導入數據庫的一個腳本
把cacti-plugin-arch/目錄下的所有內容,移動到cacti的主目錄下面/var/www/html/cacti
把pa.sal 導入cacti數據庫中,然後給cacti打補丁
打完補丁之後刷新cacti的主界面,將會發現cacti的主界面有點亂,打開cacti/include目錄下的config.php,cacti與數據庫連接的配置文件,修改cacti的訪問路徑爲/cacti/
再次刷新cacti的主界面將會清晰明瞭
點擊setting --》用戶管理-->admin ,勾選插件管理,然後保存
點擊插件管理器,裏面還沒有任何插件
6,安裝所需要的插件monitor-latest.tgzsettings-latest.tgz thold-latest.tgz
解壓源代碼,把源代碼目錄移動到cacti目錄下的plugins 目錄下,修改名稱
切換到/var/www/html/cacti/plugins/目錄下,修改名稱,不改名稱,cacti識別不到
7,刷新cacti的web頁面,將會看到三個插件。
8,點擊按鈕,進行插件的安裝,安裝好之後查件的狀態將是active
9,點擊settings將會出現很多選項,進行設置,比如說設置報警方式鈴聲報警、郵件報警。
二:實現郵件報警功能
1,點擊settings 按鈕,點擊mail/dns插件,進行相應的操作,先發送一個測試郵件,用管理員發送郵件。
登錄qq郵箱查看測試郵件
2,設置域值,實現報警
點擊thresholds(域值)菜單,選中要監控的主機,比如監控本地linux主機的進程數目,設置域值,限制進程數目,最大幾個進程,最小几個進程,如果超出範圍,將進行郵件報警。
3,進程明顯大於100,所以將會發送報警郵件,進入郵箱查看郵件
點擊thold 查看告警,如果是紅顏色,說明已經超過域值,正在告警,如果是綠顏色,沒有超過域值。
過了五分鐘,又收到一條告警信息,進程數達到139個,cacti實施報警
4,監控linux主機的apache服務器CPU使用情況,超過1%將進行報警,監控apache服務器的傳輸的字節數,超過2000字節,將實時報警。
三:實現飛信報警功能
1,解壓飛信程序的源代碼到當前目錄下,拷貝共享庫文件到系統共享庫目錄下也就是/lib目錄下,否則,飛信程序執行不了。
2,測試飛信程序,是否可以正常發送飛信,先自己給自己發飛信。
語法:--mobile=發信人的電話號碼
--pwd=發信人的飛信密碼
--to=收信人的電話號碼
--file-utf8=要發送的utf8字符集格式的飛信文件
發送飛信後將會產生一個以.jpg結尾的圖片驗證碼,導出到windows系統的桌面,然後再linux系統當前狀態下輸入驗證碼,將會把飛信發出。
3,但是如何才能實現cacti的飛信報警呢?有一個發送飛信的腳本,當監控的設備數據信息超過某個範圍時,cacti自動運行腳本發送飛信,可以實現用戶不用上網,不在網管工作站,遠距離的接受報警信息。把飛信腳本拷貝到 /var/www/html/cacti/plugins/thold/
mkdir /var/www/html/sendsms/
mv linuxso_20101113/ /var/www/html/sendsms/linuxso
切換到 /var/www/html/cacti/plugins/thold/,創建兩個文件,alert.log 告警文件,sms.txt 日誌文件
4,當監控的信息,超過域值時,告訴thold 執行腳本發送告警飛信。打開thold的聲明文件thold_functions.php ,添加兩條語句。
到這裏我已經實現了郵件報警和飛信報警,你可以根據我的步驟完成cacti的應用。