Cacti 監控系統介紹與安裝(更新版)

由 Derek 發表於 六月 5, 2011 / 尚無評論

之前有寫過一篇Cacti 監控系統介紹與安裝 ,有興趣的可以參考看看。兩篇設定後都是可以使用的,只是寫這篇更新版主要是為了把一些相關資料再次重新整理一次。

 

前置動作

安裝Cacti會使用到的套件

統一把下載的檔案放在 /tmp

 

RPMforge :


[root@localhost ~]# cd /tmp   #統一把下載的資料存放在tmp

[root@localhost tmp]# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

[root@localhost tmp]# rpm –import http://apt.sw.be/RPM-GPG-KEY.dag.txt

                                                         #安裝 DAG GPG 金鑰

[root@localhost tmp]# rpm -K rpmforge-release-0.5.2-2.el5.rf.*.rpm

                                             #審核所下載的套件

[root@localhost tmp]# rpm -i rpmforge-release-0.5.2-2.el5.rf.*.rpm

                #安裝套件,這樣做會新增一個yum軟件庫的設定檔及匯入應有的GPG金鑰

[root@localhost tmp]# yum install htop   #安裝軟件

 

 

 MySQL Server :


[root@localhost ~]# yum install mysql-server mysql-devel

 

 

Apache


[root@localhost ~]# yum install httpd

 

 

PHP and PHP Modules (include LDAP Authentication Module)


[root@localhost ~]# yum install php php-mysql php-snmp php-ldap

 

 

RRDTool (需要加入 RPMForge 套件來源後,才能直接用 yum 安裝 RRDTool)


[root@localhost ~]# yum install libart_lgpl-devel zlib-devel libpng-devel freetype-devel dejavu-lgc-fonts cairo-devel libxml2-devel pango-devel pango  freetype

[root@localhost ~]# yum install rrdtool

 

 如果yum無法安裝的話請手動安裝

 

[root@localhost ~]# cd /tmp

[root@localhost ~]# wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.5.tar.gz

[root@localhost ~]# tar -zxvf rrdtool-1.4.5.tar.gz

[root@localhost ~]# cd rrdtool-1.4.5

[root@localhost ~]# export PKG_CONFIG_PATH=/usr/lib/pkgconfig/

[root@localhost ~]# ./configure

[root@localhost ~]# make && make install

[root@localhost ~]# ln -s /tmp/rrdtool-1.4.2 /usr/local/rrdtool


 

 

 

等等會使用到編譯原碼,所以安裝以下兩個套件


[root@localhost ~]# yum -y install gcc

[root@localhost ~]# yum -y install gcc-c++

 

 

Spine for Cacti for centos安裝


[root@localhost ~]# yum install net-snmp-devel mysql-devel openssl-devel libtool

[root@localhost ~]# cd /tmp

[root@localhost ~]# wget http://download.faq-book.com/Linux/Cacti/cacti-spine-0.8.7g-patched.tar.gz

[root@localhost ~]# tar -zxvpf cacti-spine-0.8.7g-patched.tar.gz

[root@localhost ~]# cd cacti-spine-0.8.7g

[root@localhost ~]# ./bootstrap

[root@localhost ~]# ./configure

[root@localhost ~]# make

[root@localhost ~]# make install

 

 

SNMP Library and Utility 可參考此篇 Linux SNMP安裝


[root@localhost ~]# yum install net-snmp net-snmp-libs net-snmp-utils

 

 

設定 SNMP


[root@localhost ~]# vim /etc/snmp/snmpd.conf

#註解下列三行

# 41

#com2sec notConfigUser  default       public

# 47, 48

#group   notConfigGroup v1           notConfigUser

#group   notConfigGroup v2c           notConfigUser

 

#能查詢的功能,格式為

# 57

#view    <VIEW_NAME>   included   .1.x

 view    systemview    included   .1.3.6.1.2.1.2 #設定可以抓取網卡資料

 view all    included  .1                               80 # 提供所有的 SNMP 資訊

 

