[CentOS 7] 流量監控不求人,第一次安裝 Cacti 就上手

by 3月 03, 2016 33 意見        

某一天,老闆突然開口問了一件事:「為什麼最近上網的速度那麼慢?」
我們可能會回答:「因為對外的頻寬太小」、「因為使用的總流量太大」、「因為上班尖峰時間的需求較高」......

可是,
口說無憑,該從哪裡生實際資料出來佐證我們的說法,同時評估未來預計的需求呢?
最後更新日期  - 2016/06/07

說到資源或流量的監控,大家第一個想到的應該會是 MRTG (Multi Router Traffic Grapher),從名字就可以知道它本來最主要的功能會是在網路流量監控,當然後來也可以監控其他的資源,但是介面陽春,可以調整的參數也少 ,例如時間間隔調不了、多設備流量不能同時顯示 ... 之類的。


後來 MRTG 的原作者開發了另一套監控工具 RRDTool,改善了這許多的問題,參數的調整彈性超大,圖表繪製的能力變得超強,但是 ~~~  設定語法的難度比起 MRTG 也大幅升高,真是有一好沒兩好。


這時候好心的網友又出現了,RRDTool 的救星 Cacti 出現了,這是一套用 PHP 撰寫的套件,可以將 RRDTool 的數據存到 MySQL / MariaDB 資料庫裡,還提供了友善的 Web UI,便於我們後續的追蹤與分析。


事前準備


請參照 CentOS 7.0 不完全安裝手冊 系列文章,完成作業系統的安裝,我們用的是 CentOS 7 x86_64 Minimal 的版本。


開始安裝


CentOS 官方套件庫沒有收錄,所以我們要從 EPEL 套件庫安裝。
sudo yum -y install epel-release

如果有勇者要自己解壓縮跟設定的話,傳送門在這邊:
http://www.cacti.net/downloads/cacti-0.8.8g.tar.gz

Cacti 需要 Apache / Nginx、MySQL / MariaDB、PHP、RRDTool、net-snmp,還有一些 PHP 的相關套件,就讓 yum 自己幫我們安裝所有相依套件吧。
sudo yum -y install cacti mariadb-server

啟動 MariaDB,並讓它在開機後自動啟動。
sudo systemctl restart mariadb && sudo systemctl enable mariadb

進行 MariaDB 的安全性初始設定,這些參數可以參考 [CentOS 7] 整合 Nginx、MariaDB、PHP 7 組成 LEMP Server 裡 MariaDB 設定。
sudo mysql_secure_installation

連線進 MariaDB 命令列介面。
mysql -u root -p

建立 Cacti 專用的資料庫:cactidb。
create database cactidb;

建立使用者:user,設定密碼:password,並允許它可以存取 cactidb 資料庫裡的所有資料表。
grant all on cactidb.* to 'user' identified by 'password';

重新載入權限。
flush privileges;

退出 Mariab 命令列介面。
exit


確認一下新增的使用者可以進入資料庫。
mysql -u user -p -h localhost

用 Cacti 的初始用 SQL 指令檔,將資料庫、資料表的格式與資料匯入。
mysql -u user -p -A cactidb < /usr/share/doc/cacti-0.8.8b/cacti.sql

編輯 Web UI 設定檔。
sudo vi /etc/httpd/conf.d/cacti.conf

因為我們用的是 Apache HTTP Server 2.4.6,所以在 2.4 的段落裡修改,允許所有 IP 進行連線。
Require all granted

設定資料庫設定檔。
sudo vi /etc/cacti/db.php

這些設定值就是在先前在 MariaDB 裡新增的資料庫、使用者及密碼。
$database_default  = "cactidb";
$database_username = "user";
$database_password = "password";

編輯 PHP 主設定檔。
sudo vi /etc/php.ini

指定時區為台北。
date.timezone = "Asia/Taipei"

開放防火牆上的 HTTP 通訊埠。
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --reload

重新啟動 Apache,並讓它在開機後自動啟動。
sudo systemctl restart httpd && sudo systemctl enable httpd

編輯 Cacti 抓取資料的排程設定檔。
sudo vi /etc/cron.d/cacti

雖然會很消耗系統資源,不過我們這邊還是設定每一分鐘抓取一次資料。
*/1 * * * *     cacti   /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1


SNMP 設定


本機資料必須透過 SNMP 回報,所以我們設定一下 SNMP 的設定檔。
sudo vi /etc/snmp/snmpd.conf

第 41 行:com2sec notConfigUser  default       public,將 default 改成 127.0.0.1。
com2sec notConfigUser 127.0.0.1 public

第 62 行:access  notConfigGroup ""      any       noauth    exact  systemview none none,將 systemview 改成 all。
access  notConfigGroup ""      any       noauth    exact  all        none none

