站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

RRDTool-各項數據流量統計

最後編輯

增加:

> === Q.CMDPHP: Poller[0] ERROR: SQL Assoc Failed!, Error:'1017'? ===
> '''''Error Meaage:'''''
> Cacti 雖然 Realtime 有流量,但是在 graphs 當中的圖都沒有更新 (當然 .rrd 圖檔也未更新),並且查看 /var/www/html/log/cacti.log 發現如下錯誤訊息。
> 02/02/2013 09:50:26 PM - CMDPHP: Poller[0] ERROR: SQL Assoc Failed!, Error:'1017', SQL:"select poller_output.output,
> poller_output.time, poller_output.local_data_id, poller_item.rrd_path, poller_item.rrd_name, poller_item.rrd_num f
> rom (poller_output,poller_item) where (poller_output.local_data_id=poller_item.local_data_id and poller_output.rrd_nam
> e=poller_item.rrd_name)"
> '''''Ans:'''''
> 原因在於 poller_output Table 有問題,使用 '''truncate table poller_output;''' 指令即可修復,操作步驟如下:
> #mysql -u root -p //登入 MySQL Database
> Enter password:
> Welcome to the MySQL monitor. Commands end with ; or \g.
> Your MySQL connection id is 19069
> Server version: 5.0.68 Source distribution
> Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
> mysql> show databases; //顯示資料庫
> +--------------------+
> | Database |
> +--------------------+
> | information_schema |
> | cacti |
> | mysql |
> | syslog |
> | test |
> +--------------------+
> 5 rows in set (0.00 sec)
> mysql> use cacti //選擇 cacti 資料庫
> Reading table information for completion of table and column names
> You can turn off this feature to get a quicker startup with -A
> Database changed
> mysql> select count(*) from poller_output; //查看 poller_output table
> ERROR 1017 (HY000): Can't find file: 'poller_output' (errno: 2)
> mysql> truncate table poller_output; //進行修復
> Query OK, 0 rows affected (0.00 sec)
> mysql> select count(*) from poller_output; //再次查看 poller_output table
> +----------+
> | count(*) |
> +----------+
> | 0 |
> +----------+
> 1 row in set (0.00 sec)
> mysql>exit
> Bye
> === Q.CMDPHP: Poller[0] ERROR: A DB Exec Failed!, Error:'1062'? ===
> '''''Error Meaage:'''''
> 查看 /var/www/html/log/cacti.log 發現如下錯誤訊息。
> 02/02/2013 09:56:02 PM - CMDPHP: Poller[0] ERROR: A DB Exec Failed!, Error:'1062',
> SQL:"insert into settings values ('syslog_last_incoming','18801752')'
> '''''Ans:'''''
> 原因在於 syslog_last_incoming 有問題,解決操作步驟如下:
> #mysql -u root -p //登入 MySQL Database
> Enter password:
> Welcome to the MySQL monitor. Commands end with ; or \g.
> Your MySQL connection id is 19069
> Server version: 5.0.68 Source distribution
> Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
> mysql> show databases; //顯示資料庫
> +--------------------+
> | Database |
> +--------------------+
> | information_schema |
> | cacti |
> | mysql |
> | syslog |
> | test |
> +--------------------+
> 5 rows in set (0.00 sec)
> mysql> use cacti //選擇 cacti 資料庫
> Reading table information for completion of table and column names
> You can turn off this feature to get a quicker startup with -A
> Database changed
> mysql> delete from settings where name = 'syslog_last_incoming' ; //刪除該值
> Query OK, 1 row affected (0.00 sec)
> mysql> exit //離開資料庫
> Bye


前言

