日誌記錄的是,我們操作系統或某個服務或某個軟件在運行過程當中所產生事件信息的,這對於我們後續分析系統比較有價值。
比如,某個服務在運行過程中出現故障了,就可以查看該服務的日誌信息,分析日誌找出服務出現故障的原因所在。
如:我們使用【yum】工具安裝軟件,系統都會把程序yum做的操作記錄到日誌裏。
如果,我們管理的不是一臺主機,每臺主機的日誌信息都是單獨存放的,如果要分析報告當前所有主機的的所有服務的過去某一時間段運行狀態,我們則要逐一查看每一臺主機的日誌文件了。這很不方便。不利於使用一些日誌分析工具來分析日誌。所以我們要做日誌的集中化存儲。意思是說:把所有主機產生日誌信息發往日誌服務器,由日誌服務器幫助衆多需要存儲日誌數據的主機存儲日誌數據。
存儲日誌數據有兩種方式:
1、使用文件存儲日誌數據 2、把日誌信息存儲到數據庫裏
分析:
如果,我們多臺主機同時有很多日誌信息,都要日誌服務器存儲的話,使用文件存儲日誌數據的方式就無能爲力了。因爲:文件鎖是文件級別的,不能解決“併發”的問題,效率是很底的。而數據庫的鎖是行級別的,可以實現“併發操作”。還有數據庫提供:二進制日誌、事務日誌實現了故障恢復。還有把日誌存儲到數據庫裏,很方便使用一些日誌分析工具來分析日誌數據,如:loganalyzer。
數據庫能實現併發和故障恢復,使用數據庫來存儲日誌數據無疑是最好的選擇。CentOS 5 以上的版本提供的記錄日誌數據的服務:rsyslog
它是多線程的,提供存儲日誌的方式有多種:
1、可以使用本地文件的方式存在日誌。 如:mail.* -/var/log/maillog 2、把日誌數據發往另一臺主機由它代爲儲存日誌 如:mail.* @192.168.60.40 3、使用數據庫的方式記錄日誌信息。 如:mail.* :ommysql:192.168.60.40,Syslog,syslog,syslog
這裏,我們選擇使用MySQL關係型數據庫集中化存儲多臺主機的日誌數據信息。那麼Rsyslog日誌記錄服務程序是如何與數據庫交互把數據存在到數據庫中的呢?如下圖的示:
一、安裝MySQL數據庫
選擇使用編譯好的二進制格式的MySQL程序包
mysql-5.5.22-linux2.6-i686.tar.gz
1、創建MySQL的數據存放位置
爲了備份日誌方便把數據放在LVM卷中。還可以利用LVM的擴容功能,當我們的空間不夠使用時。
查看,已經存在的卷組是否還有剩餘空間,來創建LV。
[root@mysql local]# vgdisplay | grep -i"PE[[:space:]]*/[[:space:]]*Size" Alloc PE / Size 6656 / 52.00GiB Free PE / Size 1023 / 7.99 GiB
說明:還有7.99GB,空間可以創建LV。
注意:
如果存在的文件很大的話,見議我們在創建邏輯卷時最好把PE的大小設置大點。
創建LV
root@mysql local]# lvcreate -L 4G -n loglv vg0 Logical volume "loglv" created [root@mysql local]# lvscan | grep "loglv" ACTIVE '/dev/vg0/loglv'[4.00 GiB] inherit
格式化邏輯卷loglv
[root@mysql local]# mke2fs -t ext4 -L LOGDATA /dev/vg0/loglv [root@mysql local]# echo $? 0
掛載邏輯卷
設置開機自動掛載.編輯/etc/fstab文件增加下面一行。
/dev/mapper/vg0-loglv /logdata ext4 defaults 0 0
自動掛載測試
root@mysql local]# mount -a [root@mysql local]# mount | grep"loglv" /dev/mapper/vg0-loglv on /logdata type ext4(rw)
2、準備好安裝MySQL數據庫的必需條件
(1)、創建用戶mysql,用來被始化數據庫使用的。
說明:最好mysql是系統用戶,這樣就算mysql用戶被人劫持,也無法登陸系統的。
[root@mysql local]# useradd -r mysql [root@mysql local]# id mysql uid=399(mysql) gid=399(mysql)groups=399(mysql)
(2)、設置MySQL數據庫的數據存放位置:在/logdata中創建data,且屬主屬組爲mysql
[root@mysql logdata]# mkdir data [root@mysql logdata]# chown mysql:mysql./data/ [root@mysql logdata]# ll -d data drwxr-xr-x 2 mysql mysql 4096 Aug 20 15:40data
3、安裝MySQL數據庫
(1)、把程序包解壓到”/uer/local”目錄,爲了後續維護方便並創建一個軟鏈接。
[root@mysql user]# tar -xfmysql-5.5.22-linux2.6-i686.tar.gz -C/usr/local/ [root@mysql user]# cd /usr/local/ [root@mysql local]# ln -svmysql-5.5.22-linux2.6-i686 mysql `mysql' -> `mysql-5.5.22-linux2.6-i686' [root@mysql local]# ll | grep mysql lrwxrwxrwx 1 root root 26 Aug 20 15:03mysql -> mysql-5.5.22-linux2.6-i686
(2)、我們要以:mysql用戶的身份來初始化數據庫,要有權限操作一些文件所以要修改解壓後Mysql程序的屬主屬組爲mysql
[root@mysql mysql]# chown -R mysql:mysql./*
說明:安裝完數據後,把屬主改爲:root
(3)、初始化數據庫
[root@node1 mysql]#./scripts/mysql_install_db --datadir=/logdata/data --user=mysql Installing MySQL system tables... OK Filling help tables... OK
說明:
--datadir 指定數據庫的數據目錄的位置(不使用默認的位置) --user 指定初始化數據庫的用戶名(使用二進制格式MySQL程序包一定要使用mysql)
(4)、根據物理機的硬件情況與實際需要選擇MySQL的配置文件
[root@node1 mysql]# ll support-files/*.cnf -rw-r--r-- 1 mysql mysql 4691 Mar 3 2012 support-files/my-huge.cnf -rw-r--r-- 1 mysql mysql 19759 Mar 3 2012 support-files/my-innodb-heavy-4G.cnf -rw-r--r-- 1 mysql mysql 4665 Mar 3 2012 support-files/my-large.cnf -rw-r--r-- 1 mysql mysql 4676 Mar 3 2012 support-files/my-medium.cnf -rw-r--r-- 1 mysql mysql 2840 Mar 3 2012 support-files/my-small.cnf
說明:
不同的配置文件,要求的內存都不一樣。
複製配置文件到/etc/mysql 目錄下,並命名爲:my.cnf
[root@node1 mysql]# cp support-files/my-large.cnf /etc/mysql/my.cnf
4、啓動MySQL數據庫服務器之前要做的一些設置
(1)、修改MySQL的配置文件
[root@node1 mysql]# vim /etc/mysql/my.cnf thread_concurrency = 4 設置線程數 datadir = /logdata/data 告訴MySQL服務器數據目錄的位置
說明:
由於這些配置是作用於MySQL服務器的。要把它寫在:[mysqld]段中。
(2)、複製啓動MySQL數據庫服務器的啓動腳本,並命名爲:mysqld
[root@node1 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
檢查是否執行權限
[root@node1 mysql]# ll /etc/init.d/mysqld -rwxr-xr-x 1 root root 10650 Aug 20 15:55 /etc/init.d/mysqld
(3)、把mysqld服務啓動腳本添加到chkconf的控制列表裏,能夠使用【server】命令控制服務的行爲。 可以實現開機自動啓動。
[root@node1 mysql]# chkconfig --add mysqld [root@node1 mysql]# chkconfig --list mysqld mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
5、啓動MySQL數據庫並修改設置用戶
啓動MySQL數據庫服務器
[root@node1 mysql]# service mysqld start Starting MySQL.. [ OK ]
查看監聽端口
[root@node1 mysql]# netstat -anptl | grep mysqld tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3041/mysqld
注意:
安裝MySQL數據庫服務器默認添加了很多用戶,這些用戶都沒有密碼且權限是數據庫的管理權限,極其不安全。且沒有遠程登陸數據庫的用戶,不方便數據庫的管理維護。所以給MySQL數據庫服務器設置密碼,清理不需要的用戶。增加可以遠程登陸數據庫的用戶,且權限是管理員。
(1)、安裝數據庫時默認創建的用戶如下:
mysql> select user,host,password from mysql.user; +------+------------------+----------+--------------+ | user | host | password | +------+------------------+----------+--------------+ | root | localhost | | | root | node1.9527du.com | | | root | 127.0.0.1 | | | root | ::1 | | | | localhost | | | | node1.9527du.com | | +------+------------------+----------+---------------+ 6 rows in set (0.01 sec)
(2)、刪除用戶
mysql> drop user 'root'@'node1.9527du.com'; mysql> drop user 'root'@'::1'; mysql> drop user ''@'localhost'; mysql> drop user ''@'node1.9527du.com';
(3)、添加管理MySQL數據庫的用戶,並給保留的用戶設置密碼。
mysql> set password for 'root'@'localhost' = password('root'); mysql> set password for 'root'@'127.0.0.1' = password('root');
(4)、添加管理MySQL數據庫的用戶
mysql> grant all on *.* to 'admin'@'%.%.%.%' identified by 'admin'; mysql> flush privileges;
(5)、修改後的用戶列表
mysql> select user,host,password from mysql.user; +-------+-----------+-------------------------------------------+---------------------- | user | host | password | +-------+-----------+-------------------------------------------+---------------------- | root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | admin | %.%.%.% | *4ACFE3202A5FF5CF467898FC58AAB1D615029441 | +-------+-----------+-------------------------------------------+---------------------- 3 rows in set (0.00 sec)
二、在192.168.60.99主機,設置rsyslog與MySQL數據庫交互(把日誌數據記錄到數據庫裏):
1、安裝rsyslog與MySQL數據庫交互的驅動
[root@stu13 ~]# yum install rsyslog-mysql
查看安裝了那些
[root@stu13 ~]# rpm -ql rsyslog-mysql /lib/rsyslog/ommysql.so rsyslog 連接MySQL數據庫服務器的驅動 /usr/share/doc/rsyslog-mysql-5.8.10 /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql 創建表的SQL腳本
2、生成記錄日誌的數據庫
說明:
由於數據庫服務器,在另外一臺主機,所以,要創建能夠遠程連接數據庫的用戶如果,數據庫沒有設置遠程連接的用戶要先創建。
[root@stu13 ~]# mysql -uadmin -h192.168.60.40 -p < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql Enter password: ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.60.40' (110)
說明:連接數據庫服務器失敗。
查看,原來是防火牆阻止了連接MySQL數據庫服務器
[root@stu13 ~]# iptables -L -n Chain INPUT (policy DROP) target prot opt source destination ACCEPT tcp -- 0.0.0.0/0 192.168.60.99 state ESTABLISHED http_in tcp -- 0.0.0.0/0 192.168.60.99 tcp dpt:80 https_in tcp -- 0.0.0.0/0 192.168.60.99 tcp dpt:443 ssh_in tcp -- 0.0.0.0/0 192.168.60.99 tcp dpt:22 vsftp_in tcp -- 0.0.0.0/0 192.168.60.99 tcp dpt:21 ACCEPT all -- 0.0.0.0/0 192.168.60.99 state RELATED ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ......
使用默認策略允許連接數據庫服務器
[root@stu13 ~]# iptables -P INPUT ACCEPT [root@stu13 ~]# iptables -P OUTPUT ACCEPT
再次導入sql腳本生成數據庫和表
[root@stu13 ~]# mysql -uadmin -h192.168.60.40 -p < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql Enter password:
3、查看是否創建成功
mysql> show tables from Syslog; +------------------------+--------- | Tables_in_Syslog | +------------------------+--------- | SystemEvents | | SystemEventsProperties | +------------------------+--------- 2 rows in set (0.00 sec)
SQL腳本(/usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql)創建的表
[root@stu13 ~]# grep -i "CREATE[[:space:]]*TABLE" /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql CREATE TABLE SystemEvents CREATE TABLE SystemEventsProperties
說明:
通過中show tables from Syslog查看與sql腳本中定義的表相同證明執行SQL腳本已經成功。
4、基於安全考慮:添加一個管理Syslog數據庫的用戶。且該用戶沒有操作其它數據庫的任何權限。在192.168.60.0/24內使用
(1)、創建並授權
mysql> grant all on Syslog.* to 'syslog'@'192.168.60.%' identified by 'syslog'; Query OK, 0 rows affected (0.01 sec)
(2)、刷新授權表
mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
(3)、測試是否可以遠程登陸數據庫服務器
[root@stu13 ~]# mysql -usyslog -h192.168.60.40 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. ...... mysql>
5、設置rsyslog的配置文件讓它加載ommmysql.so 模塊
在rsyslog日誌系統的配置文件中,使用【$ModLoad】指令裝載連接MySQL的驅動:ommysql.so
指定把日誌數據送往的數據庫服務器(日誌服務器)
[root@stu13 ~]# vim /etc/rsyslog.conf $ModLoad ommysql 加載模塊 .info;mail.none;authpriv.none;cron.none :ommysql:192.168.60.40,Syslog,syslog,syslog 設置連接數據庫需要的一些信息,及使用存儲日誌 數據的數據庫爲:Syslog
重啓rsyslog
[root@stu13 ~]# service rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ]
三、測試:rsyslog + ommmysql + MySQL 集中存儲日誌是否正常工作
1、在192.168.60.99主機使用yum程序安裝軟件
[root@stu13 ~]# yum install tree [root@stu13 ~]# date Wed Aug 20 22:50:43 CST 2014
2、通過遠程連接數據庫查看日誌服務器是否記錄了yum命令安裝tree程序的日誌
mysql> select DeviceReportedTime,FromHost,Message from Syslog.SystemEvents; +---------------------+----------+----------------------------------------------------- | DeviceReportedTime | FromHost | Message | +---------------------+----------+----------------------------------------------------- | 2014-08-20 22:49:56 | stu13 | [origin software="rsyslogd" swVersion="5.8.10" x-pid="2995" x-info="http://www.rsyslog.com"] start | | 2014-08-20 22:50:39 | stu13 | Installed: tree-1.5.3-2.el6.i686 | +---------------------+----------+---------------------------------------------------------------------------------------------------------------------+ 20 rows in set (0.00 sec)
說明:
從select檢索的數據中可以看出,日誌服務器已經正常工作。
四、在192.168.60.40主機部署loganalyzer -3.6.5.tar.gz日誌分析系統
說明:
其實loganalyzer是php網頁文件,它從日誌服務器中檢索數據並以很直觀的方式,動態顯示出來。所以,日誌分析系統工作要依賴於LAMP平臺。在部署loganalyzer之前要安裝好LAMP平臺。
1、編譯安裝LAMP平臺
說明:數據庫使用,日誌服務器的數據庫。
(1)、準備編譯httpd、php程序的環境
[root@node1 admin]# gcc --version gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3) Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
支持https 協議
[root@node1 admin]# rpm -qa | grep "openssl-devel" openssl-devel-1.0.0-27.el6.i686
http 數據傳輸支持的壓縮工具
[root@node1 admin]# rpm -qa | grep "zlib-devel" zlib-devel-1.2.3-29.el6.i686
地址重寫依賴的API
[root@node1 admin]# rpm -qa | grep "pcre-devel" pcre-devel-7.8-6.el6.i686
httpd 2.4要求arp的版本要1.4以上,而系統上的版本不適用,要更新。
[root@node1 admin]# tar -xf apr-1.4.6.tar.bz2 [root@node1 admin]# cd apr-1.4.6 [root@node1 apr-1.4.6]# ./configure --prefix=/usr/local/apr-1.4.6 [root@node1 apr-1.4.6]# make && make install
[root@node1 admin]# tar -xf apr-util-1.4.1.tar.bz2 [root@node1 admin]# cd apr-util-1.4.1 [root@node1 apr-util-1.4.1]# ./configure --prefix=/usr/local/apr-util-1.4 --with-apr=/usr/local/apr-1.4.6 [root@node1 apr-util-1.4.1]# make && make install
更新加密算庫.
[root@node1 admin]# tar -xf libmcrypt-2.5.8.tar.bz2 [root@node1 admin]# cd libmcrypt-2.5.8 [root@node1 libmcrypt-2.5.8]# ./configure --prefix=/usr/local/libmcrypt [root@node1 libmcrypt-2.5.8]# make && make install
(2)、編譯httpd服務器
[root@node1 admin]# tar -xf httpd-2.4.1.tar.bz2 [root@node1 httpd-2.4.1]# ./configure \ --prefix=/usr/local/httpd-2.4 \ --sysconfdir=/etc/httpd-2.4 \ 配置文件存放的位置 --enable-so \ 支持動態裝卸載模塊 --enable-mods-shared=all \ 把所有共享模塊都編譯進來 --enable-ssl \ 支持使用https --enable-mpms-shared=all \ 支持mpm共享,把prefork、worker、event都編譯進來 --enable-cgi \ 支持cgi --enable-rewrite \ 支持地址重寫功能 --with-apr=/usr/local/apr-1.4.6 \ 指定apr的位置 --with-apr-util=/usr/local/apr-util-1.4 \ 指定apr-util的位置 --with-pcre \ --with-mpm=event \ 默認使用的mpm是event --with-z
[root@node1 httpd-2.4.1]# make && make install
2、編譯安裝:PHP
root@node1 admin]# tar -xf php-5.4.26.tar.bz2 [root@node1 admin]# cd php-5.4.26
配置如下:
[root@node1 php-5.4.26]# ./configure \ --prefix=/usr/local/php-5.4 \ --with-apxs2=/usr/local/httpd-2.4/bin/apxs \ --enable-mod-charset \ --enable-mbstring \ --with-config-file-path=/etc \ --with-config-file-scan-dir=/etc/php.d \ --with-libxml-dir \ --with-openssl \ --with-zlib \ --with-bz2 \ --with-pcre-dir \ --with-jpeg-dir \ --with-png-dir \ --with-freetype-dir \ --with-gd \ 支持gd庫。 --enable-mbstring \ --with-mcrypt=/usr/local/libmcrypt \ 啓用新的加密庫 --with-mysql=/usr/local/mysql \ 連接的數據庫需要的驅動 --with-mysqli=/usr/local/mysql/bin/mysql_config
報錯error:
checking for floorf... yes checking for png_read_header in -ljpng... yes If configure fails try --with-vpx-dir=<DIR> configure: error: png.h not found.
說明:
沒有安裝png的開發庫
查找yum源中是否有png提供的開發庫
[root@node1 php-5.4.26]# yum list | grep -i png jlibpng.i686 2:1.2.49-1.el6_2 @anaconda-RedHatEnterpriseLinux-201301301449.i386/6.4 dvipng.i686 1.11-3.2.el6 basic libpng-devel.i686 2:1.2.49-1.el6_2 basic
安裝開發庫(png的API)
[root@node1 php-5.4.26]# yum instll libpng-devel
再次執行
[root@node1 php-5.4.26]# ./configure \ 。。。。。。
[root@node1 php-5.4.26]#make && make install
說明:已經編譯好php
提供php的配置文件
[root@node1 php-5.4.26]# cp php.ini-production /etc/php.ini
2、測試:LAMP平臺是否正常工作;
(1)、在httpd的配置文件中配置httpd使用php解析.php格式的網頁
查看php模塊是否安裝到httpd中
[root@node1 php-5.4.26]# grep "LoadModule[[:space:]]*php" /etc/httpd-2.4/httpd.conf LoadModule php5_module modules/libphp5.so
設置主頁
<IfModule dir_module> DirectoryIndex index.html index.php </IfModule>
設置支持.php格式的網頁文檔
AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
(2)、測試是否能夠連接MySQL數據庫
[root@node1 httpd-2.4]#vim index.php 說明:index.php中的代碼如下: <?php $link = mysql_connect('192.168.60.40','admin','admin'); if ($link) echo "Success..."; else echo "Failure..."; ?>
沒啓動數據庫服務器之前:
[root@node1 httpd-2.4]# curl http://192.168.60.40/index.php Failure...
說明:連接數據庫服務器失敗
啓動數據庫服務器,並測試
[root@node1 httpd-2.4]# service mysqld start Starting MySQL... [ OK ] [root@node1 httpd-2.4]# curl http://192.168.60.40/index.php Success...
說明:
已經連接到數據庫服務器。證明:LAMP平臺以經搭建成功。
3、部署loganalyzer -3.6.5.tar.gz日誌分析系統
[root@node1 admin]# tar -xf loganalyzer-3.6.5.tar.gz
複製src目錄下所以文件到httpd服務器的網頁文件存放的目錄下
[root@node1 loganalyzer-3.6.5]# cp -r ./src /usr/local/httpd-2.4/htdocs/log
複製初始化使用的兩個腳本並修改權限
[root@node1 loganalyzer-3.6.5]# cp contrib/* /usr/local/httpd-2.4/htdocs/log/ [root@node1 loganalyzer-3.6.5]# cd /usr/local/httpd-2.4/htdocs/log/ [root@node1 log]# chmod u+x configure.sh secure.sh
執行腳本做初始化
[root@node1 log]# ./configure.sh [root@node1 log]# ./secure.sh
修改配置文件的權限
[root@node1 log]# chmod 666 config.php
根據httpd服務器【User】和【Group】指令定義的用戶名,也就是服務用戶請求的進程(線程)的屬主。修改loganalyzer提供的網頁程序的屬主屬組。目錄可以訪問頁面。
[root@node1 log]# chown -R daemon:daemon ./*
五、通過web接口配置日誌分析系統loganalyzer
在瀏覽器輸入:http://192.168.60.44/log
會打開下述窗口進行安裝操作。
下一步:
點擊“Finish!”會跳轉到下述頁面:
從上面可以看到:已經記錄到兩臺主機(node1、stu13)的的日誌數據信息了。