實驗:用loganalyzer實現web瀏覽器訪問日誌


一:實驗環境;                                                                        

1、使用LAMP實現web服務器訪問日誌;

2、A:Centos 6;ip:172.17.250.109  ---》mariadb

     B:Centos 6;ip:172.17.250.106  ---》rsyslog、rsyslog-mysql(Centos 6以後的版本)

     C:Centos 7;ip:172.17.253.35    ----》httpd、php-fpm、php-gd、php-mysql

即,將數據庫和日誌分別放在不同機器上,實現遠程查看管理日誌的功能,然後有另一臺機器是web服務器爲遠程web訪問日誌響應資源(即做反向代理),若是訪問靜態的頁面,web服務器利用Apache的httpd直接響應,但若是訪問像日誌這種動態的頁面的時候,就需要藉助FCGI(快速通用網關接口)協議傳給php運行,,若果需要訪問數據庫的話,php去訪問數據庫,然後再將結果變成靜態頁面傳給httpd,httpd再去響應客戶端,在這裏用的是php的獨立方式php-fpm;並且與Apache服務放在一臺機器上;

3、使用loganalyzer程序實現web查看日誌的功能;loganalyzer是一個編好的程序,直接拿來用就好了;

二:實驗步驟;                                                                             

1、B機器上;

用yum安裝rsyslog;首先需要將yum配好;我的yum源是這樣的;

[root@B ~]# cat /etc/yum.repos.d/sjj.repo 
[base1]
name=Centos 6
baseurl=file:///media/CentOS_6.9_Final
gpgcheck=0

[epel]
name=Centos 6.9
baseurl=http://172.17.0.1/fedora-epel/6/x86_64/
gpgcheck=0
[root@B ~]# 
[root@B ~]# yum install rsyslog rsyslog-mysql -y            #將兩個一起安裝一下;
其中安裝rsyslog-mysql時會有一個創建數據庫的一個腳本/usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql數據庫文件生成;

root@B ~]# scp /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql 172.17.250.109:   #將這個數據庫文件傳到A機器上,用於創建數據庫
然後定義配置文件;
[root@B ~]# vim /etc/rsyslog.conf      
#### MODULES ####
$ModLoad ommysql                                                    #在MODULES添加上去的rsyslog-mysql的模塊
#### RULES ####
*.info;mail.none;authpriv.none;cron.none           :ommysql:172.17.250.109,Syslog,loguser,magedu   #在RULES裏改這一行爲後面的格式;其中Syslog是數據庫名,loguser是在A中創建授權的用戶及“magedu”密碼,這些都是利用傳到A上的數據庫腳本自動創建的
[root@B ~]# service rsyslog start                      #啓動rsyslog服務

2、A機器上;

用邏輯卷安裝二進制mariadb數據庫;

1)、創建邏輯卷;

先加一塊200G的硬盤(爲了給數據庫足夠大的空間,用整塊盤做數據庫);然後執行命令使其生效;

[root@A ~]# echo '- - -' > /sys/class/scsi_host/host0/scan    #有時候也可能是host2,兩個都試一下
接下來開始創建邏輯卷;

[root@A ~]# pvcreate /dev/sdb                                #創建pv物理卷
[root@A ~]# vgcreate vg_mysqldb /dev/sdb                     #創建vg卷組
[root@A ~]# lvcreate -n lv_mysqldb -l +100%FREE vg_mysqldb   #創建lv邏輯卷,將所有的空間都分給它
[root@A ~]# mkfs.ext4 /dev/vg_mysqldb/lv_mysqldb -L /data/mysql #將其格式化,並設卷標爲/data/mysql
掛載;

[root@A ~]# mkdir -p /data/mysql                       #創建一個目錄作爲掛載點;
[root@A ~]# vim /etc/fstab                              #寫到掛載文件裏,使其永遠生效
	/dev/vg_mysqldb/lv_mysqldb      /data/mysql    ext4     defaults      0 0 