[RRDTool] 為 MRTG 進階版,原 MRTG 作者覺得 MRTG 有缺點 (例如 無法一個流量圖集合所有相關要統計的數據) 所以便又著手開發 [RRDTool][RRDTool] 一樣為利用 SNMP 協定,去偵測有提供 SNMP 資訊的設備來畫出數據統計流量圖,原 RRDTool 1.0.x 版本時時是利用 GD 來畫出數據統計流量圖,在 RRDTool 1.2.x 版本之後作者為了使數據統計流量圖能匯出 PDF 文件格式,因此便改為使用 libart 及 freetype 來畫出數據統計流量圖 (雖然效率慢很多),但因為 [RRDTool] 語法必須要深入研究因此有人利用 [PHP] 寫出 [Cacti] 這個套件使您比較容易控制 [RRDTool],同時也有許多的 [Cacti Plug-ins] 可以使用。

實作環境

安裝及設定

步驟1.安裝 net-snmp、rrdtool、cacti 套件

安裝 net-snmp (使本機器能吐出 SNMP Information) 及相關套件

 #cd /usr/ports/net-mgmt/net-snmp        //切換至安裝路徑
 #make install clean                     //安裝套件並清除安裝過程中產生不必要檔案

安裝 rrdtool (收集 SNMP Information 後統計收集數據畫出圖表)

 #cd /usr/ports/net/rrdtool              //切換至安裝路徑
 #make install clean                     //安裝套件並清除安裝過程中產生不必要檔案

安裝 cacti (網頁介面方便設定 rrdtool)

 #cd /usr/ports/net-mgmt/cacti           //切換至安裝路徑
 #make install clean                     //安裝套件並清除安裝過程中產生不必要檔案

步驟2.設定 SNMP 設定檔 (snmpd.conf)

設定 SNMP 設定檔 snmpd.conf 內容如下

 #cd /usr/local/share/snmp               //切換至 snmp 目錄
 #vi  snmpd.conf                         //自行建立-內容如下
 rocommunity   mrtg                      //community name (read-only)
 syslocation   Taipei 7F                 //主機所在位置(說明)
 syscontact    weithenn@weithenn.org     //管理者 Email

步驟3.啟動 SNMP 服務

修改 /etc/rc.conf 檔以便系統重新開機時能自動啟動 SNMP 服務

 #vi /etc/rc.conf                        //編輯 rc.conf
 snmpd_enable="YES"                      //已便重開機時能自動啟動 SNMP 服務

啟動 SNMP 服務

 #/usr/local/etc/rc.d/snmpd start        //啟動 snmp 服務
 Starting snmpd.

檢查本機是否可吐出 SNMP Information

 #snmpwalk -c mrtg -v 1 localhost        //檢查是否可吐出 SNMPv1 資訊
 #snmpwalk -c mrtg -v 2c localhost       //檢查是否可吐出 SNMPv2c 資訊
 SNMPv2-MIB::sysDescr.0 = STRING: FreeBSD cacti.weithenn.idv.tw 6.2-RELEASE-p5 FreeBSD 6.2-RELEASE-p5 
 root@cacti.weithenn.idv.tw:/usr/obj/usr/src/sys/cacti-Monitor i386
 SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.8
 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (17596) 0:02:55.96
 SNMPv2-MIB::sysContact.0 = STRING: weithenn <weithenn@weithenn.idv.tw>
 SNMPv2-MIB::sysName.0 = STRING: cacti-monitor.weithenn.idv.tw
 ...略...

檢查 SNMP Log 可看到本機自行連結自已的 SNMP 要求

 #tail /var/log/snmpd.log
 Connection from UDP: [127.0.0.1]:56682

步驟4.設定 Cacti 相關事宜

步驟4-1.建立給 cacti 用的 mysql 資料庫

建立一個名為 cacti 的 MySQL 資料庫,已便到時放置 Cacti 相關設定及資料

 #mysqladmin -u root -p create cacti          //利用 MySQL Admin 來新增資料庫
 Enter password:                              //輸入您的 MySQL Admin Password

步驟4-2.設定管理 cacti 資料庫帳戶

