30
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 第三天課程

  • Upload
    thetis

  • View
    162

  • Download
    3

Embed Size (px)

DESCRIPTION

Cacti 第三天課程. Cacti 到底是什麼? ( 上午 ) Cacti 的資料流 - Cacti 資料的取得 : Data input methods (Lab 1 & 2 ) Data queries ( Lab 3) - Cacti 資料的儲存 - Cacti 資料的呈現 Cacti 的 plugin ( 下午 ) - Cacti Plugin Architecture ( Lab 4 ) - 如何寫一個 plugin. - PowerPoint PPT Presentation

Citation preview

Page 1: Cacti  第三天課程

Cacti 第三天課程 Cacti 到底是什麼? ( 上午 ) Cacti 的資料流 - Cacti 資料的取得 : Data input methods (Lab 1 & 2 ) Data queries ( Lab 3) - Cacti 資料的儲存 - Cacti 資料的呈現 Cacti 的 plugin ( 下午 ) - Cacti Plugin Architecture ( Lab 4 ) - 如何寫一個 plugin

Page 2: Cacti  第三天課程

Cacti 到底是什麼? 好用、好操作的進階版 MRTG ? 整合 RRD 、 SNMP 、 Mysql 的軟體? 免費的網管軟體? 免費的反而有可能是最貴的 ?

Page 3: Cacti  第三天課程

它是一個具有收集資料、處理資料、儲存資料,且具有繪圖能力的平台 強大的 polling 能力 ( 可以執行自訂的程式碼 ) 稍作客制化後可主動 push 資料 ( Agent) 可監控任何型態的資料,不限定網路設備 ex: 監控 mail 有沒有延遲 , 監控 VM , 流量分析 只要收得到資料,它就可以繪圖 Plugin 提供運用的深度

Cacti 是

Page 4: Cacti  第三天課程

Cacti 的資料流

Page 5: Cacti  第三天課程

最源頭是由 crontab 的 poller.php 所發動的 Poller.php 到 mysql 裡將 poller_cache 裡的

polling command 逐條執行 Poller cache 是由 Device 裡的定義產生的 Device 一定要有 IP 嗎? 可以是 Mail inbox 嗎? Poller.php 可設定多個 thread 增快 polling 速度 Console->Settings->Poller

資料的取得

Page 6: Cacti  第三天課程

資料的取得 SNMP Query

SNMP OID : 單一的 OID 值,取得單一的值 SNMP Index : 取得 SNMP 的

Script Query : 用寫好的 Shell Script 透過 rsh或 ssh 方式,將監控設備的資料取回 。 - Perl 、 Java 、 WMI

PHP 的 Extension : SOAP

Page 7: Cacti  第三天課程

資料的取得 眾多的採集資料方式,須遵照 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

Page 8: Cacti  第三天課程

資料取得方式 Data Input Methods :

1.Wirte a script 2.Create a Data Input Method3.Create or choose a Data Template 4.Create or choose a Graph Template

Data Query

1.Wirte a script 2.Wirte a XML file3.Create a Data Input Method4.Create or choose a Data Template 5.Create or choose a Graph Template

Page 9: Cacti  第三天課程

資料取得方式 - Data Input Methods

資料是不具 index 概念的,即 1 對 1 的結構 一次可抓取一到多個資料,回傳多筆須照格式 var1:value1 var2:value2 ….varN:valueN 擴展性問題 : 日後若要再多抓一個欄位,須整個 Data Source 重建 若是遠端抓取資料,可減少網路往返的 traffic

Page 10: Cacti  第三天課程

資料取得方式 - Data Queries

資料是具 index 概念的,即 1 對 多的結構 一次只抓取一個資料,由於資料有次序的特性, 所以 poller 在 Polling 時,是將 index 做為參數帶入 Shell script ,因此 Shell script 一次只會回傳一個 index 對應取得的值。 擴展性問題 : 日後若 Device 多了一個介面或 mount point ,無須整個 Data Source 重建 若是遠端抓取資料,會增加網路往返的 traffic Polling 次數增加 會有 Performace Issue

Page 11: Cacti  第三天課程

資料的取得 Data Input

Methods Data Queries

Return Data 1 ~ 多筆 1 筆Index 無 有

Complexity 簡單 複雜Extesibility 固定 可伸展

Implementation

較簡單 較複雜需要 Reindex 不用 視需要Reindex :當資料對應的 index 與最初設定不一樣時 ,例如:

router 的 module 更換或移動位置

Page 12: Cacti  第三天課程

資料的儲存 經由資料取得的資料,須要放在資料庫;讓資料處理的工具作進一步處理 Cacti 會先將資料放在 mysql - poller_output