#定義可以抓取資料的來源 建議未避免被其他第三方抓取可以將 public改為其他名稱

# 74, 75

#com2sec <USERNAME> <NETWORK_SOURCE> <COMM_STRING>

 com2sec local     localhost       public

 com2sec mynetwork 10.40.0.0/16    public

 

 

#設定使用者群組,格式為

#78 79 80 81

#group <GROUPNAME> <SNMP_VERSION> <USERNAME>

 group MyRWGroup  v1      local

 group MyRWGroup  v2c     local

 group MyROGroup  v1      mynetwork

 group MyROGroup  v2c     mynetwork

 

#存取權限設定,讓 local 可讀可寫,讓 mynetwork 只能讀

#94 95

#access <GROUPNAME> <CONTEXT> <SEC_MODEL> <SEC_LEVEL> <PREFIX> <READ> <WRITE> <NOTIF>

 access MyROGroup ""      any        noauth      exact     all    none   none    #network只能讀

 access MyRWGroup ""      any        noauth      exact     all    all    all     #local可讀可寫

 

 

 

 

 

 測試SNMP是否正常


[root@localhost ~]# snmpd -f –Le   #查看當前的SNMP有沒有出什麼錯

[root@localhost ~]#/etc/init.d/snmpd start  #啟動SNMP

[root@localhost ~]# snmpwalk -c public -v 2c localhost   #可測試看SNMP是否正常

 

 

設定 Apach


[root@localhost ~]# vi /etc/httpd/conf/httpd.conf

ServerName rhel5-cacti:80

 

 

啟動Apache, MySQL, SNMP 服務,設定開機自動啟動


[root@localhost ~]# /etc/init.d/httpd start

[root@localhost ~]# /etc/init.d/mysqld start

[root@localhost ~]# /etc/init.d/snmpd start

[root@localhost ~]# chkconfig httpd on

[root@localhost ~]# chkconfig mysqld on

[root@localhost ~]# chkconfig snmpd on

 

 

 安裝Cacti

可先到Cacti官網 http://www.cacti.net/downloads/  下載最新或是所需要的Cacti版本

這邊我是用cacti-0.8.7e為範例


[root@localhost ~]# cd /tmp

[root@localhost ~]# wget http://www.cacti.net/downloads/cacti-0.8.7e.tar.gz

[root@localhost ~]# tar -zxvpf cacti-0.8.7e.tar.gz

[root@localhost ~]#  mv cacti-0.8.7e /var/www/html/

 

 

建立 Cacri 的系統使用者


[root@localhost ~]# cd /var/www/html/

[root@localhost ~]# groupadd cactiuser     #建立一個cactiuser的群組

[root@localhost ~]# useradd -r -M cactiuser  #cactiuser可自己設定

[root@localhost ~]# usermod -G cactiuser apache  #apache加入到cactiuser組群

 

 

修改目錄權限


[root@localhost ~]# cd /var/www/html/

[root@localhost ~]# chown -R  root:root *

[root@localhost ~]# cd /var/www/html/cacti/

[root@localhost ~]# chown -R cactiuser: cactiuser  rra/ log/

 

 

設定MySQL

MySQL設定新密碼


[root@localhost ~]# mysqladmin -u root password NEW_PASSWORD

                                           # NEW_PASSWORD 部份可自行輸入

 

 

建立cacti 的資料庫


[root@localhost ~]# mysql -uroot -ppassword  #連線到MySQL

mysql> CREATE DATABASE cacti;                #建立Cacti 資料庫

mysql> GRANT ALL PRIVILEGES ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'cactipasswd';    #設定cacti 資料庫所有權限給本機的cactiuser 並設定密碼為                             cactipasswd,密碼也可自行修改

mysql> FLUSH PRIVILEGES;

mysql> quit

 

 

匯入cacti資料庫 :


