︿
Top

1、前言

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、前言
2、實作環境
3、安裝及設定
          步驟1.安裝 net-snmp、rrdtool、cacti 套件
          步驟2.設定 SNMP 設定檔 (snmpd.conf)
          步驟3.啟動 SNMP 服務
          步驟4.設定 Cacti 相關事宜
          步驟5.初始化 Cacti
4、安裝 Cacti plugins - monitor v0.7
          步驟1.下載 Cacti plugins - monitor v0.7
          步驟2.執行 Cacti plugins - monitor v0.7
5、參考
6、Me FAQ
          Q1.登入到 cacti 管理介面後看不到圖?
          Q2.為何新增要監控的對象狀態總是 Unknown?
          Q3.無法將 cacti.sql 匯入資料庫當中?
          Q4.CMDPHP: Poller0 ERROR: SQL Assoc Failed!, Error:'1017'?
          Q5.CMDPHP: Poller0 ERROR: A DB Exec Failed!, Error:'1062'?





2、實作環境

  • FreeBSD 8.2-RELEASE
  • cacti-0.8.7g
  • net-snmp-5.5_4 
  • rrdtool-1.2.30_1
  • plugins-monitor 0.7





3、安裝及設定

步驟 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'; 
 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/cron47986: (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

鍵入網址 http://www.weithenn.org/cacti/index.php 連結到您的 cacti 控制頁面,按下 Next 準備初始化 cacti。


出現下拉式選擇,詢問您是新安裝 cacti 還是要升級 cacti,本次實作為選擇新安裝 (New Install) 確定後按下 Next 繼續初始化 cacti。


檢查相關執行檔及套件版本 (SNMP、RRDTool) 是否符合,確定後按下 Next 繼續初始化 cacti 初始化完成。


出現 cacti 管理介面登入視窗,預設的管理者帳號為 admin 管理者密碼為 admin。


登入 cacti 後系統會請您更新原管理者密碼,請輸入新的管理者密碼。






4、安裝 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
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,執行完 fast_poller.php 後應該會看到 monitor plugins 的選項。
sudo -u cacti php fast_poller.php      //這樣 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  //可變換聲音檔及圖檔







5、參考






6、Me FAQ

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

Error Message:
當登入到 cacti 管理介面後圖檔的位置都顯示為 xx?


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




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

Error Message:
新增監控對象後狀態總是 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 了




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

Error Message:
當執行匯入 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:




Q4. CMDPHP: Poller0 ERROR: SQL Assoc Failed!, Error:'1017'?

Error Message:
Cacti 雖然 Realtime 有流量,但是在 graphs 當中的圖都沒有更新 (當然 .rrd 圖檔也未更新),並且查看 /var/www/html/log/cacti.log 發現如下錯誤訊息。
 02/02/2013 09:50:26 PM - CMDPHP: Poller0 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




Q5. CMDPHP: Poller0 ERROR: A DB Exec Failed!, Error:'1062'?

Error Message:
查看 /var/www/html/log/cacti.log 發現如下錯誤訊息。
 02/02/2013 09:56:02 PM - CMDPHP: Poller0 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
文章標籤: