Cacti安裝配置以及監控經驗分享

                    Cacti安裝配置以及監控經驗分享

最近在學習cacti,發現本文寫得很是詳細,於是乎就轉載來慢慢學習,感謝原創作者的分享

 

1.系統環境
採用LNMP架構(本案例中不予安裝過程的說明,重點講Cacti)作爲Cacti運行的PHP環境,RedHat 5.8 32位操作系統。
本案例中採用Cacti版本是0.8.8a,截至發稿前的最新版,英文原版。

2.snmp安裝
SNMP有兩種方法,一種是yum,還有一種是採用源代碼的編譯安裝。
(1)yum安裝

  1. yum -y install net-snmp-devel net-snmp-libs net-snmp 

執行上面的命令即可安裝完畢。
(2)源代碼的安裝
重點講下源代碼的安裝,採用官方最新版。

  1. wget http://sourceforge.net/projects/net-snmp/files/net-snmp/5.7.1/net-snmp-5.7.1.tar.gz  
  2. tar zxf net-snmp-5.7.1.tar.gz  
  3. cd net-snmp-5.7.1  
  4. ./configure \  
  5. --prefix=/usr/local/snmp \  
  6. --enable-mfd-rewrites \  
  7. --with-default-snmp-version="2" \  
  8. --with-sys-contact="Luxiaok,E_mail:[email protected]" \  
  9. --with-sys-location="China" \  
  10. --with-logfile="/usr/local/snmp/var/log/snmpd.log" \  
  11. --with-persistent-directory="/usr/local/snmp/var/snmp" \  
  12. --sysconfdir=/usr/local/snmp/etc \  
  13. --with-mib-modules=ucd-snmp/diskio  
  14. make && make install 

編譯參數說明
    prefix:net-snmp的安裝路徑
    enable-mfd-rewrites:允許用新的MFD重寫可用的mid模塊
    with-default-snmp-version:默認的SNMP版本
    with-sys-contact:可以配置該設備的聯繫人
    with-sys-location:該設備的位置
    with-logfile:日誌文件路徑
    with-persistent-directory:不變數據存儲目錄 
    with-mib-modules=ucd-snmp/diskio   選項,可以讓服務器支持磁盤I/O監控
使用以上參數選項即可,否則configure配置時會要求手動輸入。

配置文件

  1. cp EXAMLE.conf /usr/local/snmp/share/snmp/snmpd.conf 

EXAMLE.conf是在源代碼文件夾裏。

配置snmpd.conf
1).監聽
agentAddress  udp:127.0.0.1:161  註釋掉該行
agentAddress udp:161,udp6:[::1]:161   修改爲該行,也可以不要後面的IPv6部分。

2).v2c授權
找到
rocommunity public  default    -V systemonly
註釋掉,添加一行

  1. rocommunity public 192.168.1.101 

IP地址是監控服務器的IP,不解釋

3).v3授權
暫不多贅述,因爲現在利用snmp協議監控多使用1或者2版本。

啓動文件

  1. cp dist/snmpd-init.d /etc/init.d/snmpd 

啓動

  1. /etc/init.d/snmpd start 

或者:

  1. /usr/local/snmp/sbin/snmpd -c /usr/local/snmp/etc/snmpd.conf 

注意:在RedHat Enterprise Linux平臺下,用源代碼自帶的snmpd作爲SystemV啓動腳本,使用service命令啓動時,獲取snmp數據時總是顯示超時(實際上是服務並沒有完全啓動),就必須使用上面的命令手動啓動。建議修改下snmpd的systemV文件,把start函數部分修改爲手動啓動的代碼,即上面的代碼。

測試:

  1. /usr/local/snmp/bin/snmpwalk -c public -v 2c 127.0.0.1 

在服務器上執行

  1. snmpwalk -v2c -c public 192.168.1.101 

IP地址寫被監控服務器的IP

系統運行時間OID
.1.3.6.1.2.1.25.1.1.0

測試:

  1. [root@cacti ~]# snmpwalk -v2c -c public 192.168.1.101 .1.3.6.1.2.1.25.1.1.0  
  2. HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (583354108) 67 days, 12:25:41.08  
  3. [root@cacti ~]# 