[root@localhost ~]# mysql -u cactiuser --password=cactipasswd cacti < /var/www/html/cacti/cacti.sql          

檢查看看是否有匯入成功


[root@localhost ~]# mysql -u cactiuser --password=cactipasswd cacti

mysql>show tables;

mysql> quit

 

 

修改相關設定檔

修改Cacti設定檔 include/config.php 連接 MySQL 的使用者、密碼及資料庫名稱


[root@localhost ~]# vi /var/www/html/cacti/include/config.php

$database_type = "mysql";

$database_default = "cacti";

$database_hostname = "localhost";

$database_username = "cactiuser";         #修改為自行建立的資料庫使用者帳號

$database_password = "cactipasswd";       #修改為自行建立的資料庫使用者密碼

$database_port = "3306";

 

 

設定Spine修改連接資料庫的帳號密碼


[root@localhost ~]# cp  /usr/local/spine/etc/spine.conf  /etc/spine.conf

[root@localhost ~]# vi /etc/spine.conf

DB_Host         localhost

DB_Database     cacti

DB_User         cactiuser       #修改為自行建立的資料庫使用者帳號

DB_Pass         cactipasswd     #修改為自行建立的資料庫使用者密碼

DB_Port         3306

DB_PreG         0

 

 

測試Spine是否正常


[root@localhost ~]# /usr/local/spine/bin/spine

SPINE: Using spine config file [/etc/spine.conf]

SPINE: Version 0.8.7g starting

SPINE: Time: 2.7348 s, Threads: 1, Hosts: 4

 

 

設定排程


[root@localhost ~]# vi /etc/crontab

*/5 * * * * cactiuser /usr/bin/php /var/www/html/cacti/poller.php > /dev/null 2>&1

 

 

Cacti 後台設定

打開瀏覽器輸入自己的網址

http://your-server(ip)/cacti

會看到下圖

請點選【Next


 

 

一樣在點選【Next


 

 

 

此部份會檢查路徑若有問題,綠色字體會變成紅色告知。

此為路徑正常的圖

路徑設定為:

RRDTool Binary Path:                           /usr/bin/rrdtool

PHP Binary Path:                                  /usr/bin/php

snmpwalk Binary Path:                      /usr/bin/snmpwalk

snmpget Binary Path:                        /usr/bin/snmpget

snmpbulkwalk Binary Path:             /usr/bin/snmpbulkwalk

snmpgetnext Binary Path:               /usr/bin/snmpgetnext

Cacti Log File Path:                          /var/www/html/cacti/log/cacti.log

SNMP Utility Version:                      NET-SNMP 5.x

RRDTool Utility Version:                RRDTool 1.x.x


 

 

 此為路徑有問題的圖


 

 

登入的帳號密碼

登入的帳號密碼預設都是 admin


 

 接下來設定一下spinecacti裡的設定

Console】→【Settings】→【Paths】→【Spine Poller File Path

路徑位置加入 /usr/local/spine/bin/spine

 

 

修改Cacti使用的Poller Type

ConsoleSettingsPollerPoller Type

選擇spine

 

 

到這邊 Cacti的安裝大至上就完成了。

 

 

 

再來介紹Cacti 補丁

由於這邊是用Cacti 0.8.7e安裝,所以先說明Cacti 0.8.7e

有關補丁下載和說明也可參考官網【Cacti 0.8.7e補丁


[root@localhost ~]# cd /var/www/html/cacti

[root@localhost ~]# wget http://www.cacti.net/downloads/patches/0.8.7e/cli_add_graph.patch

[root@localhost ~]# wget http://www.cacti.net/downloads/patches/0.8.7e/snmp_invalid_response.patch

[root@localhost ~]# wget http://www.cacti.net/downloads/patches/0.8.7e/template_duplication.patch

[root@localhost ~]# wget http://www.cacti.net/downloads/patches/0.8.7e/fix_icmp_on_windows_iis_servers.patch

