Download presentation
Presentation is loading. Please wait.
1
Cacti 第三天課程 Cacti 到底是什麼? (上午 ) Cacti 的資料流 - Cacti 資料的取得 :
Data input methods (Lab 1 & 2 ) Data queries ( Lab 3) - Cacti 資料的儲存 - Cacti 資料的呈現 Cacti 的 plugin (下午) - Cacti Plugin Architecture ( Lab 4 ) - 如何寫一個 plugin Cacti ['kæktai]是 cactus 的複數 1.知道怎麼安裝 怎麼操作 Cacti 了 , 如何去 implement ? 覺得Cacti 是什麼 ? 要怎麼去利用 Cacti ? 2.
2
好用、好操作的進階版 MRTG ? 整合RRD、SNMP、Mysql的軟體? 免費的網管軟體? 免費的反而有可能是最貴的 ?
Cacti 到底是什麼? 好用、好操作的進階版 MRTG ? 整合RRD、SNMP、Mysql的軟體? 免費的網管軟體? 免費的反而有可能是最貴的 ? Cacti ['kæktai]是 cactus 的複數 MRTG = Multi Router Traffic Grapher , MRTG 須要用 SNMP 才能運作 , shell script 呢 ? Cacti 會安裝 知道怎麼操作後 , 怎麼去運用它 !!
3
Cacti 是 它是一個具有收集資料、處理資料、儲存資料,且 具有繪圖能力的平台 強大的polling 能力(可以執行自訂的程式碼)
稍作客制化後可主動 push 資料( Agent) 可監控任何型態的資料,不限定網路設備 ex: 監控 mail 有沒有延遲 , 監控VM ,流量分析 只要收得到資料,它就可以繪圖 Plugin 提供運用的深度 Cacti 資料來源 有 : polling request , 對方主動送過來的 ( syslog , flow … ) , 程式碼 : 不限定語言( C , Java , perl , php , SQL , WQL … ) , 更增加polling 的廣度 對不喜歡拘泥於商用軟體的人 , 是最大的利器 ** Agent 角色的 Cacti 送資料給 Server 角色的 Cacti , 例如 : 利用 remote Cacti thold 當 agent , 當觸發 threshold 時 , 將資料push 到 Cacti Server ** APE (Ajax Push Engine ) , Reverse Ajax or Comet , 2. Mail 延遲 : 收到時間 與 送的時間 , 相差超過 180 sec 就認定 service 有問題 利用 Exchange Web Service 來實作 ( PHP – SOAP , SOAP client ) 3. 監控 VM : vsphere SDK 來實作 ( Vmware Vshpere SDK for perl or Java , or C# ) Host 的 resource ex: Data Storage , CPU , memory , Guest resource ex : CPU , memory ,disk 吃多少的 host 資源 百分比 4.流量分析 : 下載 前 20 大排名 , 異常 flow 數排名 (病毒發作樣態 之一 ) 5.眾多的 plugin 將 收集到的資料 , 作更進一步的分析與運用 , 產生更為有效益資訊
4
Cacti的資料流
5
資料的取得 最源頭是由 crontab 的 poller.php所發動的
Poller.php 到mysql 裡將 poller_cache裡的 polling command 逐條執行 Poller cache 是由 Device 裡的定義產生的 Device 一定要有 IP 嗎? 可以是Mail inbox嗎? Poller.php 可設定多個 thread 增快polling速度 Console->Settings->Poller
6
資料的取得 SNMP Query SNMP OID : 單一的 OID 值,取得單一的值 SNMP Index : 取得SNMP的 Script Query : 用寫好的Shell Script透過rsh或 ssh方式,將監控設備的資料取回 。 - Perl 、Java 、WMI PHP 的 Extension : SOAP Script : 這邊指的是 , 只要能在 command line 下的指令集合 , 所以就不限是一般的unix – like 的shell script 可以是 php , java , sql ,wql (wmi query language) , SOAP …. Script 又可分兩種 : local script and remote script
7
資料的取得 眾多的採集資料方式,須遵照Cacti的兩種資料導 入方法。(Cacti 官網說明)
Data Input Methods : allow Cacti to retrieve data to insert into data sources and ultimately put on a graph. There are different ways for Cacti to retrieve data, the most popular being through an external script or from SNMP Data Query : Data queries are not a replacement for data input methods in Cacti. Instead they provide an easy way to query, or list data based upon an index, making the data easier to graph Index 概念 例如 : snmpwalk 一次取回網路的設備的多個interface 資料 ( 例如 : verbose query ) 作業系統的 processes , ps –ef , windows 的 工作管理員看到的 processes 處理 index 概念的資料 要注意 : 1. process or service 的 auto restart (有的程式掉下來 會自己再重新啟動 , 這時index 就會跑掉 ) 2. replace hard disk 更換硬碟 , 造成 snmp index 跑掉 , 要做 reload ( Cacti 的綠色圓圈圈) 3. 適合 index 會固定對應的資料 , 否則建議改用 process name 來做 index process name 不會變 舉 hard disk 例子 df 用 mount point 作 index
8
資料取得方式 Wirte a script Create a Data Input Method
Data Input Methods : Wirte a script Create a Data Input Method Create or choose a Data Template Create or choose a Graph Template Data Query Wirte a XML file
9
資料取得方式- Data Input Methods
資料是不具index概念的,即1 對 1的結構 一次可抓取一到多個資料,回傳多筆須照格式 var1:value1 var2:value2 ….varN:valueN 擴展性問題 : 日後若要再多抓一個欄位,須整個 Data Source 重建 若是遠端抓取資料,可減少網路往返的 traffic 對 1 的方式 : 類似 key:value , 一個 key 對應一個 值 Data template 的 data source item 與 script return 個數回傳值 > 1時的對應 問題 , 靠 Data template 中的 Data source item 裡的Output Field 做變數對應
10
資料取得方式- Data Queries 資料是具index概念的,即1 對 多的結構 一次只抓取一個資料,由於資料有次序的特性,
所以poller 在Polling時,是將index做為參數帶入 Shell script,因此Shell script 一次只會回傳一個 index對應取得的值。 擴展性問題 : 日後若Device多了一個介面或 mount point,無須整個Data Source 重建 若是遠端抓取資料,會增加網路往返的 traffic Polling 次數增加 會有 Performace Issue 1 對 多 的結構 :一台有多個實體或虛擬介面的網路設備。 雖然每個 port 的ifstatus 的資料型態都是一樣的, 但可以利用介面所對應的index次序加以區別。使得我們在取得這些資料後, 可以由index所對應的位置,得知是那一個介面的狀態。 本機 及 遠端設備的 performace 問題 , 本機 啟動多次的 polling , 遠端則須應付 多次的 request 可一次將所有資料取回 Cacti( memory cache ) , 在 Local 再行做 request ( I/O 在本機 )
11
資料的取得 Data Input Methods Data Queries Return Data 1 ~ 多筆 1 筆 Index 無 有
1 ~ 多筆 1 筆 Index 無 有 Complexity 簡單 複雜 Extesibility 固定 可伸展 Implementation 較簡單 較複雜 需要Reindex 不用 視需要 Reindex :當資料對應的index 與最初設定不一樣時 ,例如:router 的 module 更換或移動位置
12
資料的儲存 經由資料取得的資料,須要放在資料庫;讓資料處 理的工具作進一步處理
Cacti 會先將資料放在 mysql -poller_output table 中 有註冊與poller.php hook 的Plugins會先到 poller_output 抓資料做處理 最後會寫到 RRD 中
13
資料的呈現 Cacti 依據 Device 中所套用的 Graph template中所定的條件,由rrdtool 將圖繪 出來
RRDTool Command: /usr/bin/rrdtool graph - \ --imgformat=PNG \ --start= \ --end=-300 \ --title='Localhost - Load Average' \ --rigid \ --base=1000 \ --height=120 \ --width=500 \ --alt-autoscale-max \ --lower-limit=0 \ --units-exponent='0' \ --vertical-label='processes in the run queue' \ --slope-mode \ --font TITLE:12: \ --font AXIS:8: \ --font LEGEND:10: \ --font UNIT:8: \ DEF:a="/var/www/cacti/rra/localhost_load_1min_5.rrd":load_1min:AVERAGE \ DEF:b="/var/www/cacti/rra/localhost_load_1min_5.rrd":load_5min:AVERAGE \ DEF:c="/var/www/cacti/rra/localhost_load_1min_5.rrd":load_15min:AVERAGE \
14
資料的取得 – 實作 以Data Input Methods 方式,寫一個隨機 產生1個數值的 bash script ,交由Cacti儲
存到 rrd 中,最後由 rrdtool 根據 graph template 出圖 ( Lab 1 ) 同上,但一次產生兩個數值 ( Lab 2 )
15
資料的取得 -實作 2 以Data queries 方式 ,監控本機的 service ( Lab 4 ) 需用到基本的 XML 語法
16
Cacti 的 plugin 剛安裝好的 Cacti 是沒有 Plugin 架構的 如果要安裝額外的 Plugin 需要安裝 PA
例如: cacti_autoinstall_v0.40c.sh Plugin 是為了擴展 Cacti 的功能 - 例如 : weathermap , 利用收集到的data source 做一個 total view 的展現 Plugin 彌補Cacti 所沒有的功能 - 例如 : Syslog , Threshold …
17
Cacti Plugin Architecture
要裝 Plugin 之前,須先確定有安裝 Plugin Architecture 什麼是 Plugin Architecture ?有什麼用處? 沒有 Plugin Architecture 可以嗎(陽春版)? PA 是一種選擇性的延伸檔案集,可以擴展Cacti的 基本功能;並且能夠呼叫額外的功能及程式(也就是 plugins) 所以一個 plugin 必須符合 PA 的要求;如此可以 不必動到 Cacti 的核心程式
18
確認PA 的版本 由 Console -> Plugin Management 由 putty login 到 Cacti
檢查是否有 /var/www/cacti/plugins 目錄
19
PA 的用處 可以安裝別人寫的 plugin 是 Cacti 的 API 可以開發自己的Plugin
20
Cacti Plugin 檔案架構 一個 plugin 的檔案架構如下: myplugin.php (主程式) My_plugin/
docs/ CHANGELOG images/ mylogo.png (tab .jpg檔) html/ LICENSE README index.php setup.php (plugin 的安裝檔) myplugin.php (主程式)
21
Cacti Plugin 檔案架構 index.php
內容 : <?php header("Location:../index.php"); ?> 將 plugin的首頁header 交由上一層處理, 上一層即是 PA 架構的index.php PA強制所有plugin 都導回 Cacti的首頁處理
22
Cacti Plugin 檔案架構 setup.php
必要的function 有 plugin_xxx_version() : 顯示版本、作者 xxx_config_arrays() : 註冊 realm ID xxx_draw_navigation_text() : 設定navigation xxx_show_tab() : 設定 tab .gif file plugin_xxx_install() : 安裝後要啟動的功能 plugin_xxx_uninstall() : 解除安裝時的動作
23
Plugin Setup.php function說明
plugin_xxx_version() { return array( ‘name’ => ‘myPlugin’, //plugin名稱 ‘version’ => ‘0.1’, //版本 'longname' => 'My first plugin', ‘author’ => ‘Zest Yang’, //作者 'homepage' => ' ' ' => 'url' => ' ); }
24
Plugin Setup.php function說明
xxx_config_arrays(){ global $user_auth_realm_filenames,$user_auth_realms,$menu; $realm_id=888; //註冊myPlugin realm id 為888 $user_auth_realms[$realm_id]='My Plugin Test'; $user_auth_realm_filenames['myPlugin.php'] = $realm_id; // $user_auth_realm_filenames[‘mySetting.php'] = $realm_id+1; $menu[‘My Plugins']['plugins/myPlugin/mySetting.php']=‘My Setting'; } 可查詢mysql 中的 user_auth_realm table 找出目 前登記的realm id $menu 是global 變數 : global_arrays.php Menu分為 menu header & menu item
25
Plugin Setup.php function說明
xxx_draw_navigation_text(){ //左邊 Menu的 navigation $nav["mySetting.php:"] = array("title" => "My Plugin Settings", "mapping" => "index.php:", "url" => "mySetting.php", "level" => "1"); //上面 tab 的 navigation $nav["myPlugin.php:"] = array("title" => "My Plugin", "mapping" => "index.php:", "url" => "myPlugin.php", "level" => "1"); return $nav }
26
Plugin Setup.php function說明
xxx_show_tab(){ global $config; if (api_user_realm_auth('myPlugin.php')) { if (substr_count($_SERVER["REQUEST_URI"], "myPlugin.php")) { print '<a href="' . $config['url_path'] . 'plugins/myPlugin/myPlugin.php"><img src="' . $config['url_path'] . 'plugins/myPlugin/images/tab_myPlugin_down.gif" alt="myPlugin" align="absmiddle" border="0"></a>'; }else{ print '<a href="' . $config['url_path'] . 'plugins/myPlugin/myPlugin.php"><img src="' . $config['url_path'] . 'plugins/myPlugin/images/tab_myPlugin.gif" alt="myPlugin" align="absmiddle" border="0"></a>'; }
27
Plugin Setup.php function說明
plugin_xxx_install(){ api_plugin_register_hook('myPlugin', 'top_header_tabs', 'myPlugin_show_tab', "setup.php"); api_plugin_register_hook('myPlugin', 'top_graph_header_tabs', 'myPlugin_show_tab', 'setup.php'); api_plugin_register_hook('myPlugin', 'draw_navigation_text', 'myPlugin_draw_navigation_text', 'setup.php'); api_plugin_register_hook('myPlugin', 'config_arrays', 'myPlugin_config_arrays','setup.php'); } 設定此plugin 會被安裝的功能
28
Plugin Setup.php function說明
plugin_xxx_uninstall(){ //設定 Cacti 在uninstall 時,順便也要移除的動作 //例如 : 若此 plugin 有 在 mysql Data Base create table // 就可寫在這裡順便做移除 }
29
Plugin myPlugin.php 說明 <?php chdir('../../');
include_once(‘./include/auth.php’); //檢查該plugin是否有註冊 include_once('./plugins/myPlugin/general_header.php'); //顯示下面這一段 print " Here is your stage !! Have a go hero !!"; ?>
30
Cacti Plugin 實作 - Lab 4 此實作會做出自訂的Plugin
完成plugin 後,可由 Console -> Configuration ->Plugin Management 執行安裝 plugin 動作
Similar presentations