建立一個專門用來存取 cacti 資料庫的使用者帳號 cactiuser 及密碼 cacti123

 #mysql -u root -p                            //利用 MySQL Admin 登入 MySQL
 Enter password:                              //輸入您的 MySQL Admin Password
 Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection id is 90253
 Server version: 5.1.19-beta FreeBSD port: mysql-server-5.1.19
 Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 mysql> GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'cacti123';  //新增 cactiuser 使用者能存取 cacti 資料庫
 Query OK, 0 rows affected (0.00 sec)
 mysql> FLUSH PRIVILEGES;                     //使剛才的變更生效
 Query OK, 0 rows affected (0.00 sec)
 mysql> quit                                  //離開 MySQL
 Bye

步驟4-3.匯入 cacti 預設資料庫

利用剛才新增的 MySQL 使用者 cactiuser 來匯入 cacti 預設的資料庫 cacti.sql 檔案 (內含一些建好的 Table ...等)

 #mysql -u cactiuser -p cacti < /usr/local/share/cacti/cacti.sql   
 Enter password:                              //輸入 cactiuser 的密碼

步驟4-4.修改連接資料庫設定檔

修改 cacti 用來連接 MySQL 資料庫的 PHP 設定檔 db-settings.php

 #vi /usr/local/share/cacti/include/db-settings.php
 <?php
 /* make sure these values refect your actual database/host/user/password */
 $database_type = "mysql";                    //指定資料庫類型
 $database_default = "cacti";                 //指定資料庫名稱
 $database_hostname = "localhost";            //指定資料庫主機
 $database_username = "cactiuser";            //指定存取資料庫使用者名稱
 $database_password = "cacti123";             //指定存取資料庫使用者密碼
 $database_port = "3306";                     //指定存取資料庫的通訊埠
 ?>

步驟4-5.使用 cacti 使用者來編輯排程

因為安裝 cacti 套件時會順便新增 cacti 這個系統帳號及郡組 (別跟 mysql 使用者 cactiuser 搞混了) 所以這時要利用系統帳號 cacti 這個使用者帳號來建立排程,以便屆時可定期來執行 poller.php 這個檔案

 #crontab -e -u cacti                         //切換為 cacti 身份編輯排程
 */5 * * * * /usr/local/bin/php /usr/local/share/cacti/poller.php > /dev/null 2>&1

上述排程設定為每 5 分鐘利用 cacti 這個系統帳號去執行 poller.php 這個 php 檔案,接下來我們查看排程 Log 確定該排程是由 cacti 這個系統帳號去執行的

 #tail /var/log/cron |grep cacti              //確認排程是 cacti 這個 user 執行
 Jun 26 16:35:00 vivatv-monitor /usr/sbin/cron[47986]: (cacti) CMD
 (/usr/local/bin/php /usr/local/share/cacti/poller.php > /dev/null 2>&1)

同時檢查一下這二個目錄權限是不是已經換為 cacti 這個系統帳號擁有 (裝 cacti 時會自動作好這個動作,不過檢查一下比較好以確定到時 cacti 能寫入資料)

 drwxr-xr-x  2 cacti  cacti     512  6 28 11:02 log     //cacti 執行時 log 放置處
 drwxr-xr-x  2 cacti  cacti     512  6 28 11:10 rra     //cacti 統計數據圖資料存放處

步驟4-6.修改 Apache 設定檔

修改 Apache 設定檔 httpd.conf 加入 alias cacti 目錄內容如下,修改後記得重啟 Apache 服務設定才會生效哦。

 #vi /usr/local/etc/apache/httpd.conf
 <Directory "/usr/local/share/cacti/">
        Options None
        AllowOverride None
        Order allow,deny
        Allow from all                                  //或改為你允許的網段
 </Directory>

步驟4-7.修改 Cacti 設定檔

修改 Cacti 設定檔 config.php 內容如下,指定的 URL Path 為相對路徑,也就是相對於您網站根目錄的相對路徑 (設定錯誤將造成 cacti 控制介面發生找不到圖片的狀況)

 #vi /usr/local/share/cacti/include/config.php
 $config["url_path"] = '/';                             //預設值
 $config["url_path"] = '/cacti/';                       //修改後 http://www.weithenn.org/cacti

