CentOS6.9 Cacti 流量監控全步驟、郵件報警實現過程

Cacti 流量監控全步驟、郵件報警實現過程

Cacti簡介

   Cacti是一套基於PHP,MySQL,SNMP及RRDTool開發的網絡流量監測圖形分析工具。採用PHP進行前端代碼驅動。通過SNMP獲得被監控主機的數據信息。rrdtool關係着數據存儲和圖表的生成。Mysql配合PHP程序存儲一些變量數據並對變量數據進行調用。它提供了非常強大的數據和用戶管理功能,可以指定每一個用戶能查看樹狀結構、host以及任何一張圖,還可以與LDAP結合進行用戶驗證,同時也能自己增加模板,功能非常強大完善。Cacti的發展是基於讓RRDTool使用者更方便使用該軟件,除了基本的Snmp流量跟系統資訊監控外,Cacti也可外掛Scripts及加上Templates來作出各式各樣的監控圖。

   snmp(Simple Network Management Protocal,簡單網絡管理協議)在架構體系的監控子系統中將扮演重要角色。大體上,其基本原理是,在每一個被監控的主機或節點上(如交換機)都運行了一個agent,用來收集這個節點的所有相關的信息,同時監聽snmp的port,也就是UDP 161,並從這個端口接收來自監控主機的指令(查詢和設置)。如果安裝net-snmp,被監控主機需要安裝net-snmp(包含了snmpd這個agent),而監控端需要安裝net-snmp-utils,若接受被監控端通過trap-communicate發來的信息的話,則需要安裝net-snmp,並啓用trap服務。如果自行編譯,需要beecrypt(libbeecrypt)和elf(libraryelf)的庫。

   snmp抓到數據不是存儲在mysql中,而是存在rrdtool生成的rrd文件中(在cacti根目錄的rra文件夾下)。rrdtool對數據的更新和存儲就是對rrd文件的處理,rrd文件是大小固定的檔案文件(Round Robin Archive),它能夠存儲的數據筆數在創建時就已經定義。

   RRDtool是指Round Robin Database工具(環狀數據庫)。Round robin是一種處理定量數據、以及當前元素指針的技術。想象一個周邊標有點的圓環--這些點就是時間存儲的位置。從圓心畫一條到圓周的某個點的箭頭--這就是指針。就像我們在一個圓環上一樣,沒有起點和終點,你可以一直往下走下去。過來一段時間,所有可用的位置都會被用過,該循環過程會自動重用原來的位置。這樣,數據集不會增大,並且不需要維護。RRDtool處理RRD數據庫。它用向RRD數據庫存儲數據、從RRD數據庫中提取數據。

  • 首先是 lamp 環境,接下來我們順序安裝

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

[root@localhost src]# yum groupinstall chinese-support
[root@localhost src]# tar zxf apr-1.4.6.tar.gz
[root@localhost src]# tar zxf apr-util-1.5.2.tar.gz
[root@localhost src]# tar zxf pcre-8.30.tar.gz
[root@localhost src]# tar zxf httpd-2.4.3.tar.gz
[root@localhost src]# cd apr-1.4.6
[root@localhost apr-1.4.6]# ./configure --prefix=/usr/local/apr
[root@localhost apr-1.4.6]# make && make install
[root@localhost apr-1.4.6]# cd ../apr-util-1.5.2
[root@localhost apr-util-1.5.2]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
[root@localhost apr-util-1.5.2]# make && make install
[root@localhost apr-util-1.5.2]# cd ../pcre-8.30
[root@localhost pcre-8.30]# ./configure --prefix=/usr/local/pcre
[root@localhost pcre-8.30]# make && make install
[root@localhost pcre-8.30]# cd ../httpd-2.4.3
[root@localhost httpd-2.4.3]# ./configure --prefix=/usr/local/httpd --enable-so --enable-cgi --enable-rewrite --with-mpm=worker --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre/
[root@localhost httpd-2.4.3]# make && make install
[root@localhost src]# yum -y install cmake ncurses ncurses-devel
[root@localhost src]# groupadd mysql
[root@localhost src]# useradd -r -s /sbin/nologin -g mysql mysql
[root@localhost src]# tar zxf mysql-5.6.4-m7.tar.gz
[root@localhost mysql-5.6.4-m7]# cmake .
[root@localhost mysql-5.6.4-m7]# make && make install
[root@localhost mysql-5.6.4-m7]# cd ../../
[root@localhost local]# chown -R root:mysql mysql/
[root@localhost local]# chown -R mysql mysql/data/
[root@localhost local]# cp mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost local]# cp mysql/support-files/my-medium.cnf /etc/my.cnf
cp:是否覆蓋"/etc/my.cnf"? y
[root@localhost local]# ./mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/

