版本歷史:
<V0.2.
20101204
>根據 Cacti Doucument 調整,適用于Cacti 0.8.7g
<V0.1
.20100717
>創建。
V0.2版本是基于V0.1演化,所以版本延續。
實際上是已經不算是安裝,而是翻譯Cacti的文檔了。
所以具體的安裝過程,還是請大家參考 V0.1版本 。
cacti是一套開源的網絡監控工具,基于rrdtool的良好繪圖功能,可以完美的監控主機的狀態和負載情況,添加相應的模板后,可以用來監控apache服務器和mysql服務器的運行狀態。這里主要描述使用源代碼配置的過程,使用yum的方式同樣,因為cacti是基于網絡服務器配置,所以沒有二進制編譯安裝的過程,源代碼和yum的方式是一樣的。
安裝需求
Cacti需要系統中已經安裝下列組件:- RRDTool 1.0.49 or 1.2.x 或更高版本
- MySQL 4.1.x or 5.x or 或更高版本
- PHP 4.3.6 或更高版本, 推薦5.x 版本以使用更多高級特性
- 一個網絡服務器 比如 Apache 或者 IIS
Unix軟件RPM需求
請確認系統已安裝下列的軟件,并確認httpd和mysqld已設置為隨系統啟動。
- httpd
- php
- php-mysql
- php-snmp
- php-ldap (使用 LDAP 授權校驗 時)
- php-xml
- mysql
- mysql-server
-
net-snmp (根據分支的不同,可能還需要 net-snmp-utils )
PHP設置
PHP的安裝包有很多種形式。主要的配置文件是so文件會調用的 ini配置文件 ,比如 /etc/php.ini . 下面的提示預期是一個配置指導,但是根據分支的不同,
設置可能會有區別。
安全模式 ?
Cacti 使用外部命令,例如用 rrdtool 來繪圖。因此,需要設置
;
Safe Mode
;
http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode
safe_mode
=
Off
; http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode
safe_mode = Off
時間和日期
從 PHP 5.3 版本開始,建議對時區 date timezone 進行定義。以避免因為時間/日期函數而帶來的警告。使用如下代碼:
;
Defines the default timezone used by the date functions
;
http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone
=
"
Europe/Berlin
"
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = " Europe/Berlin "
允許 導入 模板
如果你想使用 Cacti 的模板導入功能,請取消注釋下面一行,以允許 文件上傳 :
file_uploads
=
On
允許exec()調用
Cacti 會使用 exec() 這種形式的調用,因此,請確認已按照如下設置:
safe_mode
=
Off
PHP擴展設置
Cacti 使用如下 PHP 擴展組件
- mysql
- session
- sockets
- xml
- pcre
同時,我們也建議使用
- snmp
擴展。你可以選擇使用 net-snmp 來代替 php-snmp 擴展(有時是 net-snmp-utils )。
Cacti 插件會使用額外的擴展,比如
- gd (reportit 使用)
- dom (cli 腳本使用,只在 PHP 5 中才被支持)
當使用一個較新版本的 PHP 時,你可能會發現的提示
; ;;;
; Note: packaged extension modules are now loaded via the .ini files
; found in the directory /etc/php.d; these are loaded by default.
; ;;;
對于較老版本版本的PHP,你需要編輯 php.ini 并且增加
extension_dir = /etc/php.d
編輯 <extension_dir>/mysql.ini 以激活 mysql 擴展。
; Enable mysql extension module
extension = mysql.so
編輯 <extension_dir>/snmp.ini 以激活 snmp 擴展。
; Enable snmp extension module
extension = snmp.so
如果使用 PHP 4.3.5 以下的版本,那么在 php.ini 中添加以下配置;如果使用 PHP 4.3.6 之上的版本,那么請在配置文件中移除此行(如果存在的話)。
session.save_path = /tmp
配置網絡服務器(Apache)
如果你還在使用 Apaceh 1.3.x 版,那么安裝使用 PHP 5.x 或許并不合適。
請查找文件類似 "/etc/httpd/conf/httpd.conf" 的文件,并且確認文件中包含
# Load config files from the config directory " /etc/httpd/conf.d " .
Include conf.d/*.conf
現在,請編輯其中的包含的PHP配置文件 "/etc/httpd/conf.d/php.conf",如果是使用 PHP 5,那么,確認文件中包含:
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
LoadModule php5_module modules/libphp5.so
#
# Cause the PHP interpreter to handle files with a .php extension.
AddHandler php5-script .php
AddType text/html .php
#
# Add index.php to the list of files that will be served as directory
# indexes.
DirectoryIndex index.php
如果你不是安裝 Cacti 到 Apache 默認的網絡目錄文件夾位置,那么在 /etc/httpd/conf.d 中新增配置文件 cacti.conf,并且按如下內容編輯。設置 /your/cacti/dir 為你自己的cacti目錄名稱。更新 Allow from 127.0.0.1 為任何你需要的的配置(比如,你所在公司的某個子網段)。請留意注釋中的配置 提示 ,尤其是在你啟用了 SELinux 的時候!
# Cacti - the complete rrdtool-based graphing solution
#
# Allows only localhost by default
#
# Allowing cacti to anyone other than localhost should be considered
# dangerous unless properly secured by SSL
# Make sure , that httpd can read your cacti directories.
# At minimum , you need
# chmod ugo+r -R /your/cacti/dir
# Make sure to replace with your directories
# When using SELinux , set the following:
# chcon -R -h -t httpd_sys_content_t /your/cacti/dir
# when using SELinux and you private homedir , enable
# setsebool -P httpd_enable_homedirs 1
# setsebool -P httpd_read_user_content 1
Alias /cacti /your/cacti/dir
<Directory /your/cacti/dir>
AllowOverride None
Order Deny , Allow
Deny from all
Allow from 127.0.0.1
Allow from :: 1
Options Indexes Includes FollowSymLinks
</Directory>
# These directories do not require access over HTTP
#
<Directory /your/cacti/dir/cli>
Order Deny , Allow
Deny from All
Allow from None
</Directory>
MySQL設置
為 MySQL 的 root 用戶設置一個密碼。
shell> mysqladmin --user = root password somepassword
shell> mysqladmin --user = root --password reload
SNMP 設置 ?
這里將會解釋 Net-SNMP 代理的安裝和設置。截止寫作時,Net-SNMP 的最新版本為5.4(12/06/2006發布) 。 ?
依據操作系統的不同,你可以使用安裝包或者壓縮包來安裝 Net-SNMP 。
大部分發行的Linux操作系統都帶有Net-SNMP的安裝包:
-
RedHat / Fedora : 安裝 net-snmp, net-snmp-libs and net-snmp-utils
-
Debian / Ubuntu: 安裝 libsnmp-base, libsnmp5, snmp and snmpd packages
-
SuSE : 安裝 the net-snmp package
-
Gentoo : emerge the net-snmp ebuild
-
Mandriva : 安裝 the libnet-snmp5, net-snmp and net-snmp-utils packages.
從源代碼安裝 Net-SNMP
如果找不到對應的二進制發行包,那么可以嘗試從 源代碼 進行編譯。
如下顯示了如何獲得一個正在運行的 Net-SNMP 的配置選項:
$
snmpwalk
-
v
1
-
c public localhost .
1.3
.
6.1
.
4.1
.
2021.100
.
6.0
UCD
-
SNMP
-
MIB
::
versionConfigureOptions.
0
=
STRING:
"
'-disable-shared'
'--with-mib-modules=host/hr_system'
"
UCD - SNMP - MIB :: versionConfigureOptions. 0 = STRING: " '-disable-shared'
'--with-mib-modules=host/hr_system' "
設置 Net-SNMP 代理
視如何安裝 Net-SNMP,主要的配置文件(snmpd.conf)可能被放置在 /etc/snmp(從二進制包安裝)或者 /usr/local/share/snmp(從tarball壓縮包安裝)。
請注意當你修改了 snmpd.conf 配置文件后,你需要重新啟動 snmpd 守護進程(或者發送HUP信號)。
最簡單的配置如下:
rocommunity public
這將會從任何主機上發送的 SNMP version 1/2 只讀請求,使用的社區名稱為 public。
使用這個最小化的配置,你就能夠繪制CPU使用率,網絡接口,內存/交換區使用,登錄的用戶和進程數量等圖形了。
你可以限制接受從哪些主機發送過來的請求:
rocommunity public 127.0.0.1
rocommunity test 87.65.43.21
在如下的示例中 Net-SNMP 將會在10.20.30.40主機的10000端口上建立偵聽。
agentaddress 10.20.30.40 : 10000
agentaddress tcp: 161
對于哪些對安全性要求較高的用戶,可以配置使用SNMP協議第3版,支持MD5和SHA哈希算法。
createUser frederic MD5 mypassphrase DES
group groupv3 usm frederic
view all included .iso 80
access groupv3 "" any auth exact all all all
# snmpget -v 3 -l AuthNoPriv -u frederic -A mypassphrase 10.50.80.45 sysName .0
SNMPv2-MIB::sysName .0 = STRING: cyclopes
到這里訪問控制方面的設置就完成了,在 snmp.conf 中增加如下兩行,以標識設備的名稱和聯系人。
syslocation Bat. C2
syscontact someone@somewhere.org
有一些OID會返回類似 "-153.1 dBm" 的單元,一個較為安全的做法是關閉它,可以在 snmpd.conf 中增加如下內容實現:
dontPrintUnits true
includeAllDisks
如果你希望某個文件系統不在這里被列出,那么,在 snmpd.conf 中增加如下內容:
ignoredisk /dev/rdsk/c0t2d0
disk /
disk /usr
disk /var
disk /oracle
需要注意的是,Net-SNMP 代理僅能夠報告那些在它啟動之前就已經掛載的文件系統。如果你之后手工掛載了文件系統,那么你需要重新載入 Net-SNMP 代理(發送HUP信號)。在 snmpd.conf 中添加如下內容,你也可以繪制進程信息:
proc httpd
結果可以通過 ucdavis.prTabel.prEntry 樹獲得:
prCount, 以當前查詢名稱運行的進程的數量
prNames,統計的進程的名稱
例如,Apache進程的數量可以通過OID下的 .1.3.6.1.4.1.2021.2.1.5 MIB模塊來獲取。其他一些有用的模塊還有:
mibII/mta_sendmail, 繪制 MTA(Sendmail, Postfix, 等等)的統計信息
diskio, 允許繪制I/O統計信息
ucd-snmp/ImSensors, 硬件監控信息(僅Linux和Solaris支持)
添加 Mib 模塊的方法如下:
$ . / configure -- with - mib - modules = " module1 module2 "
$ . / configure -- with - your - options
$ make
# mkdir /usr/local/dist
# make install prefix=/usr/local/dist/usr/local exec_prefix=/usr/local/dist/usr/local
# cd /usr/local/dist
# tar cvf /tmp/net-snmp-5.3.1-dist.tar usr
# gzip /tmp/net-snmp-5.3.1-dist.tar
# rm -rf /usr/local/dist
現在你可以拷貝 /tmp/net-snmp-5.3.1.-dist.tar.gz 到其他的服務器,并且在根目錄下解壓縮(所有的文件都會被釋放到 /usr/local )。
測試配置
一旦 Net-SNMP 安裝完成,并且已經啟動,那么就可以首先測試一下
$ snmpwalk - v 1 - c public localhost . 1.3 . 6.1 . 2.1 . 1.1 . 0
SNMPv2 - MIB :: sysDescr. 0 = STRING: Linux cronos 2.4 . 28
# 2 SMP ven jan 14 14:12:01 CET 2005 i686
你甚至還可以查詢下在服務器上運行的是哪個版本的 Net-SNMP :
$ snmpwalk - v 1 - c public localhost . 1.3 . 6.1 . 4.1 . 2021.100 . 2.0
UCD - SNMP - MIB :: versionTag. 0 = STRING: 5.2 . 1.2
如果輸出是下面這樣的:
$ snmpwalk - v 1 - c foo localhost . 1.3 . 6.1 . 2.1 . 1.1 . 0
Timeout: No Response from localhost
如果使用的是 SNMP V3 版本的協議,那么指定一個未知的用戶名,很可能會得到一個錯誤:
$ snmpget - v 3 - l AuthNoPriv - u john - A mypassphrase 10.50 . 80.45 sysName. 0
snmpget: Unknown user name
如果是密碼不正確,那么會返回如下的錯誤信息:
$ snmpget - v 3 - l AuthNoPriv - u frederic - A badpassphrase 10.50 . 80.45 sysName. 0
snmpget: Authentication failure (incorrect password, community or key)
下面的查詢顯示了哪些文件系統已經被掛載:
$ snmpwalk - v 1 - c public localhost . 1.3 . 6.1 . 4.1 . 2021.9 . 1.2
UCD - SNMP - MIB :: dskPath. 1 = STRING: /
UCD - SNMP - MIB :: dskPath. 2 = STRING: / BB
UCD - SNMP - MIB :: dskPath. 3 = STRING: / dev / shm
最后,讓我們看一下如何顯示網絡接口:
$ snmpwalk - v 1 - c public localhost . 1.3 . 6.1 . 2.1 . 2.2 . 1.2
IF - MIB :: ifDescr. 1 = STRING: lo
IF - MIB :: ifDescr. 2 = STRING: eth0
IF - MIB :: ifDescr. 3 = STRING: eth1
擴展 SNMP 代理
Net-SNMP 的一個強大功能就是你可以對它進行擴展:
讓我們運行一下 /tmp/foo.sh 腳本:
$ / tmp / foo.sh - arg1
123
現在把如下這行添加到 snmpd.conf 文件中:
exec foo / bin / sh / tmp / foo.sh - arg1
腳本的輸出:
ucdavis.extTable.extEntry.extOutput
退出的狀態:
ucdavis.extTable.extEntry.extResult
命令:???????? ucdavis.extTable.extEntry.extCommand
你可以使 用 如下的 SNMP 查詢對結果進行檢測:
$ snmpwalk - v 1 - c public localhost . 1.3 . 6.1 . 4.1 . 2021.8 . 1
UCD - SNMP - MIB :: extIndex. 1 = INTEGER: 1
UCD - SNMP - MIB :: extNames. 1 = STRING: foo
UCD - SNMP - MIB :: extCommand. 1 = STRING: / bin / sh / tmp / foo.sh - arg1
UCD - SNMP - MIB :: extResult. 1 = INTEGER: 0
UCD - SNMP - MIB :: extOutput. 1 = STRING: 123
UCD - SNMP - MIB :: extErrFix. 1 = INTEGER: 0
UCD - SNMP - MIB :: extErrFixCmd. 1 = STRING:
在 Cacti 中,可以按如下方法使用 " SNMP - Generic OID Template " :
之后你會驚喜的發現 /tmp/foo.sh 腳本的執行結果在Cacti中被圖形化輸出了。
現在,讓我們執行第二個腳本,這個腳本會返回多于一個結果:
$ / tmp / bar.sh
456
789
另一個在 snmpd.conf 中調用腳本的辦法是指定一個 OID ,如下文所示:
exec . 1.3 . 6.1 . 4.1 . 2021.555 / bin / sh / tmp / bar.sh
$ snmpwalk - v 1 - c public localhost . 1.3 . 6.1 . 4.1 . 2021.555
UCD - SNMP - MIB :: ucdavis. 555.1 . 1 = INTEGER: 1
UCD - SNMP - MIB :: ucdavis. 555.2 . 1 = STRING: " /bin/sh "
UCD - SNMP - MIB :: ucdavis. 555.3 . 1 = STRING: " /tmp/bar.sh "
UCD - SNMP - MIB :: ucdavis. 555.100 . 1 = INTEGER: 0
UCD - SNMP - MIB :: ucdavis. 555.101 . 1 = STRING: " 456 "
UCD - SNMP - MIB :: ucdavis. 555.101 . 2 = STRING: " 789 "
UCD - SNMP - MIB :: ucdavis. 555.102 . 1 = INTEGER: 0
UCD - SNMP - MIB :: ucdavis. 555.103 . 1 = ""
之后你就可以使用 Cacti 的 " SNMP - Generic OID Template " (每個 OID 一個數據源)。
假如你想同意一個日志文件中的條目數,那么添加如下內容到 snmpd.conf 中:
logmatch cactistats / home / cactiuser / cacti / log / cacti.log 120 SYSTEM STATS
使用下面的查詢,可以列出所有能夠訪問的變量:
$ snmpwalk - v 1 - c public localhost logMatch
UCD - SNMP - MIB :: logMatchMaxEntries. 0 = INTEGER: 50
UCD - SNMP - MIB :: logMatchIndex. 1 = INTEGER: 1
UCD - SNMP - MIB :: logMatchName. 1 = STRING: cactistats
UCD - SNMP - MIB :: logMatchFilename. 1 = STRING: / home / cactiuser / cacti / log / cacti.log
UCD - SNMP - MIB :: logMatchRegEx. 1 = STRING: SYSTEM STATS
UCD - SNMP - MIB :: logMatchGlobalCounter. 1 = Counter32: 301634
UCD - SNMP - MIB :: logMatchGlobalCount. 1 = INTEGER: 301634
UCD - SNMP - MIB :: logMatchCurrentCounter. 1 = Counter32: 6692
UCD - SNMP - MIB :: logMatchCurrentCount. 1 = INTEGER: 6692
UCD - SNMP - MIB :: logMatchCounter. 1 = Counter32: 1
UCD - SNMP - MIB :: logMatchCount. 1 = INTEGER: 0
UCD - SNMP - MIB :: logMatchCycle. 1 = INTEGER: 120
UCD - SNMP - MIB :: logMatchErrorFlag. 1 = INTEGER: 0
UCD - SNMP - MIB :: logMatchRegExCompilation. 1 = STRING: Success
現在,讓我們使用另外一個有趣的指令, "proxy"。 以 Squid 代理為例:啟用時,SNMP 代理會偵聽 UPD 3401端口。如果你想在Cacti中繪制系統圖形和Squid圖形,但是又不想Cacti中聲明這兩個設備,那么,在 snmpd.conf 中添加如下內容:
proxy - v 1 - c public localhost: 3401 . 1.3 . 6.1 . 4.1 . 3495.1
對這個主機進行查詢:
$ snmpwalk - v 1 - c public 10.151 . 33.3 sysdescr
SNMPv2 - MIB :: sysDescr. 0 = STRING: Linux srv1.foo.com 2.6 . 8.1 - 12mdk
# 1 Fri Oct 1 12:53:41 CEST 2004 i686
下面是如何輸出 Squid 部分(指定的 OID 會返回 Squid 版本):
$ snmpwalk - v 1 - c public 10.151 . 33.3 . 1.3 . 6.1 . 4.1 . 3495.1 . 2.3 . 0
SNMPv2 - SMI :: enterprises. 3495.1 . 2.3 . 0 = STRING: " 2.5.STABLE6 "
安裝和配置Cacti
1.解壓縮壓縮包,把 Cacti 解壓到你網絡服務器的 DOCUMENT_ROOT 文件夾下:
shell > tar xzvf cacti - version.tar.gz
2.創建 MySQL 數據庫:
shell > mysqladmin -- user = root create cacti
3.導入默認的 Cacti 數據庫:
shell > mysql cacti < cacti.sql
4.(可選)為 Cacti 數據庫設置用戶名和密碼:
shell > mysql -- user = root mysql
mysql > GRANT ALL ON cacti. * TO cactiuser @ localhost IDENTIFIED BY 'somepassword';
mysql > flush privileges;
5.編輯 "include/config.php" 設置數據庫類型,數據庫名稱,主機名,用戶和密碼:
$database_type = " mysql " ;
$database_default = " cacti " ;
$database_hostname = " localhost " ;
$database_username = " cactiuser " ;
$database_password = " cacti " ;
/* load up old style plugins here */
$plugins = array();
// $plugins [] = 'thold';
/*
Edit this to point to the default URL of your Cacti install
ex: if your cacti install as at http: // serverip / cacti / this
would be set to / cacti /
*/
$url_path = " /cacti/ " ;
/* Default session name - Session name must contain alpha characters */
# $cacti_session_name = "Cacti";
基于同樣的原因,"URL_PATH" 變量也從 global.php 中被移動到 config.php。對于哪些從較老的 PIA 升級升級而來的人來說,需要了解的是,過去我們會嘗試"探測"這個路徑,但是,這種處理是不可靠的。因此,你需要在 config.php 中顯式的指定這一路徑。
6.為 Cacti 的目錄文件夾設置合適的權限,以支持圖形文件/日志文件的生成。你需要在 Caacti 目錄文件夾中執行如下命令:
shell > chown - R cactiuser rra / log /
( 使用有效的用戶名來替換上文中的 cactiuser, 這個用戶在下面配置數據采集的時候還要使用。 )
7.在 "/etc/crontab" 文件中增加類似如如下的內容:
*/ 5 * * * * cactiuser php / var / www / html / cacti ? / poller.php > / dev / null 2 >& 1
(如果使用二進制包安裝的話,請確認crontab的這些內容是否已經在安裝時被設置了。)
譯者注:在RedHat及其衍生版本上,如此配置crontab是不可行的,crontab文件是不支持用戶名的配置的。推薦以確定用戶執行 "crontab -u cacti -e" 然后添加:
*/ 5 * * * * php / var / www / html / cacti / poller.php > / dev / null 2 >& 1
8.請確認cron守護進程已經運行:
shell > service crond start
shell > chkconfig crond level 345 on
9.使用瀏覽器訪問 http://your-sever/cacti,初始的用戶名和密碼都是 "admin"。首次登錄時,系統會強制要求你立即修改密碼。
在下一步的配置中,請確認仔細填寫了所有的路徑,并且確保他們是正確的。
? 安裝配置 Spine(可選)
spine是一個基于C語言的,非常快速的輪詢引擎。它是默認的cmd.php的可選替代。
如果決定使用它的話,
需要自己來顯式的安裝和配置。cacti本身并不包含該引擎。
安裝Spine的最簡單的方法就是使用rpm或者使用ports。
可以在Cacti的主站或者你的分發版本的軟件倉庫中找到spine的二進制分發包。
如果使用源碼,那么下載之后請在代碼目錄執行如下命令:
shell > aclocal
shell > libtoolize -- force (glibtoolize -- force on Max OS)
shell > autoheader
shell > autoconf
shell > automake
shell > . / configure
shell > make
shell > make install
現在假設你已經安裝好了 spine。那么需要對它進行配置。配置文件的位置應該是和 Spine 自身的目錄在一起的, 或者在 /etc/Spine.conf 。
DB_Host 127.0 . 0.1 or hostname (not localhost)
DB_Database cacti
DB_User cactiuser
DB_Pass cacti
DB_Port 3306
應用升級補丁
訪問 Cacti 的網站 以或許升級補丁和相應的安裝指導。
下面的示例顯示了 Cacti 0.8.6j 的補丁的安裝指導。可不要把這些補丁應用在最近版本的 Cacti 上!
wget http: // www.cacti.net / downloads / patches / 0.8 .6j / ping_php_version4_snmpgetnext.patch
wget http: // www.cacti.net / downloads / patches / 0.8 .6j / tree_console_missing_hosts.patch
wget http: // www.cacti.net / downloads / patches / 0.8 .6j / thumbnail_graphs_not_working.patch
wget http: // www.cacti.net / downloads / patches / 0.8 .6j / graph_debug_lockup_fix.patch
wget http: // www.cacti.net / downloads / patches / 0.8 .6j / snmpwalk_fix.patch
patch - p1 - N < ping_php_version4_snmpgetnext.patch
patch - p1 - N < tree_console_missing_hosts.patch
patch - p1 - N < thumbnail_graphs_not_working.patch
patch - p1 - N < graph_debug_lockup_fix.patch
patch - p1 - N < snmpwalk_fix.patch
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