步驟5.初始化 Cacti

  1. 鍵入網址 http://www.weithenn.org/cacti/index.php 連結到您的 cacti 控制頁面,按下 Next 準備初始化 cacti
  2. 出現下拉式選擇,詢問您是新安裝 cacti 還是要升級 cacti,本次實作為選擇新安裝 (New Install) 確定後按下 Next 繼續初始化 cacti
  3. 檢查相關執行檔及套件版本 (SNMP、RRDTool) 是否符合,確定後按下 Next 繼續初始化 cacti 初始化完成
  4. 出現 cacti 管理介面登入視窗,預設的管理者帳號為 admin 管理者密碼為 admin
  5. 登入 cacti 後系統會請您更新原管理者密碼,請輸入新的管理者密碼

準備初始化 cacti 選擇新安裝 (New Install) 檢查相關執行檔及套件版本 初次登入 cacti 變更管理者密碼

安裝 Cacti plugins - monitor v0.7

本次實作為安裝 Monitor Plugin 其功用為在 cacti 管理介面加入一個監控主機的外掛,當設定監控的主機狀態變成 Down 時可發出聲音通知管理者。

步驟1.下載 Cacti plugins - monitor v0.7

切換至 Cacti 存放 Plugins 資料夾後下載 Monitor Plugins

 #cd /usr/local/share/cacti/plugins ; mkdir monitor              //切換至 plugin 目錄並建立 monitor 資料夾
 #fetch http://download.cactiusers.org/downloads/monitor.zip     //下載 monitor plugin
 monitor.zip                            100% of  232 kB 6684 kBps
 #unzip monitor.zip                                              //解壓 monitor plugin
 Archive:  monitor.zip
  inflating: images/orange.gif
  inflating: images/blue.gif
  inflating: images/button_nosound.gif
  inflating: images/green.gif
  inflating: images/index.php
  inflating: images/red.gif
  inflating: images/tab_monitor.gif
  inflating: fast_poller.php
  inflating: fast_poller_cmd.php
  inflating: index.php
  inflating: LICENSE
  inflating: monitor.php
  inflating: README
  inflating: setup.php
  inflating: wz_tooltip.js
  inflating: sounds/attn-noc.wav
  inflating: sounds/index.php

步驟2.執行 Cacti plugins - monitor v0.7

在未執行 fast_poller.php 之前您的 cacti 控制介面應該如左下圖所示,執行完 fast_poller.php 後應該會看到 monitor plugins 的選項如右下圖所示,請鍵入如下指令來執行 fast_poller.php

 #sudo -u cacti php fast_poller.php               //這樣 monitor plugins 的選項就出現

尚未載入 Monitor Plugins 載入 Monitor Plugins 成功

當然若是要定期去檢查監控的主機也需要把 fast_poller.php 利用 cacti 身份加入排程內

 #crontab -e -u cacti                             //切換為 cacti 身份編輯排程
 */1 * * * * /usr/local/bin/php /usr/local/share/cacti/plugins/monitor/fast_poller.php > /dev/null 2>&1

後續操作 Cacti plugins - monitor v0.7 可在 cacti 管理介面內找到,下圖為啟用 Monitor Plugins

 Console >> Devices >> (Edit)                     //可調整是否對該主機開啟監控
 Console >> Cacti Settings >> Misc                //可變換聲音檔及圖檔

載入 Monitor Plugins 成功

參考

[ rrdtool 教學]

[資安論壇 :: 觀看文章 - 你還在用 MRTG 嗎?使用 cacti 監測系統性能]

[Cacti 中文研究站]

[CACTI 流量監控工具 ]

[Tommy 碎碎念 : 讓 cacti 也能用中文]

[Tommy 碎碎念 : RRDTool 1.2.x 中文化]

[Tommy 碎碎念 : RRDTool 1.2.x 中文化 Part II]

[四位的 FreeBSD 學習技術文件 - CACTI 流量監控工具]