報錯:

-bash: ./mysql/scripts/mysql_install_db: /usr/bin/perl: bad interpreter: No such file or directory

解決方法:

yum -y install perl perl-devel


[root@localhost src]# yum -y install automake autoconf libtool libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel libxslt libxslt-devel
[root@localhost src]# tar jxf libmcrypt-2.5.8.tar.bz2
[root@localhost src]# tar jxf php-5.4.13.tar.bz2
[root@localhost src]# cd libmcrypt-2.5.8
[root@localhost libmcrypt-2.5.8]# ./configure
[root@localhost libmcrypt-2.5.8]# make && make install
[root@localhost libmcrypt-2.5.8]# cd ../php-5.4.13
[root@localhost php-5.4.13]# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-config-file-path=/usr/local/php --enable-mbstring --enable-sockets --with-gd --with-xsl --with-zlib-dir --with-libxml-dir --with-bz2 --enable-exif --enable-ftp --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --enable-soap --with-gd-native-tty --with-mcrypt
[root@localhost php-5.4.13]# make && make install
[root@localhost php-5.4.13]# cp php.ini-production /usr/local/php/php.ini
[root@localhost local]# vim apache/conf/httpd.conf    ##  簡單修改幾個地方
[root@localhost local]# ./apache/bin/apachectl start
[root@localhost local]# netstat -anpt | grep httpd    ##  apache 正常
tcp        0      0 :::80                       :::*                        LISTEN      33293/httpd
[root@localhost local]# echo "/usr/local/apache/bin/apachectl start" >> /etc/rc.local
[root@localhost local]# service mysqld start
Starting MySQL..... SUCCESS!
[root@localhost local]# netstat -anpt | grep mysqld   ##  mysql 正常
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      33643/mysqld
[root@localhost local]# echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile
[root@localhost local]# source /etc/profile
[root@localhost local]# chkconfig --add mysqld
[root@localhost local]# chkconfig --level 35 mysqld on
[root@localhost local]# mysqladmin -u root -p password 123456
Enter password:
[root@localhost local]# vim apache/htdocs/test.php    ##  添加php探針
[root@localhost local]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@localhost local]# service iptables save
iptables:將防火牆規則保存到 /etc/sysconfig/iptables:[確定]

[root@localhost local]# service iptables reload       ##  客戶端訪問php探針測試

二、那接下來就是cacti的安裝了

[root@localhost ~]# date                              ##  首先查看一下系統時間對不對 不對要更正一下
2014年 02月 12日 星期三 21:38:11 CST     
[root@localhost ~]# yum -y install ntp
[root@localhost ~]# cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
cp:是否覆蓋"/etc/localtime"? y
[root@localhost ~]# ntpdate us.pool.ntp.org | hwclock -w
2014年02月12日 星期三 21時59分28秒  -0.105724 seconds
[root@localhost ~]# date
2014年 02月 12日 星期三 14:32:41 CST
[root@localhost src]# tar zxf cacti-0.8.8b.tar.gz -C /usr/local/apache/htdocs/
[root@localhost src]# cd /usr/local/apache/htdocs/
[root@localhost htdocs]# mv cacti-0.8.8b cacti
[root@localhost htdocs]# useradd cactiuser
[root@localhost htdocs]# chown -R cactiuser:cactiuser cacti/rra cacti/log
[root@localhost ~]# mysql -u root -p123456
mysql> create database cacti;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on cacti.* to cacti@localhost identified by 'cacti';
Query OK, 0 rows affected (0.00 sec)
mysql> use cactidb;
Database changed
mysql> source /usr/local/apache/htdocs/cacti/cacti.sql
mysql> quit
[root@localhost ~]# vim /usr/local/apache/htdocs/cacti/include/config.php
$database_type = "mysql";
$database_default = "cactidb";
$database_hostname = "localhost";
$database_username = "cactiuser";
$database_password = "cactiuser";
$database_port = "3306";
$database_ssl = false;

 

