1>監控概述 通常運維人員在一個企業當中所需要管理一臺或者多台伺服器,或者甚至更多,特別是BAT公司或者門戶級別的公司,一個人管理的伺服器可能上百甚至上千台 而在這些管理的過程當中,作為運維人員我們需要知道我所管理的每一個伺服器所運行的詳細狀態,其中包括,物理資源的消耗狀態(CPU 記憶體 硬碟 IO ...
1>監控概述
通常運維人員在一個企業當中所需要管理一臺或者多台伺服器,或者甚至更多,特別是BAT公司或者門戶級別的公司,一個人管理的伺服器可能上百甚至上千台 而在這些管理的過程當中,作為運維人員我們需要知道我所管理的每一個伺服器所運行的詳細狀態,其中包括,物理資源的消耗狀態(CPU 記憶體 硬碟 IO 等等)以及網 絡帶寬和每一個伺服器上所運行的每一個服務所在某一個時段當中的某一個時刻所有運行的狀態,能夠清晰地展示給我們運維人員觀看,而且的話當這個服務狀態出現 問題之後能給我們的運維人一個非常直接的提示或者說告警信息,甚至可以去嘗試去修複這個伺服器的故障的狀態,我們把它稱為監控系統,各位可想而就這麼一個監控 系統給我們的運維工作帶來多大的便捷性!
2>常見的監控開源工具
1)Cacti概述
cacti只是一個圖形展示工具.其實就是一堆(php)腳本和RRDTool繪圖工具;
這些PHP腳本能調用這個工具(rrdtool)來實現數據的獲取存儲和保存以及通過圖形來展示,只不過展示的時候CACTI作為前端來實現的,而且展示這些數據,數 據的類型必須是跟時間序列相關的數據才可以; 什麼是時間序列? 比如說:我想探測1天當中早上8點最高溫度是多高,最低溫度是多高,早上9點最高溫度是多高, 最低溫度是多高,那這個時間數據,根據我們時間的向後走動、向前扭轉而有了不同的數據走勢這麼一種數據時間,我們把它稱為時間序列數據。如果我們想探測一 個伺服器的埠是不是線上的話。你一想一想80埠是不是線上、8點是不是線上,9點是不是線上、11點是不是線上,這個時間序列有關係沒有?那麼它只有兩種狀 態,要麼線上,要麼不再線,不再線的話時間序列還有沒有時間呢?是不是就沒有了?那麼因此通過cati來展示這種非時間序列或者意義不大的數據的走勢,那麼它就 不是cati的優勢所在了.也不是cati的特點;這個時候就需要另外一種工具來實現呢。這個工具叫做Nagios.
2)Nagios 概述
Nagios 專門就是用來監控服務的簡單狀態。比如說是不是線上?那麼線上就是online,不再線就offline 或者是正在從offline 恢覆成online的過程當中,比如說 本來我的服務是ON的突然之間變成了OFF了。那很顯然是不是發生了狀態轉換了?一旦發生狀態轉換以後我們的Nagios可以自動探測的到這個狀態,而且Nagios可 以根據自己強大的報警功能給管理員發送告警信息.所以我們說Nagios是一個狀態監控工具,而Cacti是一個時間序列數據的展示工具.所以很多公司為了實現監控功 能。將這兩種工具結合一起來一起使用。
3)Zabbix
那麼隨著科技的發展,互聯技術的高速更新。人們就像這又沒有一種方法,將以上兩種功能集合到一個軟體當中去了?於是乎就出現了我們所謂的Zabbix 。
3>Cacti協議組成
Cacti是一套基於PHP,MySQL,SNMP及RRDTool開發的網路流量監測圖形分析工具;
1)SNMP的工作原理
那麼首先我們需要先通過一個SNMP來瞭解一個網路監控到底是如何進行的。SNMP的全稱叫做"Simple Network Manangerment Protocol"
2)SNMP 有三個版本V1 V2 V3
v1 都是基於communities來實現,它有三種communitie
(1)read_only
對它只讀--->
NMS監控端-------------->被監控端
NMS只針對於被監控端有隻讀的功能
(2)read_write
對它可寫--->
NMS監控端-------------->被監控端
NMS可以命令去控制被監控端做一些事情,比如停止一個服務等。
(3)trap 捕獲(陷阱)
NMS等待--->被監控的通知。
比如客戶端1被監控端出現故障了,這個時候會通知信息告知NMS,NMS可以捕獲這個信息。
3)一個網路中被監控的對象
通常網路被監控的對象有哪些類型?
(1)、fault Management
故障管理,能探測伺服器所發生的故障
(2)、Configureation Management
每個伺服器上它的配置是否工作正常的。
(3)、Accounting Management
記賬管理,每一個登陸到伺服器上的用戶是不是都是我們所允許的用戶,這個作為用戶審核使用。
(4)、Performance Management
性能管理,比如CPU使用多高,記憶體使用了多少?
(5)、Secruity Management
安全管理系統監控,比如IDS FW等等。
4)NMS和agent通信流程
那麼我們知道NMS和agent要基於snmp協議。那麼snmp協議是基於UDP協議的,正常情況下我們的哪一個服務被動的打開埠?是NMS還是agent?並等待 其他人的連接?agent應該打開一個埠,隨時等待伺服器發來的請求.
(1)、被監控端(agent)首先被動打開一個UDP 161介面,隨時等待伺服器端的查詢請求;
(2)、一擔被監控端自己發生故障,它可以向監控端(NMS)發起顯陷阱(trap)通知 對方發送一個trap告訴監控端,老子這裡出大事了,發大水了,出故障了,你 快來看看啊,從而及時引起監控端的註意;
(3)、既然是agent向監控端發送trap信息,那麼監控端是不是也的被動打開一個埠?這個UDP埠為162,當然只還是那句話,只有雙方共同用到trap之後, 監控端才需要打開162。否則是不需要的;
(4)、但不管怎麼講 他們也是通過IP協議數據報,通過UDP協議進行封裝。IP封裝最終發送給被監控端。被監控端執行以後反饋給監控端,也是個UDP協議。 之所以使用UDP主要是為了實現速度,為了速度考慮。TCP建立雖然可靠,但是需要3次握手,是要很多時間,等你握手握完了,啊,我快掛了,趕緊過 來檢查;手沒握完別人就掛了,更別說採取什行動了,好,這是雙方通信的簡單機制;
5)SNMP 內置的Communites
對於SNMP的communite來講任何一個設備或者任何一個主機通常都有兩個內置的Communites,只要我們裝上系統以後啟用了SNMP的功能。就會有這兩個機制。
(1) public (只讀) communite
(2) private (讀寫的) communite
再說一遍只要主機啟用了snmp那麼主機機會有兩個預設的communite的,一個是public,一個是private。
就是我們的MYSQL一樣,裝完之後預設就有一個ROOT用戶,如果不改密碼是不是所有的人都能連接進來?那麼我們的SNMP也是這樣的;
6)SNMP 當中的MIB庫介紹
管理信息基礎"(Management Infomation Base)
我們想通過SNMP去監控一個一個設備,標識每一個設備唯一(oid)的號必須依賴一個叫做MIB subtree的一個庫信息表來實現。MIB信息庫跟DNS一樣是一個到樹形 結構;
MIB-II subtree
(1)、比如要監控一個主機跟系統相關的信息,根DNS一樣一層層的往下找,
MIB庫當中如何找到這個信息的OID(OID-Object Identifiers)?一個OID是一個唯一的鍵值對,該代理存放這些值並讓它們可用,一個 SNMP管理器(客戶)可以向代理查詢鍵值對中的特定信息;
(2)、找到跟主機相關的信息為systemA(1) 那麼樹形結構OID為:1.3.6.1.2.1.1
7)SNMP 命令去獲取OID
我們可以通過snmp(options)選項可以去獲得oid信息,常用的有四種:
(1) get方式
(2) getnext方式
(3) getbulk方式
(4) set方式
8)SNMP 安裝包
net-snmp(agent被監控端)
net-snmp-utils(主監控端所要用的命令)
說明:對被監控端我們只要安裝一個net-snmp就可以了,但是主監控端如果想接收agent發送過來的trap信息的話。那麼則將net-snmp的裝上去。如果只 是 單純的是去獲取被監控端獲取數據的話,那麼主監控端只需要安裝一個net-snmp-utils這個包就好了。
# yum -y install net-snmp net-snmp-utils
9)SNMP 實際操作
環境:10.0.10.201 ,既為監控端又為被監控端
(1) 查看可以獲取的當前用戶的信息
# snmpwalk -v 2c -c public localhost
獲取本地資源所有的信息
-v 版本為2c
-c public(communite為public)
有三個mib庫位我們提供了信息.但是在ls /usr/share/snmp/mibs/ 下麵有很多mib庫,為甚麼只有3個庫位我們提供了信息呢?
(2) 編輯OID範圍可以看到更多的信息.
# vim /etc/snmp/snmpd.conf
# /etc/init.d/snmd restart
這個這個subtee的範圍執定當中,只包含了三個MIB庫當中的部分信息,如果想看到的範圍更廣。我們可以這樣調整。這樣看到範圍就更廣
# snmpwalk -v 2c -c public localhost
(3)snmpget查看特定OID的資源
# snmpwalk -v 2c -c public localhost
# snmpget -v 2c -c public localhost HOST-RESOURCES-MIB::hrSystemUptime.0 查看特定的資源
(4)定義獲取資源的許可權:
# vim /etc/snmp/snmpd.conf
#com2sec notConfigUser default public 系統預設是default所有人都可以獲取,很危險,這個位置應該改成主監控端的地址,我這裡主監控端為 自己,所有寫127.0.0.1
com2sec notConfigUser 127.0.0.1 mypublic communitie可以自己定義名字。通常這個名字在企業裡面會改的很複雜。別人越難猜越好。
測試一下:# snmpwalk -v 2c -c public 127.0.0.1 是否用可以獲取到呢?如果使用 # snmpwalk -v 2c -c mypublic 127.0.0.1 試試。是否可以獲 取到數據呢?
2》Cacti相關:
1. cacti是用php語言實現的一個軟體,它的主要功能是用snmp服務獲取數據,然後用rrdtool儲存和更新數據,當用戶需要查看數據的時候用rrdtool生成圖表呈現給用 戶,因此,snmp和rrdtool是cacti的關鍵,Snmp關係著數據的收集,rrdtool關係著數據存儲和圖表的生成;
2. Mysql配合PHP程式存儲一些變數數據並對變數數據進行調用,如:主機名、主機ip、snmp團體名、埠號、模板信息等變數;
3. snmp抓到數據不是存儲在mysql中,而是存在rrdtool生成的rrd文件中(在cacti根目錄的rra文件夾下)。rrdtool對數據的更新和存儲就是對rrd文件的處理,rrd文件是 大小固定的檔案文件(RoundRobinArchive),它能夠存儲的數據筆數在創建時就已經定義;
1>Cacti組成部分
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伺服器相結合,可以實現在任意平臺上使用瀏覽器就可以查看監控畫面;
2>Cacti原理圖
3>特性
(1)、採集數據
(2)、保存數據
(3)、數據展示
(4)、數據分析和報警,
因為Cacti的數據採集的時間是統一的,而且採集的數據項目也是比較多,如果應用大規模網路的,這裡面牽扯到一個併發和伺服器的I/O讀寫。所以cacti不適應於大規 模;
3》Cacti 服務端安裝
1>安裝關聯包
# yum -y install php php-mysql php-snmp mysql mysql-server net-snmp net-snmp-libs net-snmp-utils php-pdo perl-DBD-MySQL rrdtool
2>配置SNMP
#vim /etc/snmp/snmpd.conf
#將下邊這行中的default
com2sec notConfigUser default public
#改為:127.0.0.1
com2sec notConfigUser 127.0.0.1 public
com2sec notConfigUser 10.0.0.0/16 public
#將下邊這行中的systemview
access notConfigGroup "" any noauth exact systemview none none
#改為:all
access notConfigGroup "" any noauth exact all none none
#將下邊這行的註釋“#”去掉
view all included .1 80
3>重啟snmpd服務
# /etc/init.d/snmpd restart
# chkconfig snmpd on
4>安裝Cacti
# wget http://www.cacti.net/downloads/cacti-0.8.8b.tar.gz 下載cacti主文件
# tar -xvf cacti-0.8.8b.tar.gz
# mv cacti-0.8.8b /var/www/html/cacti
# chown apache:apahce /var/www/html/cacti/ -R
# chmod 755 /var/www/html/cacti/ -R
5>啟動Mysql配置資料庫
# /etc/init.d/mysqld restart
# mysql –uroot –p
> create database cacti default character set utf8; 註意咯。為utf8為否是亂碼
> grant all privileges on cacti.* to cacti@localhost identified by 'cacti' with grant option;
> grant all privileges on cacti.* to [email protected] identified by 'cacti' with grant option;
>use cacti;
>source /var/www/html/cacti/cacti.sql;
> flush privileges;
>quit
6>修改cacti PHP文件,修改資料庫地址
#vim /var/www/html/cacti/include/config.php
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cacti";
$database_password = "cacti";
$database_port = "3306";
# vim /etc/php.ini
;date.timezone =
date.timezone = Asia/Shanghai
# crontab –e
*/5 * * * * /usr/bin/php /var/www/html/cacti/poller.php >/dev/null 2>&1
# /etc/init.d/crond restart
7>驗證安裝
在瀏覽器裡面打開
(1)然後-> #點“Next”-> #選擇“New Install”,點擊“Next” ->確保所有的路徑都是顯示“FOUND”,沒有“NOT FOUND”的->點擊Finish 完成安裝。
(2)要求輸入用戶密碼登陸,輸入預設用戶和密碼為:admin 密碼:admin
第一次登陸要求修改密碼:請輸入新的密碼修改
(3)登陸成功後。到此界面
4》Cacti 客戶端安裝
1>安裝snmp
# yum -y install net-snmp
2>配置snmp
#vim /etc/snmp/snmpd.conf
#將下邊這行中的default
com2sec notConfigUser default public
#改為:127.0.0.1
com2sec notConfigUser 10.0.0.201 public 修改成cacti伺服器的IP地址
#將下邊這行中的systemview
access notConfigGroup "" any noauth exact systemview none none
#改為:all
access notConfigGroup "" any noauth exact all none none
#將下邊這行的註釋“#”去掉
view all included .1 80
3>重啟snmp服務
# # /etc/init.d/snmpd restart
5》Cacti 的使用
1>新建一個本地主機
(1)、選擇Devices
(2)、選擇ADD 添加
(3)、輸入信息à然後點擊右下角Create
(4)、創建成功後如下圖
(5)、為監控模板創建圖形文件
(6)、勾選所有模板,點擊Create
(7)、選擇創建圖形的顏色
(8)、創建成功
(9)、加入預設樹圖
(10)、選擇ADD
(11)、選擇HOST –〉Create創建
(12)選擇樹圖查看
(13)查看日誌輪詢情況。就是執行計劃任務的情況
14、輪詢是否報錯。這個將決定狀態是否UP
15、如果沒有up,手動執行
/usr/bin/php /var/www/html/cacti/poller.php 執行一邊輪詢和數據生成.
生成的數據在:/var/www/html/cacti/rra 裡面
每次執行輪詢的記錄在/var/www/html/cacti/log 日誌裡面