天天看點

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資料庫中提取資料。

CentOS6.9 Cacti 流量監控全步驟、郵件報警實作過程
  • 首先是 lamp 環境,接下來我們順序安裝

[[email protected] src]# yum -y install gcc gcc-c++ make 

[[email protected] src]# yum groupinstall chinese-support

[[email protected] src]# tar zxf apr-1.4.6.tar.gz

[[email protected] src]# tar zxf apr-util-1.5.2.tar.gz

[[email protected] src]# tar zxf pcre-8.30.tar.gz

[[email protected] src]# tar zxf httpd-2.4.3.tar.gz

[[email protected] src]# cd apr-1.4.6

[[email protected] apr-1.4.6]# ./configure --prefix=/usr/local/apr

[[email protected] apr-1.4.6]# make && make install

[[email protected] apr-1.4.6]# cd ../apr-util-1.5.2

[[email protected] apr-util-1.5.2]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/

[[email protected] apr-util-1.5.2]# make && make install

[[email protected] apr-util-1.5.2]# cd ../pcre-8.30

[[email protected] pcre-8.30]# ./configure --prefix=/usr/local/pcre

[[email protected] pcre-8.30]# make && make install

[[email protected] pcre-8.30]# cd ../httpd-2.4.3

[[email protected] 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/

[[email protected] httpd-2.4.3]# make && make install

[[email protected] src]# yum -y install cmake ncurses ncurses-devel

[[email protected] src]# groupadd mysql

[[email protected] src]# useradd -r -s /sbin/nologin -g mysql mysql

[[email protected] src]# tar zxf mysql-5.6.4-m7.tar.gz

[[email protected] mysql-5.6.4-m7]# cmake .

[[email protected] mysql-5.6.4-m7]# make && make install

[[email protected] mysql-5.6.4-m7]# cd ../../

[[email protected] local]# chown -R root:mysql mysql/

[[email protected] local]# chown -R mysql mysql/data/

[[email protected] local]# cp mysql/support-files/mysql.server /etc/init.d/mysqld

[[email protected] local]# cp mysql/support-files/my-medium.cnf /etc/my.cnf

cp:是否覆寫"/etc/my.cnf"? y

[[email protected] 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

[[email protected] 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

[[email protected] src]# tar jxf libmcrypt-2.5.8.tar.bz2

[[email protected] src]# tar jxf php-5.4.13.tar.bz2

[[email protected] src]# cd libmcrypt-2.5.8

[[email protected] libmcrypt-2.5.8]# ./configure

[[email protected] libmcrypt-2.5.8]# make && make install

[[email protected] libmcrypt-2.5.8]# cd ../php-5.4.13

[[email protected] 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

[[email protected] php-5.4.13]# make && make install

[[email protected] php-5.4.13]# cp php.ini-production /usr/local/php/php.ini

[[email protected] local]# vim apache/conf/httpd.conf    ##  簡單修改幾個地方

[[email protected] local]# ./apache/bin/apachectl start

[[email protected] local]# netstat -anpt | grep httpd    ##  apache 正常

tcp        0      0 :::80                       :::*                        LISTEN      33293/httpd

[[email protected] local]# echo "/usr/local/apache/bin/apachectl start" >> /etc/rc.local

[[email protected] local]# service mysqld start

Starting MySQL..... SUCCESS!

[[email protected] local]# netstat -anpt | grep mysqld   ##  mysql 正常

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      33643/mysqld

[[email protected] local]# echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile

[[email protected] local]# source /etc/profile

[[email protected] local]# chkconfig --add mysqld

[[email protected] local]# chkconfig --level 35 mysqld on

[[email protected] local]# mysqladmin -u root -p password 123456

Enter password:

[[email protected] local]# vim apache/htdocs/test.php    ##  添加php探針

[[email protected] local]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT

[[email protected] local]# service iptables save

iptables:将防火牆規則儲存到 /etc/sysconfig/iptables:[确定]

[[email protected] local]# service iptables reload       ##  用戶端通路php探針測試

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

[[email protected] ~]# date                              ##  首先檢視一下系統時間對不對 不對要更正一下

2014年 02月 12日 星期三 21:38:11 CST     

[[email protected] ~]# yum -y install ntp

[[email protected] ~]# cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

cp:是否覆寫"/etc/localtime"? y

[[email protected] ~]# ntpdate us.pool.ntp.org | hwclock -w

2014年02月12日 星期三 21時59分28秒  -0.105724 seconds

[[email protected] ~]# date

2014年 02月 12日 星期三 14:32:41 CST

[[email protected] src]# tar zxf cacti-0.8.8b.tar.gz -C /usr/local/apache/htdocs/

[[email protected] src]# cd /usr/local/apache/htdocs/

[[email protected] htdocs]# mv cacti-0.8.8b cacti

[[email protected] htdocs]# useradd cactiuser

[[email protected] htdocs]# chown -R cactiuser:cactiuser cacti/rra cacti/log

[[email protected] ~]# mysql -u root -p123456

mysql> create database cacti;

Query OK, 1 row affected (0.00 sec)

mysql> grant all on cacti.* to [email protected] 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

[[email protected] ~]# 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:

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

報錯:

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

仔細檢查了一下應該是少了一些必須支援的庫檔案,執行以下指令:

[[email protected] rrdtool-1.4.8]# yum -y install pango*

[[email protected] rrdtool-1.4.8]#yum -y install libxml2-devel

[[email protected] ~]# yum -y install net-snmp net-snmp-utils

[[email protected] ~]# 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                         ##  注釋去掉

[[email protected] ~]# service snmpd start

正在啟動 snmpd:                                           [确定]

[[email protected] ~]# chkconfig --add snmpd

[[email protected] ~]# chkconfig --level 35 snmpd on

三、通路位址安裝 cacti

通路 http://192.168.0.220/cacti  安裝提示下一步,之後會顯示頁面空白 檢視網站錯誤資訊發現如下:

報錯:

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

解決方法(配置檔案添加此項):

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

date_default_timezone_set('Asia/Shanghai');

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

[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

處理方法:

[[email protected] ~]# vim /usr/local/apache/htdocs/cacti/lib/functions.php

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

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

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

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

[[email protected] ~]# yum -y install vixie-cron

[[email protected] ~]# crontab -u cactiuser -e

[[email protected] ~]# crontab -u cactiuser -l   ##  這樣的話 cacti 就可以出圖了

*/1 * * * * /usr/local/php/bin/php /usr/local/httpd/htdocs/cacti/poller.php > /dev/null 2>&1

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

[[email protected] ~]# service crond start

[[email protected] ~]# chkconfig --add crond

[[email protected] ~]# chkconfig --level 35 crond on

[[email protected] ~]# 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

處理方法:

[[email protected] ~]# vim /usr/local/php/php.ini

919 date.timezone = "Asia/shanghai"      ##  将時區改為上海

[[email protected] ~]# /usr/local/apache/bin/apachectl restart     ##  重新開機 apache 檢視 cacti 是否有資料

[[email protected] ~]# iptables -I INPUT -p tcp --dport 199 -j ACCEPT   ## 如果檢測非本機要開放199端口,以便net-snmp去抓取資料

[[email protected] ~]# service iptables save

[[email protected] ~]# 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)

[[email protected] ~]# tar zxf cacti-spine-0.8.8h.tar.gz -C /usr/src/

[[email protected] ~]# cd /usr/src/cacti-spine-0.8.8h/

[[email protected] cacti-spine-0.8.8h]# ./configure

configure: error: MySQL libraries not found

這部報錯:

解決方法

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

[[email protected] cacti-spine-0.8.8h]# ./configure --build=x86_64-unknown-linux

[[email protected] cacti-spine-0.8.8h]# make && make install

執行時報錯解決方法:

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

[[email protected] src]# tar zxf monitor-v1.3-1.tgz

[[email protected] src]# mv monitor ../apache/htdocs/cacti/plugins/         

[[email protected] src]# tar zxf settings-v0.71-1.tgz

[[email protected] src]# mv settings ../apache/htdocs/cacti/plugins

[[email protected] src]# tar zxf thold-v0.5.0.tgz

[[email protected] src]# mv thold ../apache/htdocs/cacti/plugins

[[email protected] 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->在這裡可以看到添加的插件名前面有一個藍色向下的箭頭->點選之後在點旁邊的綠色向右的箭頭就可以顯示出你的插件了。

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

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