[root@localhost ~]# wget http://www.cacti.net/downloads/patches/0.8.7e/cross_site_fix.patch

[root@localhost ~]# patch -p1 -N < cli_add_graph.patch

[root@localhost ~]# patch -p1 -N < snmp_invalid_response.patch

[root@localhost ~]# patch -p1 -N < template_duplication.patch

[root@localhost ~]# patch -p1 -N < fix_icmp_on_windows_iis_servers.patch

[root@localhost ~]# patch -p1 -N < cross_site_fix.patch

若想要了解最新版本的補丁可參考 http://cacti.net/download_patches.php

 

 

 

Cacti 其他文章:

Cacti 外掛安裝教學  

Cacti 新增監控教學  

Linux SNMP安裝     

Cacti Windows Server 2008 R2開啟SNMP服務  

Cacti中文化、額外軟體、常見問題 

 

 

 

 優化建議

1.      選擇適當的作業系統

請用 CentOS Red Hat Enterprise,不要使用 Fedora 或是 Redhat 9 之前的版本。Red Hat Enterprise kernel 已經是最佳化了,非常適合當 Server 使用。

 

2.      使用 Spine (Cactid)

Spine 使用 C 來取代呼叫 cmd.php,在效能上提升很多。官方網頁也寫說 ,如果執行 php poller.php 時間超過 300 秒,就需要使用 Spine 。使用方法很簡單,照著官方網頁作就可以了。目前cmd.php存在的意義只是因為 php cacti 達成跨平台的特性。

 

3.      filesystem 選擇

如果可以的話,切割一塊獨立的分割區掛載 cacti 。檔案格式 reiserfs 是比較好的選擇 ext3 還要快許多。另外,我們還可以使用 noatime 的選項掛載 。加了noatime後,系統不更新上次檔案的存取時間,這個資訊對 cacti 這個系統不是很重要,也不會有其他不良影響,對於繁忙的檔案系統,將可以大大減少檔案系統的 IO

ex.

/dev/sda3 /var/www/html/cacti ext3 defaults,noatime 0 0

 

4.      加大 php 的記憶體使用的上限

vi /etc/php.ini

memory_limit = 32M (預設是 8mb, 可以改大一點)

 

5.      定期 optimize cacti 資料庫

不知道從甚麼時候開始,我家的 cacti poller_output 會不明原因的長大,差不多兩個禮拜後,就會大到資料越寫越慢,直到無法更新。一開始我是每隔一段時間手動 "Truncate poller_output table" 後,就會繼續正常運作。但實在是太麻煩了,現在改成用 crontab optimize 整個 cacti 資料庫。如果不會寫 SQL 的人,用 phpMyAdmin 執行 optimize 時,

同時也會顯示執行 SQL 的語法,直接拿來用就好了。在設定 cron 請注意,請不要跟 cacti 同時執行,假設你的 cacti 執行一次要 4 分鐘,請在第四分鐘後再執行。

 

其實正常來說 poller_output 的資料只是暫存的,系統會自行清空。但很奇怪的是,MySQL 有時候並沒有馬上實體刪掉,而是註記成冗餘資料,依舊占據資料表的空間。可能是這種原因導致資料表越長越大,所以後來我改用 optimize 的原因。

 

除錯建議:

1. rebild poller cache 或是 truncate poller_output table, 不可以在 cacti poller.php 運作時執行

2. 善用 cacti web debug 功能,以方便一個一個排除問題。

3. 建立新的device,最好先用 snmpwalk 測試一遍,可以抓到資料再來設定也不遲。

 

關於作者

一個半路殺出來的傻小子,憑著一股傻勁努力的學習、嘗試、分享。希望能用自己微薄之力,替IT界和資訊界盡一點心力。單憑一己之力始終還是有限,歡迎和我有相同理念的夥伴一同加入一同努力。

評論

此文章尚無評論。

發表評論

*