table 中 有註冊與 poller.php hook 的 Plugins 會先到

poller_output 抓資料做處理 最後會寫到 RRD 中

Page 13: Cacti  第三天課程

資料的呈現 Cacti 依據 Device 中所套用的 Graph template 中所定的條件,由 rrdtool 將圖繪 出來 RRDTool Command: /usr/bin/rrdtool graph - \ --imgformat=PNG \ --start=-86400 \ --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 \

Page 14: Cacti  第三天課程

資料的取得 – 實作 以 Data Input Methods 方式,寫一個隨機 產生 1 個數值的 bash script ,交由 Cacti儲 存到 rrd 中,最後由 rrdtool 根據 graph template 出圖 ( Lab 1 )

同上,但一次產生兩個數值 ( Lab 2 )

Page 15: Cacti  第三天課程

以 Data queries 方式 ,監控本機的 service

( Lab 4 )需用到基本的 XML 語法 做完此 Lab 說明 XML 檔如何運作

資料的取得 -實作 2

Page 16: Cacti  第三天課程

Cacti 的 plugin 剛安裝好的 Cacti 是沒有 Plugin 架構的 如果要安裝額外的 Plugin 需要安裝 PA 例如 : cacti_autoinstall_v0.40c.sh

Plugin 是為了擴展 Cacti 的功能 - 例如 : weathermap , 利用收集到的data source 做一個 total view 的展現 Plugin 彌補 Cacti 所沒有的功能 - 例如 : Syslog , Threshold …

Page 17: Cacti  第三天課程

要裝 Plugin 之前,須先確定有安裝 Plugin Architecture

什麼是 Plugin Architecture ?有什麼用處? 沒有 Plugin Architecture 可以嗎 ( 陽春版 ) ? PA 是一種選擇性的延伸檔案集,可以擴展 Cacti的基本功能;並且能夠呼叫額外的功能及程式 ( 也就是 plugins) 所以一個 plugin 必須符合 PA 的要求;如此可以不必動到 Cacti 的核心程式

Cacti Plugin Architecture

Page 18: Cacti  第三天課程

確認 PA 的版本 由 Console -> Plugin Management

由 putty login 到 Cacti 檢查是否有 /var/www/cacti/plugins 目錄

Page 19: Cacti  第三天課程

PA 的用處 可以安裝別人寫的 plugin 是 Cacti 的 API 可以開發自己的 Plugin

Page 20: Cacti  第三天課程

一個 plugin 的檔案架構如下:My_plugin/ docs/ CHANGELOG images/ mylogo.png (tab .jpg 檔 ) html/ LICENSE README index.php setup.php (plugin 的安裝檔 ) myplugin.php ( 主程式 )

Cacti Plugin 檔案架構

Page 21: Cacti  第三天課程

內容 : <?php header("Location:../index.php"); ?> 將 plugin 的首頁 header 交由上一層處理, 上一層即是 PA 架構的 index.php

PA 強制所有 plugin 都導回 Cacti 的首頁處理

Cacti Plugin 檔案架構 index.php

Page 22: Cacti  第三天課程

必要的 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() : 解除安裝時的動作

Cacti Plugin 檔案架構 setup.php

Page 23: Cacti  第三天課程

Plugin Setup.php function 說明plugin_xxx_version() { return array( ‘name’ => ‘myPlugin’, //plugin 名稱 ‘version’ => ‘0.1’, // 版本 'longname' => 'My first plugin', ‘author’ => ‘Zest Yang’, // 作者 'homepage' =>

'http://www.yuanta.com.tw', 'email' => '[email protected]', 'url' => 'http://www.yuanta.com.tw' ); }

Page 24: Cacti  第三天課程

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

Page 25: Cacti  第三天課程

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}

Page 26: Cacti  第三天課程

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>';

} }}

Page 27: Cacti  第三天課程

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 會被安裝的功能

Page 28: Cacti  第三天課程

Plugin Setup.php function 說明plugin_xxx_uninstall(){ // 設定 Cacti 在 uninstall 時,順便也要移除的動作 // 例如 : 若此 plugin 有 在 mysql Data Base create table // 就可寫在這裡順便做移除}

Page 29: Cacti  第三天課程

Plugin myPlugin.php 說明<?phpchdir('../../');include_once(‘./include/auth.php’); // 檢查該 plugin 是否有註冊include_once('./plugins/myPlugin/general_header.php');// 顯示下面這一段 print " Here is your stage !! Have a go hero !!";?>

Page 30: Cacti  第三天課程

Cacti Plugin 實作 - Lab 4 此實作會做出自訂的 Plugin 完成 plugin 後,可由 Console -> Configuration ->Plugin Management 執行安裝 plugin 動作