第 84 行:#view all    included  .1                               80,將 # 註解拿掉。
view all    included  .1                               80

重新啟動 SNMP。
sudo systemctl restart snmpd && sudo systemctl enable snmpd


Cacti 設定


用瀏覽器打開 Cacti 的 Web 介面,它會自動跳到安裝頁面。
http://192.168.88.155/cacti

這次是全新安裝,所以選擇「New Install」,如果是升級的話就要選擇「Upgrade from cacti 0.8.x」,同時可以看到剛剛在 /etc/cacti/db.php 裡設定的資料庫名稱、使用者、平台。

這邊會檢查所有必要的套件是否已正確安裝,如果有任何一個訊息不是 [OK: FILE FOUND] 的話,別忘了把它補上。

最後按下「Finish」就完成了。


進入 Web UI


Web UI 設定完畢之後,就會自動跳到登入畫面,預設的帳號密碼是 admin / admin。

系統會馬上要求更改 admin 的密碼。

接著就進到 Cacti Web UI 的主畫面了。

如果我們馬上就打開圖表來看的話,很可能只會看到這樣子的空白畫面。


這是因為 Cacti 還沒有抓到回報的資料,先點選 Console -> System Utilities -> View Cacti Log File。

看一下 Cacti 是不是已經正確的抓到本機的 SNMP 資料。

確認有資料而且正確的話,稍等個 3 ~ 5 分鐘,就可以看到實際的圖表資料了。


異常排除


  • FATAL: Cannot connect to MySQL server on '127.0.0.1'. Please make sure you have specified a valid MySQL database name in 'include/config.php' 之類的錯誤訊息。

這個代表連不到 MariaDB / MySQL 資料庫,請確認 DB Server、網路連線是否正常,帳號、密碼、資料庫名稱是否正確。

  • 在 Cacti Installation Guide 的「Cacti Log File Path」顯示 [NOT FOUND]。
到 Cacti 官網下載 完整的安裝檔,解壓縮之後,將 Log 資料夾複製到 /usr/share/cacti/ 裡面。

或是在 /usr/share/cacti 目錄下,手動建立一個 log 目錄,然後在 log 目錄裡新增一個 cacti.log 空檔案,別忘了調整它們的 owner / own group 權限。


參考資料


圖片來源


更新紀錄

  • 2016/03/03 撰文。
  • 2016/06/07 更新異常處理問題,感謝匿名網友的留言協助。

Heracles Jam,江湖人稱「海公公」

IT 技術家 - 創站部落客

一個常用 Windows、慣用 macOS、愛用 Linux 的 3C 阿宅
現職 MIS / 業界講師 / 資訊顧問 / 部落客

