作者: Baron. Wan
△ Cacti 是 RRDTool 的Web 管理介面, 類似於 MRTG, 但畫面更加的美觀, 功能更加的強大.
△ Cacti 到目前的 2010/4/16 為止, 最新的 release 版 為 0.8.7 e, 可搭配到 rrdtool 版本 1.3x, 以及 php 的 5.3版以下 來使用.
- 架設完成時間: 2010/4/16
- 架設環境: CentOS 5
- 各套件版本: httpd 2.2.15
Php 5.2.12
cacti-spine 0.8.7 e
rrdtool 1.3.9
gd 2.0.35
libiconv 1.13
libmcrypt 2.5.7
net-snmp 5.5
- 隨系統安裝之RPM套件:
freetype-2.2.1 -21.el5_3
freetype-devel-2.2.1 -21.el5_3
libjpeg-6b-37
libpng-1.2.10 -7.1.el5_3.2
libpng-devel-1.2.10 -7.1.el5_3.2
libxml2-2.6.26 -2.1.2.8
libxml2-python-2.6.26 -2.1.2.8
libxml2-devel-2.6.26 -2.1.2.8
gettext-0.14.6 -4.el5
zlib-1.2.3 -3
zlib-devel-1.2.3 -3
MySQL-server-community-5.1.45 -1.rhel5
MySQL-client-community-5.1.45 -1.rhel5
MySQL-devel-community-5.1.45 -1.rhel5
gdbm-1.8.0 -26.2.1
gdbm-devel-1.8.0 -26.2.1
openssl-0.9.8 e-12.el5_4.6
openssl097a -0.9.7a -9.el5_4.2
openssl-devel-0.9.8 e-12.el5_4.6
- 個人順序是這樣的:MySQL 基本設定完成後, 先安裝 Apache Server, 再依序安裝 net-snmp、(libiconv、libmcrypt這兩個套件不確定cacti 是否會用到, 安裝它們完全是因為往後開發 php 用途)、gd、php、rrdtool、cacti-spine;由於自己習慣為能夠完全掌控安裝的環境, 因此大多數元件會習慣用 compiler 的方式, 同時這樣的做法也順利解決了當初 cacti與 rrdtool 以及 snmp 連結上的問題, 另一方面對於要安裝的位置也比較具有彈性.
- 架設開始:
◎ 針對 Apache, 以下有些功能可選擇性不要..
# ./configure --prefix=/usr/local/apache2 \
> --enable-mods-shared=all \
> --enable-modules=all \
> --enable-auth-dbd \
> --enable-auth-ldap \
> --enable-auth-digest \
> --enable-mime-magic \
> --enable-file-cache \
> --enable-cache \
> --enable-disk-cache \
> --enable-mem-cache \
> --enable-case-filter \
> --enable-expires \
> --enable-headers \
> --enable-expires \
> --enable-ident \
> --enable-unique-id \
> --enable-usertrack \
> --enable-ssl \
> --enable-http \
> --enable-so \
> --enable-cgi \
> --enable-vhost-alias \
> --enable-rewrite \
> --with-ssl=/lib \
> --with-mpm=worker
# make; make install
安裝完成後, 會在 /usr/local 處建立 apache2/ , 進入 /usr/local/apache2/conf, 設定 httpd.conf, 確定可正常啟動後, 請先 Stop httpd 的 Service, 然後繼續...
PS. 本章重點不在設定 apache2, 設定 apache2 請參考官網.
◎ 安裝 Net-SNMP
# ./configure --prefix=/usr/local --sysconfdir=/etc --with-perl-modules
# make
# make test
# make install
# cd perl
# perl Makefile.PL
# make
# make test
# make install
完成後, 在 /etc/snmp 中設定 snmpd.conf
com2sec notConfigUser default public
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
view systemview included .1.3.6 .1.2.1.1
view systemview included .1.3.6 .1.2.1.25.1.1
access notConfigGroup "" any noauth exact systemview none none
com2sec local localhost public
com2sec mynetwork 192.168.31.32/29 public
group MyRWGroup v1 local
group MyROGroup v1 mynetwork
view all included .1 80
access MyROGroup "" any noauth exact all none none
access MyRWGroup "" any noauth exact all all all
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root (configure /etc/snmp/snmp.local.conf)
Service 啟動: /usr/local/bin/snmpd
◎ 安裝 libiconv
#./configure –prefix=/usr/local
# make; make install
◎ 安裝 libmcrypt
# ./configure --prefix=/usr/local --enable-dependency-tracking --enable-dynamic-loading
# make
# make check
# make install
◎ 安裝 gd
# ./configure --prefix=/usr/local --with-png=/usr/lib --with-freetype=/usr/lib --with-fontconfig=/usr/lib --with-jpeg=/usr/lib --with-iconv=/usr/local/lib
# make
# make check
# make install
◎ 安裝 php (紅色部分是必要值, 其他自行決定吧!)
# ./configure --prefix=/usr/local/apache2 \
> --sysconfdir=/etc \
> --bindir=/usr/local/bin \
> --with-config-file-path=/etc \
> --with-exec-dir=/usr/local/bin \
> --with-apxs2=/usr/local/apache2/bin/apxs \
> --enable-mod-charset \
> --enable-calendar \
> --enable-mbstring \
> --with-openssl=/usr \
> --with-gdbm=/usr \
> --with-mysql=/usr \
> --with-snmp=/usr/local \
> --with-gd=/usr/local \
> --with-jpeg-dir=/usr/lib \
> --with-png-dir=/usr/lib \
> --with-freetype-dir=/usr/lib \
> --with-zlib-dir=/usr/lib \
> --with-libxml-dir=/usr/lib \
> --with-gettext=/usr \
> --with-mcrypt=/usr/local \
> --with-iconv=/usr/local \
> --enable-gd-native-ttf \
> --enable-gd-jis-conv \
> --enable-maintainer-zts \
> --enable-zend-multibyte \
> --enable-libgcc \
> --enable-bcmath \
> --enable-sockets
# make
# make test
# make install
在 /etc/php.ini 中設定相關參數:
engine = On
memory_limit = 256M 只要在16M 以上即可, default 是 128M
include_path = ".:/usr/local/apache2/lib/php"
variables_order = "GPCS"
register_globals = Off defalut 是 On, 務必改為 Off
因為 Cacti 登入會用到 session , 因此也要修改 [session] 相關連結路徑
session.save_path = "/usr/local/apache2/lib/php/session"
mkdir /usr/local/apache2/lib/php/session
以上, 個人認為是比較需要變更的設定, include_path 則是在安裝 PHP 後的系統的建議, 另外, 新版已經不需要 extension 值了.
在 Apache 處添加 php 相關設定 (/usr/local/apache2/conf/httpd.conf)
LoadModule php5_module modules/libphp5.so DirectoryIndex index.html index.php AddHandler php5-script .php AddType application/x-httpd-php .php .phtml AddType application/x-httpd-php-source .phps◎ 安裝 rrdtool
# ./configure –prefix=/usr/local
# make
# make install
◎ 安裝 cacti-spine
# ./configure –prefix=/usr/local –sysconfdir=/etc
# make
# make install
㊣ 在 /etc/spine.conf 處設定
DB_Host localhost
DB_Database cacti
DB_User cactiuser
DB_Pass cactipasswd
DB_Port 3306
㊣ 解封裝 cacti-0.8.7 e.tar.gz 到 apache 的 DocumentRoot 路徑中, 這裡是 /var/www/html
# tar zxvf cacti-0.8.7 e.tar.gz –C /var/www/html
㊣ 變更目錄名稱
# mv /var/www/html/cacti-0.8.7 e/ /var/www/html/cacti/
㊣ 在 /var/www/html/cacti/include/config.php & global.php 中設定
$database_type = "mysql";
$database_default = "cacti"; $database_hostname = "localhost"; $database_username = "cactiuser"; $database_password = "cactipasswd"; ㊣ 新建使用者 cactiuser
# useradd cactiuser –d /var/www/html –s /bin/false
# passwd cactiuser
㊣ 加入 apache 群組的權限
# usermod –G cactiuser apache
㊣ 設定權限於 /var/www/html/cacti/rra/ & log/
# chown cactiuser –R rra/ log/
㊣ MySQL 對於 Cacti 的相關設定。 以下是cacti 官網的設定, 基本上就是先建立 cacti ‘s database, 然後將 /var/www/html/cacti/cacti.sql 匯入到 cacti 的 database 中, 隨後在 mysql 建立一個 cactiuser 的 USER, 密碼為 cacitpasswd.
# mysqladmin --user=root create cacti # mysql cacti -u root -p '<' /var/www/html/cacti/cacti.sql # mysql --user=root mysqlmysql> GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'cactipasswd';
mysql> flush privileges;
㊣ 在 /etc/crontab 中添加一筆設定:(每五分鐘執行一次, 由 cactiuser account 執行 php poller.php 的命令)
*/5 * * * * cactiuser /usr/local/bin/php /var/www/html/cacti/poller.php > /dev/null 2>&1 ㊣ 啟動: httpd、mysqld、snmpd
㊣ 進入 Web , http://MySite/cacti 中選擇 console -> Setting
選擇 SNMP 版本, 若在 snmpd.conf中設為 Group MyROGroup v1 mynetwork, 則此設定值為 Version 1。
設定 snmp community, 若在 snmpd.conf 中設定為 com2sec mynetwork 192.168.31.32/29 public, 則此設定值為 public。
選擇 RRDTool Utility Version 為 RRDTool 1.3x。
設定路徑:
snmpwalk Binary Path “/usr/local/bin/snmpwalk”
snmpget Binary Path “/usr/local/bin/snmpget”
snmpbulkwalk Binary Path “/usr/local/bin/snmpbulkwalk”
snmpgetnext Binary Path “/usr/local/bin/snmpgetnext”
RRDTool Binary Path “/usr/local/bin/rrdtool”
PHP Binary Path “/usr/local/bin/php”
Cacti Log File Path “/var/www/html/cacti/log/cacti.log”
Spine Poller File Path “/usr/local/bin/spine”
選擇 Poller Type 為 spine
㊣ 在 Console -> Device 處留意是否為 Up 的狀態, 點選 Description的值 進入設定..
Hostname 指定 ip address。
選擇 snmp version 和 snmp community, 與 Setting 相關值一致。
㊣ 相關測試:
# snmpwalk -v 1 localhost -c public system
SNMPv2-MIB::sysDescr.0 = STRING: Linux example.com SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::org DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (14978604) 1 day, 17:36:26.04 SNMPv2-MIB::sysContact.0 = STRING: Root SNMPv2-MIB::sysName.0 = STRING: example.com SNMPv2-MIB::sysLocation.0 = STRING: Unknown (edit /etc/snmp/snmpd.conf) SNMPv2-MIB::sysORLastChange.0 = Timeticks: (2) 0:00:00.02 SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDMIBObjects. SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance SNMPv2-MIB::sysORID.3 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance SNMPv2-MIB::sysORID.4 = OID: SNMPv2-MIB::snmpMIB SNMPv2-MIB::sysORID.5 = OID: TCP-MIB::tcpMIB SNMPv2-MIB::sysORID.6 = OID: IP-MIB::ip SNMPv2-MIB::sysORID.7 = OID: UDP-MIB::udpMIB SNMPv2-MIB::sysORID.8 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup SNMPv2-MIB::sysORDescr.1 = STRING: The MIB for Message Processing and Dispatching. SNMPv2-MIB::sysORDescr.2 = STRING: The MIB for Message Processing and Dispatching. SNMPv2-MIB::sysORDescr.3 = STRING: The SNMP Management Architecture MIB. SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for SNMPv2 entities SNMPv2-MIB::sysORDescr.5 = STRING: The MIB module for managing TCP implementations SNMPv2-MIB::sysORDescr.6 = STRING: The MIB module for managing IP and ICMP implementations SNMPv2-MIB::sysORDescr.7 = STRING: The MIB module for managing UDP implementations SNMPv2-MIB::sysORDescr.8 = STRING: View-based Access Control Model for SNMP. SNMPv2-MIB::sysORUpTime.1 = Timeticks: (2) 0:00:00.02 SNMPv2-MIB::sysORUpTime.2 = Timeticks: (2) 0:00:00.02 SNMPv2-MIB::sysORUpTime.3 = Timeticks: (2) 0:00:00.02 SNMPv2-MIB::sysORUpTime.4 = Timeticks: (2) 0:00:00.02 SNMPv2-MIB::sysORUpTime.5 = Timeticks: (2) 0:00:00.02 SNMPv2-MIB::sysORUpTime.6 = Timeticks: (2) 0:00:00.02 SNMPv2-MIB::sysORUpTime.7 = Timeticks: (2) 0:00:00.02 SNMPv2-MIB::sysORUpTime.8 = Timeticks: (2) 0:00:00.02 |
以上內容表示 snmp 在 version 1 測試正常。
# su –p – cactiuser
$ spine
SPINE: Using spine config file [/etc/spine.conf] SPINE: Version 04/18/2010 06:18:35 PM - SPINE: Poller[0] Host[1] NOTE: There are '5' Polling Items for this Host 04/18/2010 06:18:35 PM - SPINE: Poller[0] Host[1] DS[3] SCRIPT: perl /var/www/html/cacti/scripts/linux_memory.pl MemFree:, output: 24652 04/18/2010 06:18:35 PM - SPINE: Poller[0] Host[1] DS[4] SCRIPT: perl /var/www/html/cacti/scripts/linux_memory.pl SwapFree:, output: 787028 04/18/2010 06:18:35 PM - SPINE: Poller[0] Host[1] DS[5] SCRIPT: perl /var/www/html/cacti/scripts/loadavg_multi.pl, output: 1min:0.00 5min:0.00 10min:0.00 04/18/2010 06:18:35 PM - SPINE: Poller[0] Host[1] DS[6] SCRIPT: perl /var/www/html/cacti/scripts/unix_users.pl , output: 1 04/18/2010 06:18:35 PM - SPINE: Poller[0] Host[1] DS[7] SCRIPT: perl /var/www/html/cacti/scripts/unix_processes.pl, output: 114 04/18/2010 06:18:35 PM - SPINE: Poller[0] Time: 0.1778 s, Threads: 1, Hosts: 2 |
測試中顯示 spine 執行正常。
$ /usr/local/bin/php /var/www/html/cacti/poller.php
-rw-r--r-- 1 cactiuser apache 141488 Apr 18 18:30 localhost_load_1min_5.rrd -rw-r--r-- 1 cactiuser apache 47840 Apr 18 18:30 localhost_mem_buffers_3.rrd -rw-r--r-- 1 cactiuser apache 47840 Apr 18 18:30 localhost_mem_swap_4.rrd -rw-r--r-- 1 cactiuser apache 47840 Apr 18 18:30 localhost_proc_7.rrd -rw-r--r-- 1 cactiuser apache 47840 Apr 18 18:30 localhost_users_6.rrd |
若執行正常, 會在 /var/www/html/cacti/rra/ 中建立五筆 .rrd 的檔案。 除表示 rrdtool 可正常運作外, 也表示 php 可正常運作於該系統下。
查看 /var/log/cron 是否有正常運作
Apr 18 18:35:01 example crond[18802]: (cactiuser) CMD (/usr/local/bin/php /var/www/html/cacti/poller.php > /dev/null 2>&1)
查看 /var/www/html/cacti/log/cacti.log 中是否有錯誤發生
04/18/2010 06:35:01 PM - POLLER: Poller[0] NOTE: Poller Int: '300', Cron Int: '300', Time Since Last: '299', Max Runtime '298', Poller Runs: '1' 04/18/2010 06:35:01 PM - SPINE: Poller[0] Time: 0.1296 s, Threads: 1, Hosts: 1 04/18/2010 06:35:01 PM - SPINE: Poller[0] Host[1] NOTE: There are '5' Polling Items for this Host 04/18/2010 06:35:01 PM - SPINE: Poller[0] Host[1] DS[3] SCRIPT: perl /var/www/html/cacti/scripts/linux_memory.pl MemFree:, output: 17036 04/18/2010 06:35:01 PM - SPINE: Poller[0] Host[1] DS[4] SCRIPT: perl /var/www/html/cacti/scripts/linux_memory.pl SwapFree:, output: 787028 04/18/2010 06:35:01 PM - SPINE: Poller[0] Host[1] DS[5] SCRIPT: perl /var/www/html/cacti/scripts/loadavg_multi.pl, output: 1min:0.00 5min:0.00 10min:0.00 04/18/2010 06:35:01 PM - SPINE: Poller[0] Host[1] DS[6] SCRIPT: perl /var/www/html/cacti/scripts/unix_users.pl , output: 1 04/18/2010 06:35:01 PM - SPINE: Poller[0] Host[1] DS[7] SCRIPT: perl /var/www/html/cacti/scripts/unix_processes.pl, output: 117 04/18/2010 06:35:01 PM - SPINE: Poller[0] Time: 0.1818 s, Threads: 1, Hosts: 2 04/18/2010 06:35:02 PM - SYSTEM STATS: Time:1.2335 Method:spine Processes:1 Threads:1 Hosts:2 HostsPerProcess:2 DataSources:5 RRDsProcessed:5 |
Baron Wan.