3.rrdtool安裝
先安裝必要的rpm包

  1. yum install cairo cairo-devel libxml2 libxml2-devel pango pango-devel perl perl-devel 


使用官方最新版

  1. wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.7.tar.gz  
  2. tar zxf rrdtool-1.4.7.tar.gz  
  3. cd rrdtool-1.4.7  
  4. ./configure --prefix=/usr/local/rrdtool  
  5. make && make install  
  6. ln -s /usr/local/rrdtoo/bin/* /usr/local/bin/ 

小提示:很多同學會發現Cacti裏用rrdtool畫的圖片的最右邊有一豎排關於RRDTOOL標識的字,怎麼去掉呢,有辦法。在解壓了rrdtool源代碼包後,修改src目錄下的rrd_graph.c文件,用vim打開查找“RRDTOOL”,要是大寫的呢,1.4.7的版本是在第2740行,如圖:

修改RRDTOOL源代碼

去掉“RRDTOOL / TOBI OETIKER”,記住引號要留着。然後開配置,編譯,安裝就OK了,畫圖就沒有多餘的字了。我們可以看到源代碼裏有個“-90”,其實是恰好把那引號裏的字順時針轉了90度。

4.spine安裝
spine的安裝稍有點麻煩,如果net-snmp是編譯安裝的,加--with-snmp=/usr/local/net-snmp。另外,LNMP架構基本是編譯安裝的,所以

  1. ln -s /usr/local/mysql/lib/libmysql* /usr/lib/ 

做一個MySQL的庫的軟鏈接。
如果snmp是採用的yum安裝的,記得安裝net-snmp-devel和net-snmp-libs這兩個包。
編譯

  1. ./configure --prefix=/usr/local/spine  
  2. make && make install 

配置文件
填寫對應的數據庫和用戶名,可以做一個軟鏈接也可以不做:

  1. ln -s /usr/local/spine/etc/spine.conf /etc/ 

5.安裝Cacti
準備工作都差不多了,開始安裝Cacti。它的安裝過程挺簡單的,只要需要的軟件都安裝好了。
這裏採用官方最新版:0.8.8a

  1. wget http://www.cacti.net/downloads/cacti-0.8.8a.tar.gz 

解壓釋放到web根目錄下,最好沿用默認的二級目錄訪問形式cacti。
導入數據庫,修改config.php,填入相關數據庫和用戶名密碼。
打開客戶端瀏覽器http://ip/cacti/install,填入正確的路徑即可,不再詳細說明。

6.監控遠程Linux主機
以監控RedHat/CentOS系統爲例說明

需要注意的是以Unix開頭的模版只能監控本機,如果監控別的(遠程)的Linux主機,那所有主機的圖像和數據都是一樣的,即監控服務器本身的數據。

監控模版說明:

CPU:ucd/net - CPU Usage,SNMP - Get Processor Informatio(每個核一個圖,相對前面的比較準確點)

內存:SNMP - Get Mounted Partitions

磁盤: ucd/net - Get Monitored Partition(如果無數據就在被監控機器的snmpd.conf裏添加disk /), SNMP - Get Mounted Partitions也可以獲取到磁盤分區(如果是VPS,虛擬化出來的可能獲取不到,標準的物理Linux服務器是可以的)

負載:ucd/net - Load Average

進程:Host MIB - Processes

用戶:Host MIB - Logged in Users

網卡流量:SNMP - Interface Statistics

其他:待定。

 

7.常見問題
(1)rrdtool中文問題
1.4.7的版本是支持中文的,不需要修改源代碼文件,而1.2的版本就會亂碼。要讓圖完全顯示中文還需要修改下cacti目錄下lib/function.php,就在第一個PHP標籤里加入setlocale(LC_CTYPE,"en_US.UTF-8");
(2)監控nginx和php-fpm配置文件

  1. server {  
  2.  
  3.     listen   80;   
  4.     server_name  192.168.1.100;  
  5.  
  6.     root   /var/www/.monitor;  
  7.     index  index.php index.html;  
  8.       
  9.         location /nginx_status {  
  10.               stub_status on;  
  11.               # disable access_log if requared  
  12.               access_log   off;  
  13.               allow 192.168.1.101;  
  14.               deny all;  
  15.           }  
  16.         location ~ ^/(php_status)$ {  
  17.               include fastcgi_params;  
  18.               fastcgi_pass 127.0.0.1:9000;  
  19.               fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;  
  20.               access_log off;  
  21.               allow 192.168.1.101;  
  22.               deny all;  
  23.          }  

 (3)Cacti裏的單位

Cacti中使用如下單位:M(兆)、K(千)、m(微)。

這裏的單位 m 表示微,即需要除以1000。100m表示0.1。

m - 10^-3 即0.001
M - 10^6 
G - 10^9
T - 10^12

(4)snmp.conf自定義OID的說明

之所有講下這個是因爲snmp軟件版本(區分清楚snmp協議版本與軟件版本)問題,會出現一些很抓狂的問題。

舉個例子,自定義一個OID,監測LNMP架構中Nginx、MySQL以及php各種佔用的CPU和內存是多少。

首先上腳本:/etc/snmp/lnmp_status.sh

  1. #!/bin/bash 
  2. # 定義函數 
  3. function ps_aux() { 
  4. process=$1  # nginx httpd mysql php-fpm,and so on 
  5.  
  6. # 獲取對應性能佔用百分比,並用AWK求和 
  7. percent_cpu=(`ps aux | grep -i $process | grep -v "grep" | awk '{ total += $3 } END { print total }'`) 
  8. percent_mem=(`ps aux | grep -i $process | grep -v "grep" | awk '{ total += $4 } END { print total }'`) 
  9.  
  10. # 判斷進程是否爲空,爲空表示未開啓服務或進程 
  11. [ ! $percent_cpu ] && percent_cpu=0 
  12. [ ! $percent_mem ] && percent_mem=0 
  13.  
  14. # 輸出 
  15. echo $percent_cpu 
  16. echo $percent_mem 
  17.  
  18.  
  19. # 調用函數 
  20. ps_aux nginx 
  21. ps_aux mysql 
  22. ps_aux php-fpm 
  23.  
  24. # 統計網站數量並輸出 
  25. web_num=`ls /var/www/html | wc -l` 
  26. echo $web_num 

這裏多添加了一個統計/var/www/html/目錄下所運行的網站的數量,所以一共有7個數據返回,定義的OID是.1.3.6.1.4.1.2021.23,所以在/etc/snmpd.conf裏添加一下內容:

  1. extend .1.3.6.1.4.1.2021.23 lnmp_status /bin/bash /etc/snmp/lnmp_status.sh 

需要說明的問題在這裏:在RHEL 5平臺下的snmp軟件的版本是5.3,而到了RHEL 6平臺下snmp的版本是5.5(可以使用snmpd -v命令查詢軟件版本),是5.3的版本里可以使用exec關鍵字來定義自己的OID,但是在5.5版本下就不行了,如果用exec,就會報錯

SNMP 5.5 使用 exec 報錯

這會很抓狂的,所以統一都使用extend

模版在附件裏有,先看看效果圖:

Cacti監控LNMP架構的效果圖

(5)圖形模版裏的“| date_time |”

在有些圖形模版裏,有些打印了“最後更新時間”,但是打印出來的格式卻不怎麼符合我們的習慣,是如下的模式:

 

就像是在Linux下執行單純的“date”命令一樣,這其實是用php的date函數打印出來的,我們可以修改下Cacti的源代碼,文件是cacti/lib/rrd.php。

打開後查找"date_time",可以看到模式的格式是:

  1. date('D d M H:i:s T Y'

修改爲

  1. date('Y-m-d (l) H:i:s'

看看打印的效果

 

這個是可以自定義的,php裏的date函數具體怎麼用可以去查下資料,大致按照中國人的習慣打印出”年-月-日 時間“的格式就差不多習慣了。

(6)待添加

 

本文出自 “陸小K網絡工作室” 博客,請務必保留此出處http://luxiaok.blog.51cto.com/2177896/1006175

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章