33 則留言 :

  1. 請問開網頁就跳出cacti的部分如果沒跳出 那是哪個部分有問題

    回覆刪除
  2. 請問開啟網頁跳出cacti的部分如果沒有跳出是哪個部分有問題

    回覆刪除
    回覆
    1. 呃...
      「沒有跳出」指的是什麼沒有跳出? 有沒有錯誤訊息?

      刪除
  3. 老師謝啦 , 但 7 版 某些指令都翻新好不習慣阿。
    我發現我都卡在資料庫帳號密碼沒有連結到
    or 防火牆。

    回覆刪除
  4. 老師謝啦
    我都卡在資料庫帳號密碼
    ( 7 翻新指令 好難搞阿)

    回覆刪除
  5. 重新安裝數次
    檢查所有必要的套件的步驟
    [NOT FOUND]Cacti Log File Path (略)
    路徑為: /usr/share/cacti/log/cacti.log

    請問是少了哪個套件呢 謝謝

    回覆刪除
    回覆
    1. 後來解決,自問自答一下,

      去cacti網站下載壓縮檔,將Log資料夾放入cacti資料夾,
      即解決問題

      刪除
    2. 感謝樓上朋友的分享,方便把完整的錯誤訊息和下載連結貼上來嗎?
      我可以把它加到「異常排除」的段落裡,讓其他朋友也可以參考。

      刪除
    3. 你好, 近期出差沒有用到測試電腦,先簡單回復。
      貴網站的圖片
      https://2.bp.blogspot.com/-IKm_6rSYICQ/VtaK9LKgOGI/AAAAAAAAMiQ/hKmRzQkW3fk/s1600/install-cacti-graphing-system-monitoring-tool-on-centos-7-043.jpg
      在Cacti Log Filie Path的項目顯示[NOT FOUND]Cacti Log File Path,在/usr/share/cacti/內沒有log資料夾。
      解決辦法是去cacti網站下載http://www.cacti.net/downloads/cacti-0.8.8h.tar.gz
      解壓縮將Log資料夾複製到/usr/share/cacti/ 裡面。

      刪除
    4. 已更新內容,感謝你的協助 .... ^^

      刪除
    5. 我是卡在 /usr/share/cacti/log/cacti.log is not readable.
      後來關閉SELinux就可以了,但不是一個好的解決辦法。

      刪除
  6. 您好,我於 Console -> System Utilities -> View Cacti Log File 步驟時,畫面依舊顯示空白,請問問題是出在哪呢?httpd 與 snmpd 皆以重啟過,煩請您協助了,謝謝

    回覆刪除
    回覆
    1. 這個代表 Catti 撈不到資料,常見的問題在:
      1. SNMP 設定值錯了,或服務沒起來
      2. Catti 的排程沒有正確運作,重覆運作的時間頻率太久

      刪除
  7. 版主你好,在使用你提供的安裝方式,目前出現了一點問題,在最後安裝cacti gui的畫面上出現ERROR: Your Cacti database login account does not have access to the MySQL TimeZone database. Please provide the Cacti database account "select" access to the "time_zone_name" table in the "mysql" database, and populate MySQL's TimeZone information before proceeding.
    這訊息,我查了一下,好像是1.0.4版才會發生的狀況,但我用了網上很多前輩的方式去解決,可是還是會出現這個訊息,不知版主能否指導一下,該怎樣解決呢?

    回覆刪除
    回覆
    1. 我自己是沒遇到啦,
      就錯誤訊息看來,它是說我們在 MySQL/MariaDB 用的帳號沒辦法存取 TimeZone 這個 DB。
      而解決的方法是只要 grant 使用者帳號,增加 select 權限到 mysql 資料庫的 time_zone_name 這張表就可以了。

      刪除
    2. 請問一下這問題具體的指令該如何下?

      刪除
    3. 指令語法類似這樣子:
      GRANT SELECT ON mysql.time_zone_name TO 'user'@'localhost';

      詳細請參閱 MySQL 官方文件
      https://dev.mysql.com/doc/refman/5.7/en/grant.html

      刪除
  8. 我照著步驟做進入cacti顯示
    Forbidden

    You don't have permission to access /cacti/ on this server.

    回覆刪除
    回覆
    1. 錯訊訊息是指權限不足,
      請檢查一下 cacti 的目錄權限,跟 apache 的 owner/group/目錄 ... 等權限設定有沒有匹配。

      刪除
  9. 我也是照著步驟,結果無法使用
    Forbidden

    You don't have permission to access /cacti/ on this server.

    回覆刪除
    回覆
    1. 請檢查一下 /usr/share/cacti 的權限

      刪除
    2. 已經開放權限還是無法

      刪除
  10. 您好..我也遇到相同問題
    You don't have permission to access /cacti/ on this server.
    請問需要確認哪個資料夾的權限呢?

    回覆刪除
    回覆
    1. 請檢查一下 /usr/share/cacti 的權限

      刪除
    2. cat /var/log/httpd/error_log
      我看到的問題是找不到 index.html
      然後 vi /etc/httpd/conf/httpd.conf 把 index.html 改成 index.php
      restart httpd
      #systemctl restart httpd

      刪除
  11. 我導入mysql -u user -p -A cactidb < /usr/share/doc/cacti-0.8.8b/cacti.sql
    出現了以下問題
    -bash: /usr/share/doc/cacti-0.8.8b/cacti.sql: No such file or directory
    請問有什麼問題解決呢?

    回覆刪除
    回覆
    1. 這個訊息的意思是找不到這個目錄或檔案,很可能是因為改版之後有改變,可以試著找一下 /usr/share/doc/cacti 開頭的目錄。

      刪除
  12. 當我嘗試輸入 sudo systemctl restart snmp && sudo systemctl enable snmpd
    出現以下錯誤
    Failed to restarted snmp service: unit not found

    回覆刪除
  13. 完成設定後 在Chrome輸入 http://XXX.XXX.XXX.XXX/cacti
    出現以下信息
    Forbidden
    You don't have permission to access /cacti/ on this server.

    回覆刪除
    回覆
    1. 已根據設定 # require host localhost
      require all granted
      上網尋找到/etc/httpd/conf.d/cacti.conf 里 allow 網段or ip 和重啟httpd services, 更改後也是無法成功.

      刪除
  14. Forbidden
    You don't have permission to access /cacti/ on this server.

    原因是因為 沒有安裝PHP的程式
    補上一句
    sudo yum install php php-gd php-mysql php-mcrypt php-mbstring
    就可以了

    回覆刪除
    回覆
    1. 我的問題跟你一樣
      Forbidden
      You don't have permission to access /cacti/ on this server.
      補上
      sudo yum install php php-gd php-mysql php-mcrypt php-mbstring
      再補上 重新啟動 Apache,並讓它在開機後自動啟動。
      sudo systemctl restart httpd && sudo systemctl enable httpd
      即可解決囉~感謝

      刪除