[4wei-diary: FBSD cacti traffic problem]

[The Cacti Manual]

[幫你的CACTI加個外掛... - Linux - Free&Forever]

[Using SNMP and RRDTool on FreeBSD]

[Ada Hsu 的胡思亂想 :: start/2006-04-26/1]

[Cacti 中文研究站 MySQL Stats]

[利用 cacti 及 RRDTool 來監看網路狀況 « maTT cHEn *{online}]

[魔人啾啾的小人眼世界 / Cacti 安裝筆記分享]

[Linux服務器架設:我的CACTI--FAQ — 通信產業 - 賽迪網]

[cacti介紹 « 小兔的筆記本]

[RRDTool+Cactiによるサーバ監視(Linux編)]

[cacti インストールメモ]

[ごった煮 - FreeBSD導入記(覚え書き) - RRDTOOL+cactiによるマシン観測]

[(BSD) Cacti - (・∀・)イイ!!Memo]

[cacti ILC-BBS DokuWiki]

[Open Addict - Deploying a FreeBSD 6.2 Server]

[Ada Hsu 的胡思亂想 Computer-Linux-2004-05-19-1]

[CACTI 流量監控工具]

Me FAQ

Q.登入到 cacti 管理介面後看不到圖?

Error Meaage:

當登入到 cacti 管理介面後圖檔的位置都顯示為 xx 如下圖所示

無法顯示 cacti 圖片

Ans:

修改 Cacti 設定檔 config.php 內容如下,指定的 URL Path 為相對路徑,也就是相對於您網站根目錄的相對路徑

 #vi /usr/local/share/cacti/include/config.php
 $config["url_path"] = '/';                             //預設值
 $config["url_path"] = '/cacti/';                       //修改後 http://www.weithenn.org/cacti

Q.為何新增要監控的對象狀態總是 Unknown?

Error Meaage:

新增監控對象後狀態總是 Unknown 但 cacti 確定有抓到 SNMP Information 了?

Ans:

問題點在於不夠了解 cacti 的運作方式,雖然新增監控對象並且也抓得到該主機的 SNMP Information 但是因為沒有設定監控的項目及新增到 graphs 項目,因此狀態當然是 Unknown (等於還沒開始監控),以下是在 #bsdchat ychsiao 長輩指點內容

 16:46 * weithenn 怪,現在又變成 localhost 是 up 其它的還是 Unknown...Orz
 16:48 * weithenn cacti沒那麼難吧?為何我搞不定...丁丁化中....
 16:56 <@ychsiao> cacti很簡單啊orz
 17:00 <@weithenn> ychsiao:但我裝好只要新增的 device status 都是 Unknown
 17:01 * weithenn snmpd.conf 有要特地設定什麼嗎?
 17:07 <@weithenn> ychsiao:新增的 device 內是可以看到 snmp information 的但 status 都是 Unknown
 17:14 * weithenn 當我點選至新增的 device 內同時去看該機器的 snmpd.log 也都有看到那台 cacti 在抓我的 snmp 訊息...
 17:40 <@ychsiao> Associated Data Queries 有 snmp-interface stats ?
 17:41 <@ychsiao> host-type generic snmp-enabled host..
 17:46 <@weithenn> ychsiao:Associated Data Queries 有 snmp-interface stats--> Success [12 Items, 6 Rows]
 17:48 <@weithenn> ychsiao:Host Template 從 None 改成 generic snmp-enabled host,還是一樣 Status Unknown
 17:49 * weithenn 補充一下,改完後有跑 poller.php
 18:01 <@ychsiao> status unknown 是指 ping 不到之類的吧... 你圖表有出來嗎?
 18:06 <@weithenn> ychsiao:出來了,剛打開 debug mode,是說找不到 rrd 檔,然後在執行一次 poller.php 就可以了,現在 status 也變成 up 了

Q.無法將 cacti.sql 匯入資料庫當中?

Error Meaage:

當執行匯入 cacti.sql 預設資料庫結構時出現如下錯誤訊息且無法匯入?

 #mysql -u dfnoc -p cacti < /usr/local/share/cacti/cacti.sql
  Enter password:
  ERROR 1064 (42000) at line 5: You have an error in your SQL syntax; check the manual that corresponds to your
  MySQL server version for the right syntax to  use near 'TYPE=MyISAM' at line 6

Ans:

請將 cacti.sql 內的 TYPE=MyISAM 改為 ENGINE=MyISAM 即可匯入成功。

 #sed -i -e 's/TYPE=/ENGINE=/g' cacti.sql
 #mysql -u cactiuser -p cacti < /usr/local/share/cacti/cacti.sql
 Enter password:

Q.CMDPHP: Poller[0] ERROR: SQL Assoc Failed!, Error:'1017'?

Error Meaage:

Cacti 雖然 Realtime 有流量,但是在 graphs 當中的圖都沒有更新 (當然 .rrd 圖檔也未更新),並且查看 /var/www/html/log/cacti.log 發現如下錯誤訊息。

 02/02/2013 09:50:26 PM - CMDPHP: Poller[0] ERROR: SQL Assoc Failed!, Error:'1017', SQL:"select  poller_output.output,
 poller_output.time,  poller_output.local_data_id,  poller_item.rrd_path,  poller_item.rrd_name,  poller_item.rrd_num  f
 rom (poller_output,poller_item)  where (poller_output.local_data_id=poller_item.local_data_id and poller_output.rrd_nam
 e=poller_item.rrd_name)"

Ans:

原因在於 poller_output Table 有問題,使用 truncate table poller_output; 指令即可修復,操作步驟如下:

 #mysql -u root -p        //登入 MySQL Database
 Enter password:
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 19069
  Server version: 5.0.68 Source distribution
  Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 mysql> show databases;   //顯示資料庫
  +--------------------+
  | Database           |
  +--------------------+
  | information_schema |
  | cacti              |
  | mysql              |
  | syslog             |
  | test               |
  +--------------------+
  5 rows in set (0.00 sec)
 mysql> use cacti        //選擇 cacti 資料庫
  Reading table information for completion of table and column names
  You can turn off this feature to get a quicker startup with -A
  Database changed
 mysql> select count(*) from poller_output;  //查看 poller_output table
  ERROR 1017 (HY000): Can't find file: 'poller_output' (errno: 2)
 mysql> truncate table poller_output;        //進行修復
  Query OK, 0 rows affected (0.00 sec)
 mysql> select count(*) from poller_output;  //再次查看 poller_output table
  +----------+
  | count(*) |
  +----------+
  |        0 |
  +----------+
  1 row in set (0.00 sec)
 mysql>exit
  Bye

Q.CMDPHP: Poller[0] ERROR: A DB Exec Failed!, Error:'1062'?

Error Meaage:

查看 /var/www/html/log/cacti.log 發現如下錯誤訊息。

 02/02/2013 09:56:02 PM - CMDPHP: Poller[0] ERROR: A DB Exec Failed!, Error:'1062', 
                          SQL:"insert into settings values  ('syslog_last_incoming','18801752')'

Ans:

原因在於 syslog_last_incoming 有問題,解決操作步驟如下:

 #mysql -u root -p        //登入 MySQL Database
 Enter password:
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 19069
  Server version: 5.0.68 Source distribution
  Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 mysql> show databases;   //顯示資料庫
  +--------------------+
  | Database           |
  +--------------------+
  | information_schema |
  | cacti              |
  | mysql              |
  | syslog             |
  | test               |
  +--------------------+
  5 rows in set (0.00 sec)
 mysql> use cacti        //選擇 cacti 資料庫
  Reading table information for completion of table and column names
  You can turn off this feature to get a quicker startup with -A
  Database changed
 mysql> delete from settings where name = 'syslog_last_incoming' ;  //刪除該值
  Query OK, 1 row affected (0.00 sec)
 mysql> exit             //離開資料庫
  Bye
Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com