原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://foreveryan.blog.51cto.com/3508502/775558
I.總覽
Cacti和Nagios的監控體系可以說是使用廣泛而且支持豐富的國內外的運維人員都需要掌握的一套監控體系,這套體系的好處在於使用Cacti的強大畫圖和自定義畫圖能力,以及Nagios的可控報警。但是網上的大部分內容都是如何安裝,在安裝成功如何使用的方面介紹的很少,而真正開始用之後,爲了工作需要就需要不斷地去Cacti官網查看使用文檔,或者論壇去翻別人的帖子,十分麻煩。於是我決定寫一篇使用方面的手冊,以讓大家真正會用這套系統。
Cacti和Nagios的監控體系可以說是使用廣泛而且支持豐富的國內外的運維人員都需要掌握的一套監控體系,這套體系的好處在於使用Cacti的強大畫圖和自定義畫圖能力,以及Nagios的可控報警。但是網上的大部分內容都是如何安裝,在安裝成功如何使用的方面介紹的很少,而真正開始用之後,爲了工作需要就需要不斷地去Cacti官網查看使用文檔,或者論壇去翻別人的帖子,十分麻煩。於是我決定寫一篇使用方面的手冊,以讓大家真正會用這套系統。
本文用的Cacti版本爲最新的 0.8.7i |
II.Cacti的使用
Cacti的常用服務器的畫圖大部分都是使用模板的形式做的,而Cacti安裝好之後本身自帶了一部分模板,這些模板雖然可用,但是支持的項目太少,於是我們要尋求更多的模板以及更優化的內容。
Cacti的官方的模板庫:http://docs.cacti.net/templates
Cacti的常用服務器的畫圖大部分都是使用模板的形式做的,而Cacti安裝好之後本身自帶了一部分模板,這些模板雖然可用,但是支持的項目太少,於是我們要尋求更多的模板以及更優化的內容。
Cacti的官方的模板庫:http://docs.cacti.net/templates
2:如何在Cacti上添加一個新主機並監控相關的內容:(以添加Linux主機爲例)
1.創建畫圖 a. 在Cacti的Web頁面Console->Import Templates導入響應的xml模板文件。b. 在Linux上cacti/resource/snmp_queries中放入模板相關的xml數據收集文件。並確保屬主和屬組均爲cacti。 c. 點擊Console->Devices,打開設備管理頁面。 d. 點擊右上角的add,添加一個新的機器 e. 當主機的信息填好之後,點擊Create
f. 此時你的頁面左上角應該顯示:Save Successful,並且已經顯示出了主機信息和SNMP信息,如果SNMP信息顯示 SNMP error,請查看最後的問題綜述。 g. 這時我們就可以添加相應的監控項了,在頁面最下方的Associated Graph Templates中添加圖形模板,在Associated Data Queries中添加數據模板。 h. 添加好相應的模板之後點擊Save。此時左上角會出現Save Successful.
i. 點擊右上角的Create Graphs for this Host,來爲剛纔通過模板所獲得到的數據進行畫圖。 j. 選中需要畫圖的項,其中依然分爲兩部分: 通過Graph Templates中的內容都需要選中,而Data Query獲取的內容比較詳細,所以可以按需選擇。 k. 選擇好需要畫圖的項目後,點擊右下角的Create,左上角會出現被創建出來的畫圖項。 2.在Graphs界面顯示新添加主機。
a. 在Cacti Web界面Graph Trees中,選擇相應的列(或者系統默認的Default Tree)。 b. 進去Tree之後,點擊右上角的Add,添加一個新的顯示項。 c. 在Tree Item Type中選擇Host,然後在下面的Host中選擇我們剛纔創建的主機。點擊Create。 d. 此時,再進入Graphs界面,就可以看到在Default Tree下加入了我們新創建的主機。 |
III.Cacti的常用模板
1.Windows常用模板
Windows一般所需要監控的基本內容有: 1. CPU Use 2. Memory Use 3. Disk Size 4. Interface Traffic 爲了解決基本的監控項,我們需要以下模板。
A. Cacti_SNMP_Informant_Standard_Metrics_v12.zip B. Cacti_host_template_ucdnet_snmp_host.gz 我們還需要在Windows主機上安裝一個軟件,以確保SNMP能發送更多的信息爲我們提供數據採集:informant-std-16.exe
使用A模板來監控Windows的CPU項目
使用B模板來監控網絡,硬盤,內存。 最終,添加完相關模板,在創建Windows主機之後,在Devices->Your Windows host ->頁面下方正確添加的各種Templates如下: 由於Windows模板下都是Data Queries。所以請確保添加完相關的Data Queries之後,所有項目的Status下應該都是Success以及是能看到很多Items以及Rows的。這說明數據正確採集,如果沒有,請移步最後問題綜述的問題4。 最後添加完並且畫圖的監控結果: |
2.Linux常用模板 Linux與Windows監控的內容基本相同: 1. CPU Use 2. Load Average 3. Memory Usage 4. Swap Usage 5. Disk I/O 6. Disk Size 7. Interface Traffic 爲了解決Linux監控內容,我們使用以下模板: A. Cacti_host_template_ucdnet_snmp_host.gz B. Cacti_graph_template_ucdnet_-_memory/swap_usage_linux.xml C. Data_query_snmp_-_get_disk_io 最終,添加完相關模板,在創建Linux主機之後,在Devices->Your Linux host ->頁面下方正確添加的各種Templates如下: 在所有的Linux監控添加後的內容如下: |
3.Switch && Router的相關模板 由於市面上Switch和Router的型號衆多,而不同的型號可能就需要不同的模板,不能像Windows和Linux一樣進行統一,所以當你需要監控Switch和Router的時候,請Google響應的型號的模板,或者在Cacti官方的模板庫中進行查找。查找之後添加的過程都大同小異,這裏不再贅述。 |
IV:自定義腳本的添加以及監控
很多時候,我們需要爲我們獨有的環境去指定監控內容,那麼如何制定呢?就可以通過自己寫腳本的方式進行收集數據。這裏我用一個監控QQ在線人數的例子來舉例。
準備工作: 1.我們需要一個腳本,腳本的語言隨意,只要在Linux的機器上能夠使用運行並且有返回內容。比如我們即將使用的腳本:
這個裏面只有最後一行是有用的,其他的爲curl的抓取信息。
2.我們的腳本要放在一個確保Cacti用戶可訪問的位置。常用的地方是:cacti/scripts/*中,那麼當腳本準備停當之後,就開始我們的監控工作。 |
1.創建數據輸入方式
1. 在Console-->點擊Data Input Methods
2. 點擊右上角的Add,添加一個新的數據獲取方式
2. 點擊右上角的Add,添加一個新的數據獲取方式
3. 點擊Create,出現新的項目
4. 新的項目包括Input Fields和Output Fields,即輸入內容和輸出內容,輸入內容其實就是向腳本傳遞函數,我們這個腳本不需要傳遞什麼參數進去,於是沒有,只有Output Fields。
5. 在Output Fields上點擊Add,添加新的輸出內容。
6. 在Field[Output]中輸入我們腳本的輸出項:這裏我填寫“QQ_Now”
7. 在Friendly Name中輸入解釋輸出項的內容,內容隨意。
8. 勾選Update RRD File後,點擊Create
9. 然後查看我們整個的數據獲取方式信息,點擊Save,左上角應出現“Save Successful”
2.創建數據源
1. 在Console->點擊Data Sources,進入數據源界面
2. 點擊右上角的Add,添加新的數據源
3. 確保Data Template和Host均爲None。直接點擊Create
4. 在新出現的信息面板中輸入相關內容
2. 點擊右上角的Add,添加新的數據源
3. 確保Data Template和Host均爲None。直接點擊Create
4. 在新出現的信息面板中輸入相關內容
5. 點擊Create,此時左上角會出現Save Successful
6. 注意系統自動給生成的RRD文件路徑,確保裏面不會出現連續兩個反斜線的路徑信息。如果出現,請手動修改爲一個反斜線。如:<path_rra>/1194.rrd
7. 點擊Save,看到Save Successful,則數據源創建成功。
6. 注意系統自動給生成的RRD文件路徑,確保裏面不會出現連續兩個反斜線的路徑信息。如果出現,請手動修改爲一個反斜線。如:<path_rra>/1194.rrd
7. 點擊Save,看到Save Successful,則數據源創建成功。
3.創建圖像
1. 選擇Console--> Graph Management,進入圖像管理
2. 點擊右上角的Add,添加一個新的圖像
3. 選擇Graph Template以及Host均爲None,然後點擊Create
4. Title中輸入圖像的名字,其他保持不變。並點擊Create
5. 然後你會看到多出的Graph Items,以及中間有一個看不到圖的紅叉,因爲這個圖我們還沒有定義。
6. 在Graph Items中點擊Add,添加畫圖規則。
2. 點擊右上角的Add,添加一個新的圖像
3. 選擇Graph Template以及Host均爲None,然後點擊Create
4. Title中輸入圖像的名字,其他保持不變。並點擊Create
5. 然後你會看到多出的Graph Items,以及中間有一個看不到圖的紅叉,因爲這個圖我們還沒有定義。
6. 在Graph Items中點擊Add,添加畫圖規則。
7. 添加完畫圖內容之後,點擊Create/Save,返回之前的頁面,接下來還要添加數據的展示內容。
8. 再次點擊Graph Items中的Add,這次添加的是數據的展示,展示當前值。
9. 設置好後點擊Create創建這個項目,然後按照這個方法,分別創建最大值,最小值,平均值的展示內容。
10. 添加好後內容如圖。
4.將自定義好的圖形,加入到Graphs面板
1. 在Cacti Web界面Graph Trees中,選擇相應的列(或者系統默認的Default Tree)。
2. 進去Tree之後,點擊右上角的Add,添加一個新的顯示項。
3. 在Tree Item Type中選擇Graph,然後在下面的Graph中選擇我們剛纔創建的圖像。點擊Create。
4. 此時,再進入Graphs界面,就可以看到在Default Tree下已經出現了我們新創建的圖像。
2. 進去Tree之後,點擊右上角的Add,添加一個新的顯示項。
3. 在Tree Item Type中選擇Graph,然後在下面的Graph中選擇我們剛纔創建的圖像。點擊Create。
4. 此時,再進入Graphs界面,就可以看到在Default Tree下已經出現了我們新創建的圖像。
V.Cacti問題 Q & A
1.填完Drivers信息之後顯示紅色的SNMP error
這是由於被監控機的SNMP設置問題,沒有允許我們監控機進行監控,或者Community不匹配導致的。
Linux可以在/etc/snmp/snmpd.conf中修改/增加發送snmp的機器,以及community。
Windows可以在Snmp服務中增加允許發送snmp的機器,以及community。
Linux可以在/etc/snmp/snmpd.conf中修改/增加發送snmp的機器,以及community。
Windows可以在Snmp服務中增加允許發送snmp的機器,以及community。
2.添加完圖之後,等待了無數時間圖依然無法繪製,反饋給我們一個紅色的X。
首先,如果你是用添加的模板創建的圖,那麼顯示不了的話,很有可能是由於模板太老,或者模板不正確導致的。可以考慮更新作者的最新模板以重新畫圖。當然,如果圖像的確畫不出來,那麼我們可以打開畫圖的Debug日誌的方式進行排錯。
進入Graph Management,在Host中選擇我們畫不出圖的那個Host,然後點Go,這樣就在下面列出了所有在這個Host中的圖像列表,點擊那個無法畫圖的列表。這就進入了我們選定主機的相關圖像的設置界面,我們應該可以看到這個界面下方依然有一個紅X,證明我們無法畫圖,所以點擊右上角的“Turn on Graph Debug Mode.”來打開Debug日誌,這時候,就可以看到頁面下方多出了"RRD Tool Command:"的列表,裏面詳細的描述了RRD工具是如何爲我們畫圖的,這都不是關鍵,關鍵是最後的RRD Tool Says:比如
這裏面是RRD Tool 告訴的我們爲什麼它無法畫圖,我們可以看到我當前例子的沒有畫圖的原因是316.rrd這個文件不存在,說明在創建的時候rrd沒有正確的創建出這個文件,這就有可能是所用的模板有問題了。
在這裏,這是一個很好的查看爲什麼沒有畫出圖的地方,沒有畫出的圖RRD Tool會一一的告訴我們,我們只需要根據它說的來修正,直到RRD Tool Says: OK
在這裏,這是一個很好的查看爲什麼沒有畫出圖的地方,沒有畫出的圖RRD Tool會一一的告訴我們,我們只需要根據它說的來修正,直到RRD Tool Says: OK
3.圖什麼的都有,但是數據都是N/A,這是要鬧哪樣?
這個的解決辦法其實跟無法畫圖的解決一樣,就是我們去看數據的Debug日誌。
進入Data Sources,在Host中選擇沒有數據的Host,然後在下面的列表中選擇沒有數據的那個圖。進入數據設置界面,然後點擊右上角的“Turn on Data Source Debug mode”,然後去分析它的報錯。
進入Data Sources,在Host中選擇沒有數據的Host,然後在下面的列表中選擇沒有數據的那個圖。進入數據設置界面,然後點擊右上角的“Turn on Data Source Debug mode”,然後去分析它的報錯。
4.在給主機添加Data Query的監控項的時候發現裏面沒有獲取到數據。
這時候,如果它獲取不到數據,我們就無法給它畫圖。因爲在給它創建的圖的界面上顯示沒有內容。
這時候可以直接點擊上圖中的Debugging下的相關內容,直接打開Debug查看狀態。
這時候可以直接點擊上圖中的Debugging下的相關內容,直接打開Debug查看狀態。
這時就可以看到反饋出得信息,比如上圖,發現SNMP無法獲取數據。當然也有其他的,比如MIB文件不存在。只要你仔細看它反饋出來的問題,知道問題的根源,就一定能解決。當解決了數據獲取之後,可以直接點擊右邊的綠色的小圓圈,就刷新了數據的獲取狀態。
5.關於cacti下文件的權限問題。
Cacti目錄中的內容權限並不統一,而且權限要求的也很少,並不像其他的比如Nagios要求的那麼多。我們可以簡單的保持整個Cacti目錄的屬主和屬組都是Cacti即可。但是有兩個特殊的例外:
第一個是cacti/rra目錄,整個目錄裏的內容是RRD的畫圖文件自動在裏面生成的。而生成之後裏面文件的屬主和屬組到底是誰,取決最終是由哪個用戶來創建的,而這個就是在Cacti的那個crontab裏控制,如果我們使用的是root用戶添加的crontab,那麼這個rra目錄中的內容屬主和屬組都是root。同理,如果我們的crontab是在cacti中設置的,那麼rra目錄中的內容屬主和屬組都是cacti。
第二個目錄是cacti/scripts目錄,這裏面存的大部分都是我們自定義的腳本,一定要確保裏面的腳本是cacti用戶可執行的。最好的檢測方法就是su到cacti用戶中,進入這個目錄,手動運行一下腳本,查看腳本是否成功執行。
第一個是cacti/rra目錄,整個目錄裏的內容是RRD的畫圖文件自動在裏面生成的。而生成之後裏面文件的屬主和屬組到底是誰,取決最終是由哪個用戶來創建的,而這個就是在Cacti的那個crontab裏控制,如果我們使用的是root用戶添加的crontab,那麼這個rra目錄中的內容屬主和屬組都是root。同理,如果我們的crontab是在cacti中設置的,那麼rra目錄中的內容屬主和屬組都是cacti。
第二個目錄是cacti/scripts目錄,這裏面存的大部分都是我們自定義的腳本,一定要確保裏面的腳本是cacti用戶可執行的。最好的檢測方法就是su到cacti用戶中,進入這個目錄,手動運行一下腳本,查看腳本是否成功執行。