[root@A ~]# tune2fs -o acl /dev/vg_mysqldb/lv_mysqldb  #可以加上acl權限(也可以直接寫在掛載文件default後面)
[root@A ~]# mount -a                                   #使/etc/fstab文件裏沒有掛載的立即掛載生效
[root@A ~]# chown mysql /data/mysql/                   #改變/data/mysql的所屬人,使mysql在其下可以創建或刪除文件(注意若mysql用戶不存在要先創建一下)
2)、安裝二進制mariadb;(可以參考我的博客http://blog.csdn.net/oh_on/article/details/78326030;這裏就簡單說一下步驟,不細說了*-*)

[root@A ~]# tar xvf mariadb-5.5.57-linux-x86_64.tar.gz -C /usr/local/                            #解壓到指定目錄
[root@A /usr/local/mysql]# cd /usr/local/
[root@A /usr/local/mysql]# mv mariadb-5.5.57-linux-x86_64/ mysql                                 #進去後,改名爲mysql(這裏我用的mv,也可以創建軟連接)
[root@A /usr/local/mysql]# cd mysql/
[root@A /usr/local/mysql]# ./scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql      #生成數據庫
[root@A /usr/local/mysql]# mkdir /etc/mysql
[root@A /usr/local/mysql]# cp support-files/my-huge.cnf  /etc/mysql/my.cnf                      #定義配置文件,名字必須是my.cnf
[root@A /usr/local/mysql]# vim /etc/mysql/my.cnf                   #在配置文件裏的[mysqld]下加上下面三行
[mysqld]
datadir = /data/mysql
innodb_file_per_table = on
skip_name_resolve = on
[root@A /usr/local/mysql]# cp support-files/mysql.server /etc/init.d/mysqld       #拷貝服務腳本
[root@A /usr/local/mysql]# chkconfig --list mysqld                                #檢查是否已添加服務,若沒有的話用下面的命令添加一下
[root@A /usr/local/mysql]# chkconfig --add mysqld
[root@A /usr/local/mysql]# service mysqld start                                   #啓動mysqld服務,這裏會報錯,找不到/var/log/mysqld.log日誌文件
[root@A /usr/local/mysql]# touch /var/log/mysqld.log                              #創建日誌文件,並將所屬人改爲mysql;然後啓動服務就可以啦
[root@A /usr/local/mysql]# chown mysql /var/log/mysqld.log
[root@A /usr/local/mysql]# service mysqld start 
[root@A /usr/local/mysql]# mysql_secure_installation                             #跑安全腳本,參考http://blog.csdn.net/oh_on/article/details/78326030博客
然後利用B上傳來的創建數據庫腳本文件生成數據庫;

[root@A /usr/local/mysql]# cd                        #因爲傳的時候直接放在了家目錄下,所以要回到家目錄下執行,或者寫絕對路徑也行
[root@A ~]# mysql -uroot -pmagedu < createDB.sql     #密碼是跑安全腳本時設定的,
[root@A ~]# 
[root@A ~]# mysql -uroot -pmagedu                              #可以登陸上查看一下是否生成
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.5.57-MariaDB MariaDB Server

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| Syslog              |   #可以看到Syslog數據庫,就是腳本生成的數據庫
| #mysql50#lost+found |
| mysql               |
| performance_schema  |
+---------------------+
5 rows in set (0.01 sec)

mysql> use Syslog               #進去這個數據庫查看一下里面自動生成的表
Database changed
mysql> show tables
    -> ;
+------------------------+
| Tables_in_Syslog       |
+------------------------+
| SystemEvents           |
| SystemEventsProperties |
+------------------------+
2 rows in set (0.00 sec)
mysql> grant all on Syslog.* to 'loguser'@'172.17.250.106' identified by 'magedu';    #然後授權;給B機器上的loguser,讓其可以用magedu密碼登錄管理數據庫Syslog上所有選項
mysql> grant select on Syslog.* to 'loguser'@'172.17.253.35' identified by 'magedu';  #也可以先給C機器也授權,但只給它查詢的功能

2、在C機器上;

編譯安裝httpd在博客http://blog.csdn.net/oh_on/article/details/78326023中有詳細介紹,這次我用yum安裝

在用yum安裝之前首先確保yum源配好;我的yum源如下,配了一個base和一個epel;

[root@c ~]# cat /etc/yum.repos.d/sjj.repo 
[base]
name= Centos 7
baseurl=file:///run/media/root/CentOS\ 7\ x86_64
gpgcheck=0

[epel]
name=Centos 7.1
baseurl=http://172.17.0.1/fedora-epel/7/x86_64/
gpgcheck=0
[root@c ~]# 
[root@c ~]# yum install httpd php-mysql php-gd -y           #將所需要的包一起安裝一下;php-mysql顯而易見是與數據庫相關的,php-gd是圖形包,
 1)、接下來就編譯安裝php;

[root@c ~]# tar xvf php-5.6.31.tar.xz        #解壓縮並且進入目錄下
[root@c ~]# cd php-5.6.31/
[root@c ~/php-5.6.31]# yum install bzip2-devel libxml2-devel libmcrypt-devel -y   #安裝一些相關包(這三個包都是epel源的),要不然在編譯時會報錯,到時候按照報錯再裝也行
[root@c ~/php-5.6.31]# ./configure --prefix=/app/php --with-mysql --with-openssl  --with-mysqli --enable-mbstring --with-freetype-dir --with-jpeg-dir  --with-png-dir  --with-zlib  --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-mcrypt  --with-config-file-path=/etc/php/  --with-config-file-scan-dir=/etc/php.d  --with-bz2
  #其中這些後面都可以接目錄的,因爲我的數據庫建在另一臺機器上,所以-with-mysql和--with-mysqli後面沒有接路徑,而是直接啓用此功能就行了;並且/etc/php需要手動創建,存放配置文件的
