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、參考
- rrdtool 教學
- Cacti 中文研究站
- Tommy 碎碎念 : 讓 cacti 也能用中文
- Tommy 碎碎念 : RRDTool 1.2.x 中文化
- Tommy 碎碎念 : RRDTool 1.2.x 中文化 Part II
- The Cacti Manual
- RRDTool+Cactiによるサーバ監視(Linux編)
- ごった煮 - FreeBSD導入記(覚え書き) - RRDTOOL+cactiによるマシン観測
- CACTI 流量監控工具
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