1 / 30

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.

thetis
Download Presentation

Cacti 第三天課程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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

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

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

  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

  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

  8. 資料取得方式 • 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 script • Wirte a XML file • Create a Data Input Method • Create or choose a Data Template • Create or choose a Graph Template

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

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

  11. 資料的取得 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=-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 \

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

  15. 資料的取得 -實作 2 • 以Data queries 方式 ,監控本機的 service • ( Lab 4 ) • 需用到基本的 XML 語法 • 做完此 Lab 說明 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 的檔案架構如下: My_plugin/ docs/ CHANGELOG images/ mylogo.png (tab .jpg檔) html/ LICENSE README index.php setup.php (plugin 的安裝檔) myplugin.php (主程式)

  21. 內容 : <?php header("Location:../index.php"); ?> 將 plugin的首頁header 交由上一層處理, 上一層即是 PA 架構的index.php PA強制所有plugin 都導回 Cacti的首頁處理 Cacti Plugin 檔案架構 index.php

  22. 必要的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

  23. 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' => 'zestyang@yuanta.com', 'url' => 'http://www.yuanta.com.tw' ); }

  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"><imgsrc="' . $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"><imgsrc="' . $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動作

More Related