一:實驗環境;
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獨立服務方式做的,我們班裏好幾個同學的結果都是,訪問頁面只是空白,測試了好幾次,成功了那麼一兩下次,結果證明,獨立方式下的不穩定,所以建議在做的時候儘量用模塊方式,