[root@c ~/php-5.6.31]# make && make install                           #安裝
[root@c ~/php-5.6.31]# mkdir /etc/php
[root@c ~/php-5.6.31]# cp php.ini-production /etc/php/php.ini             #拷貝配置文件,用商業版(production)
[root@c ~/php-5.6.31]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm     #將服務腳本拷貝到相應目錄下
[root@c ~/php-5.6.31]# ll /etc/init.d/php-fpm 
-rw-r--r--. 1 root root 2348 Oct 29 11:02 /etc/init.d/php-fpm
[root@c ~/php-5.6.31]# chmod +x /etc/init.d/php-fpm                      #因爲是個服務腳本,所以賦予其執行權限
[root@c ~/php-5.6.31]# ll /etc/init.d/php-fpm
-rwxr-xr-x. 1 root root 2348 Oct 29 11:02 /etc/init.d/php-fpm
[root@c ~/php-5.6.31]# chkconfig --add php-fpm                           #並且將ph-fpm添加到服務裏
[root@c ~/php-5.6.31]# chkconfig --list php-fpm                          #查看一下是否添加成功
[root@c ~/php-5.6.31]# cp /app/php/etc/php-fpm.conf.default /app/php/etc/php-fpm.conf   #改一下配置文件名;因爲在服務啓動的時候讀的配置文件名字php-fpm.conf;若不改名的話啓動php-fpm服務時會報錯
2)、配置httpd支持php 
[root@c ~/php-5.6.31]# vim /etc/httpd/conf/httpd.conf   
<IfModule dir_module>
    DirectoryIndex index.php index.html              #在配置文件中添加如下行裏的index.php
</IfModule>               
ProxyRequests Off                                       #還有在最後加上下面的兩行
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
[root@c ~/php-5.6.31]# systemctl start php-fpm           #啓動php-fpm服務(Centos 7裏的新命令systemctl,相當於service)  
3)、準備loganalyzer;

首先找到官網下載一個壓縮包;這裏我用的是我們馬哥教育提供的服務器上下載的;loganalyzer-4.1.5.tar.gz

[root@c ~]# tar xvf loganalyzer-4.1.5.tar.gz                              #因爲我直接下載到家目錄下了,所以就去家目錄下解壓縮
[root@c ~]# cd loganalyzer-4.1.5/
[root@c ~/loganalyzer-4.1.5]# cp -a src/* /var/www/html/log               #因爲loganalyzer是一個完整的程序,配置文件都是準備好的,進去目錄下,將src目錄下的頁面文件都拷貝到默認的主站點目錄下
[root@c ~/loganalyzer-4.1.5]# cd contrib/
[root@c ~/loganalyzer-4.1.5/contrib]# ls                     
configure.sh  secure.sh
[root@c ~/loganalyzer-4.1.5/contrib]# cp configure.sh  /var/www/html/log/  #configure.sh腳本里是生成config.php文件並改其權限爲666的內容,所以我們可以將其複製到站點目錄下執行該文件,或者複製裏面的兩個操作直接在命令行執行也行
[root@c ~/loganalyzer-4.1.5/contrib]# cd /var/www/html/log/
[root@c /var/www/html/log]# bash configure.sh                            #這裏我用的是複製到主站點目錄下,執行腳本,讓它自動創建並賦權限給config.php文件
重啓httpd服務;

到這裏基本的步驟都完成了;

總結:

1、在A機器上搭建了數據庫(用邏輯卷的方式完成的),並且執行了一個創建數據庫的腳本createDB.sql,讓它自動創建了一個關於日誌的數據庫Syslog;在該數據庫上授權B和C機器的訪問,啓動mysqld服務(tcp3306端口)

2、在B機器上,用yum安裝了rsyslog和rsyslog-mysql兩個包,在安裝rsyslog-mysql包時創建了一個creaeDB.sql的數據庫文件,將它拷貝到有數據庫的A機器上,運行自動創建Syslog數據庫,並且修改/etc/rsyslog.conf配置文件,加上支持rsyslog-mysql的模塊和遠程存放日誌的定義,啓動rsyslog服務();

3、在C機器上,yum安裝了httpd服務,編譯安裝了php的獨立服務,修改配置文件,在httpd的配置文件中加入支持php的定義,下載安裝了loganalyzer程序,將裏面的php頁面腳本放到主站點/var/www/html/下的子目錄log下(log是自己創建的一個目錄),啓動httpd服務(tcp80端口);

三:實驗測試;                                                                       

先看一下Apache服務所在的C機器上的防火牆、selinux是否都關閉

[root@c /var/www/html/log]# iptables -F                  #直接將防火牆關閉
[root@c /var/www/html]# getenforce                      #使selinux狀態是Permissve
Permissive
然後打開瀏覽器,因爲loganalyzer是一個完整的程序,所以用瀏覽器打開直接跟着嚮導做就好了;



跟着一步一步走,總共八步;在第七步時修改一些選項;最後第八步時“finish”



四:實驗結果;                                                                   

我用的php獨立服務方式做的,我們班裏好幾個同學的結果都是,訪問頁面只是空白,測試了好幾次,成功了那麼一兩下次,結果證明,獨立方式下的不穩定,所以建議在做的時候儘量用模塊方式,











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