安裝rrdtool

報錯:

configure: error: Please fix the library issues listed above and try again.

仔細檢查了一下應該是少了一些必須支持的庫文件,執行以下命令:

[root@localhost rrdtool-1.4.8]# yum -y install pango*

[root@localhost rrdtool-1.4.8]#yum -y install libxml2-devel

 

 


[root@localhost ~]# yum -y install net-snmp net-snmp-utils
[root@localhost ~]# vim /etc/snmp/snmpd.conf
41   com2sec notConfigUser  192.168.0.218   public                  ##  IP、共同體名
62   access  notConfigGroup "" any noauth  exact  all none none     ##  改爲all
85   view all    included  .1            80                         ##  註釋去掉
[root@localhost ~]# service snmpd start
正在啓動 snmpd:                                           [確定]
[root@localhost ~]# chkconfig --add snmpd
[root@localhost ~]# chkconfig --level 35 snmpd on

三、訪問地址安裝 cacti

訪問 http://192.168.0.220/cacti  安裝提示下一步,之後會顯示頁面空白 查看網站錯誤信息發現如下:

 

報錯:

解決方法(配置文件添加此項):

vi /usr/local/httpd/htdocs/cacti/include/global_constants.php

date_default_timezone_set('Asia/Shanghai');


[Wed Feb 12 15:33:55.510859 2014] [:error] [pid 33781:tid 140656689280768] [client 192.168.0.180:63096] PHP Fatal error:  Call to undefined function session_unregister() in /usr/local/apache/htdocs/cacti/lib/functions.php on line 408, referer: http://192.168.0.220/cacti/install/index.php
處理方法:
[root@localhost ~]# vim /usr/local/apache/htdocs/cacti/lib/functions.php

408 #       session_unregister($var_name);   ##  把這行註釋掉,刷新頁面後就可以繼續操作了

接下來點擊 Create Graphs for this Host  就可以檢測到主機的兩塊網卡 可以選擇添加


 

[root@localhost ~]# yum -y install vixie-cron

[root@localhost ~]# crontab -u cactiuser -e
[root@localhost ~]# crontab -u cactiuser -l   ##  這樣的話 cacti 就可以出圖了
*/1 * * * * /usr/local/php/bin/php /usr/local/httpd/htdocs/cacti/poller.php > /dev/null 2>&1


[root@localhost ~]# service crond start
[root@localhost ~]# chkconfig --add crond
[root@localhost ~]# chkconfig --level 35 crond on
[root@localhost ~]# cat /usr/local/apache/logs/error_log     ##  這是 cacti 出圖無數據的情況 php 時區報錯
[Wed Feb 12 16:01:41.030899 2014] [:error] [pid 33783:tid 140656573892352] [client 192.168.0.180:63160] PHP Warning:  date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/local/apache/htdocs/cacti/include/global_arrays.php on line 672, referer: http://192.168.0.220/cacti/graph_view.php?action=tree&tree_id=1&leaf_id=7
處理方法:
[root@localhost ~]# vim /usr/local/php/php.ini
919 date.timezone = "Asia/shanghai"      ##  將時區改爲上海
[root@localhost ~]# /usr/local/apache/bin/apachectl restart     ##  重啓 apache 查看 cacti 是否有數據
[root@localhost ~]# iptables -I INPUT -p tcp --dport 199 -j ACCEPT   ## 如果檢測非本機要開放199端口,以便net-snmp去抓取數據
[root@localhost ~]# service iptables save
[root@localhost ~]# service iptables reload
##  到現在爲止 cacti 已經能夠正常運行了,總結一下:安裝步驟呢就是上述這些,首先保證你的 lamp 環境可以正常運行,之後要檢查你的系統時間是否正確,因爲這會影響到 cacti 圖中是否有數據,接下來的 cacti 安裝按步驟來就好了,第一次訪問 cacti 時會出現空白頁的情況,這是因爲 php 的問題導致,高版本的 php 中會話函數被取消,而我們使用的 cacti 版本中還在繼續使用,所以我們要註釋掉這個函數,裝完 cacti 要定義一個任務計劃,讓 rrdtool 工具來定時畫圖,有沒有圖去 cacti/rra/ 這個目錄底下一看遍知,出圖之後還要注意一下 php.ini 中的時區配置,這可能會導致你的圖出的很晚,一般晚八個小時,這個在 apache 的 error.log 中也是有體現出來的,最後:檢測主機外的設備時,例如檢查其他 Linux 主機,還要 iptables 開放 tcp 199 端口,可以讓 net-snmp 去抓取數據(因爲我一般 OUTPUT 鏈是 ACCEPT ,所有不用做什麼)、被檢測的主機要安裝 net-snmp 包,然後按照上面的設置配置 /etc/snmp/snmpd.conf ,這裏注意一下, 41 行的 IP 地址爲 source  也就是源地址,是你 cacti 監控機的地址,不是被檢測主機的地址,如果你的 cacti 在內網,而被監控機在外網,這裏需要寫你路由器的公網地址(這個地址會變)、然後還有一點要注意,被監控機要開啓 udp 161 端口。

四、Cacti 插件的安裝

首先說一下,cacti 在安裝插件前要確認一下你的這個版本有沒有集成plugin架構擴展,這是安裝所有插件的前提,在0.8.7i後的cacti版本才集成這個,否則要手動安裝。(我使用的是0.8.8b 所以不用安裝)這個是插件下載地址,按第一個字母排序  http://docs.cacti.net/plugins
monitor 提供更簡略、直觀的設備狀態圖 Settings 、thold 用於設置郵件報警

安裝cacti-spine-0.8.8h.tar.gz高速採集器(我的是cacti-0.8.8h.tar.gz)

[root@mail ~]# tar zxf cacti-spine-0.8.8h.tar.gz -C /usr/src/

[root@mail ~]# cd /usr/src/cacti-spine-0.8.8h/

[root@mail cacti-spine-0.8.8h]# ./configure

configure: error: MySQL libraries not found

這部報錯:

解決方法

[root@mail cacti-spine-0.8.8h]# yum -y install net-snmp-devel myql-devel openssl-devel automake autoconf libtool make

[root@mail cacti-spine-0.8.8h]# ./configure --build=x86_64-unknown-linux

[root@mail cacti-spine-0.8.8h]# make && make install

執行時報錯解決方法:

 


[root@localhost src]# tar zxf monitor-v1.3-1.tgz
[root@localhost src]# mv monitor ../apache/htdocs/cacti/plugins/         
[root@localhost src]# tar zxf settings-v0.71-1.tgz
[root@localhost src]# mv settings ../apache/htdocs/cacti/plugins
[root@localhost src]# tar zxf thold-v0.5.0.tgz
[root@localhost src]# mv thold ../apache/htdocs/cacti/plugins

[root@localhost src]# vim ../apache/htdocs/cacti/include/plugins.php
9  $plugin_hooks = array();            ##  搜索到第九行的字段之後在下一行加入內容,保存退出
10 $plugins[] = 'monitor'; 
11 $plugins[] = 'settings';
12 $plugins[] = 'thold';
##  接着打開 cacti->console->Plugin Management->在這裏可以看到添加的插件名前面有一個藍色向下的箭頭->點擊之後在點旁邊的綠色向右的箭頭就可以顯示出你的插件了。

五、配置插件實現郵件報警

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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