RHEL 6.x 搭建rsyslog日誌服務器和loganalyzer日誌分析工具php
===============================================html
rsyslog的介紹mysql
logrotate日誌滾動的介紹web
rsyslog的存儲途徑sql
基於web的loganalyzer日誌分析工具的搭建shell
======================================================數據庫
1、rsyslog的介紹apache
Linux的日誌記錄了用戶在系統上一切操做,看日誌去分析系統的狀態是運維人員必須掌握的基本功。vim
rsyslog日誌服務器的優點:安全
一、日誌統一,集中式管理
二、日誌實時傳送到一個更加安全的遠端服務器上,真正記錄用戶行爲,使日誌的2次更改可能性大大下降,從而可以對日誌進行真實回放,便於問題追蹤。
rsyslog的新功能:
rsyslog是一個增強版的syslog,具備各類各樣的新功能,典型的有:
一、直接將日誌寫入到數據庫。
二、日誌隊列(內存隊列和磁盤隊列)。
三、靈活的模板機制,能夠獲得多種輸出格式。
四、插件式結構,多種多樣的輸入、輸出模塊。
五、能夠把日誌存放在Mysql ,PostgreSQL,Oracle等數據庫中
rsyslog的軟件包
[root@jie1 ~]# rpm -qa | grep rsyslog rsyslog-5.8.10-6.el6.x86_64 #軟件包系統默認已經安裝 [root@jie1 ~]# rpm -ql rsyslog #只顯示了部分信息 /etc/logrotate.d/syslog /etc/rsyslog.conf #rsyslog的配置文件 /etc/sysconfig/rsyslog /lib64/rsyslog/imfile.so /lib64/rsyslog/imklog.so #rsyslog的模塊,i開頭的是輸入模塊 /lib64/rsyslog/immark.so /lib64/rsyslog/impstats.so /lib64/rsyslog/imptcp.so /lib64/rsyslog/imtcp.so /lib64/rsyslog/imudp.so /lib64/rsyslog/imuxsock.so /lib64/rsyslog/lmnet.so /lib64/rsyslog/lmnetstrms.so /lib64/rsyslog/lmnsd_ptcp.so /lib64/rsyslog/lmregexp.so /lib64/rsyslog/lmstrmsrv.so /lib64/rsyslog/lmtcpclt.so /lib64/rsyslog/lmtcpsrv.so /lib64/rsyslog/lmzlibw.so /lib64/rsyslog/ommail.so #o開頭的模塊是輸出模塊 /lib64/rsyslog/omprog.so /lib64/rsyslog/omruleset.so /lib64/rsyslog/omtesting.so /lib64/rsyslog/omuxsock.so /lib64/rsyslog/pmlastmsg.so
rsyslog配置文件(/etc/rsyslog
.conf)
的詳解
#### MODULES 日誌的模塊#### $ModLoad imuxsock #imuxsock是模塊名,支持本地系統日誌的模塊 $ModLoad imklog #imklog是模塊名, 支持內核日誌的模塊 #$ModLoad immark #immark是模塊名,支持日誌標記 #$ModLoad imudp #imupd是模塊名,支持udp協議 #$UDPServerRun 514 #容許514端口接收使用UDP和TCP協議轉發過來的日誌 #$ModLoad imtcp #imtcp是模塊名,支持tcp協議 #$InputTCPServerRun 514
#### GLOBAL DIRECTIVES ####定義全局日誌格式的指令 $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat #定義日誌格式默認模板 $IncludeConfig /etc/rsyslog.d/*.conf #載入rsyslog.d文件中全部以conf結尾的文件 #### RULES #### *.info;mail.none;authpriv.none;cron.none /var/log/messages #####記錄全部日誌類型的info級別以及大於info級別的信息到/var/log/messages,可是mail郵件信息,authpriv驗證方面的信息和cron時間#任務相關的信息除外 authpriv.* /var/log/secure #####authpriv驗證相關的全部信息存放在/var/log/secure mail.* -/var/log/maillog #####郵件的全部信息存放在/var/log/maillog; 這裏有一個-符號, 表示是使用異步的方式記錄, 由於日誌通常會比較大 cron.* /var/log/cron ####計劃任務有關的信息存放在/var/log/cron *.emerg * (*表示全部用戶) ###記錄全部的大於等於emerg級別信息, 以wall方式發送給每一個登陸到系統的人 uucp,news.crit /var/log/spooler ####記錄uucp,news.crit等存放在/var/log/spooler local7.* /var/log/boot.log ####本地服務器的啓動的全部日誌存放在/var/log/boot.log中
###rsyslog.conf中日誌規則的定義的格式 facitlity.priority Target #facility: 日誌設備(能夠理解爲日誌類型): ============================================================== auth #pam產生的日誌,認證日誌 authpriv #ssh,ftp等登陸信息的驗證信息,認證受權認證 cron #時間任務相關 kern #內核 lpr #打印 mail #郵件 mark(syslog) #rsyslog服務內部的信息,時間標識 news #新聞組 user #用戶程序產生的相關信息 uucp #unix to unix copy, unix主機之間相關的通信 local 1~7 #自定義的日誌設備 =============================================================== #priority: 級別日誌級別: ===================================================================== debug #有調式信息的,日誌信息最多 info #通常信息的日誌,最經常使用 notice #最具備重要性的普通條件的信息 warning, warn #警告級別 err, error #錯誤級別,阻止某個功能或者模塊不能正常工做的信息 crit #嚴重級別,阻止整個系統或者整個軟件不能正常工做的信息 alert #須要馬上修改的信息 emerg, panic #內核崩潰等嚴重信息 ###從上到下,級別從低到高,記錄的信息愈來愈少,若是設置的日誌內性爲err,則日誌不會記錄比err級別低的日誌,只會記錄比err更高級別的日誌,也包括err自己的日誌。 ===================================================================== Target: #文件, 如/var/log/messages #用戶, root,*(表示全部用戶) #日誌服務器,@172.16.22.1 #管道 | COMMAND
2、logrotate日誌滾動的介紹
全部的日誌文件都會隨着時間的推移和訪問次數的增長而迅速增加,所以必須對日誌文件進行按期清理以避免形成磁盤空間的沒必要要的浪費,同時也加快了管理員查看日誌所用的時間。於是logrotate就很是有存在的必要了,Redhat系統中已經默然安裝logrotate且利用logrotate設置了相關對rsyslog日誌迅速增加的設置。
logrotate的執行由crond服務實現。在/etc/cron.daily目錄中,有個文logrotate,它其實是個shell script,用來啓動logrotate。
logrotate程序天天由cron在指定的時間(/etc/crontab)啓動。
logrotate的軟件包
[root@jie1 ~]# rpm -qa | grep logrotate logrotate-3.7.8-16.el6.x86_64 #日誌回滾的軟件包默認已經安裝 [root@jie1 ~]# rpm -ql logrotate /etc/cron.daily/logrotate /etc/logrotate.conf #日誌回滾的配置文件 /etc/logrotate.d #日誌回滾的子目錄 /usr/sbin/logrotate /usr/share/doc/logrotate-3.7.8 /usr/share/doc/logrotate-3.7.8/CHANGES /usr/share/doc/logrotate-3.7.8/COPYING /usr/share/man/man5/logrotate.conf.5.gz /usr/share/man/man8/logrotate.8.gz /var/lib/logrotate.status
logrotate的配置文件(/etc/logrotate.conf)詳解
[root@jie1 ~]# sed -e '/^#/d' -e '/^$/d' /etc/logrotate.conf weekly #每週清理一第二天志文件 rotate 4 #保存四個輪換日誌 create #清除舊日誌的同時,建立新的空日誌文件 dateext #使用日期爲後綴的回滾文件 #能夠去/var/log目錄下看看 include /etc/logrotate.d #包含/etc/logrotate.d目錄下的全部配置文件 /var/log/wtmp { #對/var/log/wtmp這個日誌文件按照下面的設定日誌回滾 monthly #每個月輪轉一次 create 0664 root utmp #設置wtmp這個日誌文件的權限,屬主,屬組 minsize 1M #日誌文件必須大於1M纔會去輪換(回滾) rotate 1 #保存一個輪換日誌 } /var/log/btmp { missingok #若是文件丟失不報錯 monthly create 0600 root utmp rotate 1 } [root@jie1 ~]# cat /etc/logrotate.d/syslog /var/log/cron #這些文件是rsyslog.conf文件中全局配置定義中指定的Target的路徑 /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler { sharedscripts postrotate # 輪換以後重啓rsyslog服務 /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }
3、rsyslog的存儲途徑
a)日誌存儲在指定的文件中
[root@jie1 ~]# vim /etc/rsyslog.conf ############vim /etc/rsyslog.conf################################ #====註釋掉兩行,而後添加一行 #*.info;mail.none;authpriv.none;cron.none /var/log/messages *.* /systemlog/jie.log #authpriv.* /var/log/secure ################################################################# #*.info;mail.none;authpriv.none;cron.none /var/log/messages ===#這行表示,全部facitlity(設施)的info消息記錄,及info級別以上的記錄都會保存到 /var/log/messages文件中,除了郵件的全部信息,認證受權的全部信息,計劃任務的全部信息。 #authpriv.* /var/log/secure ===#這行表示認證受權的全部信息,都會保存在/var/log/secure文件中 *.* /systemlog/jie.log ===#添加的這行表示全部設施的全部信息都會保存在 /systemlog/jie.log文件中,並且此文件沒必要本身建立,啓動rsyslog服務時系統會自動建立,並且權限都是600
b)日誌存儲在指定的rsyslog服務器中
rsyslog客戶端的配置:
[root@jie3 ~]# vim /etc/rsyslog.conf #############/etc/rsyslog.conf########################################### #*.info;mail.none;authpriv.none;cron.none /var/log/messages *.* @172.16.22.1 #添加此行,註釋掉其餘兩行 #authpriv.* /var/log/secure ######################################################################## [root@jie3 ~]# service rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ]
rsyslog服務器的配置:
[root@jie1 ~]# grep -v "^#" /etc/rsyslog.conf | grep -v "^$" ######修改配置文件只需開啓兩個模塊和協議支持的端口 $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imklog # provides kernel logging support (previously done by rklogd) $ModLoad imudp #開啓支持upd的模塊 $UDPServerRun 514 #容許接收udp 514的端口傳來的日誌 ModLoad imtcp #開啓支持tcp的模塊 $InputTCPServerRun 514 #容許接收tcp 514的端口傳來的日誌 $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat $IncludeConfig /etc/rsyslog.d/*.conf *.info;mail.none;authpriv.none;cron.none /var/log/messages authpriv.* /var/log/secure mail.* -/var/log/maillog cron.* /var/log/cron *.emerg * uucp,news.crit /var/log/spooler local7.* /var/log/boot.log $template SpiceTmpl,"%TIMESTAMP%.%TIMESTAMP:::date-subseconds% %syslogtag% %syslogseverity-text%:%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" :programname, startswith, "spice-vdagent" /var/log/spice-vdagent.log;SpiceTmpl ################################# [root@jie1 ~]# service rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ] [root@jie1 ~]#
c)日誌存儲在指定的數據庫服務器中
思路:
一、安裝mysql服務器,且要安裝rsyslog鏈接mysql的驅動
二、解決生成rsyslog服務器的日誌特定的格式,
三、在rsyslog配置文件中加載鏈接mysql的模塊,把日誌存儲到mysql中
rsyslog+Mysql服務器端的配置:
[root@jie1 log]# yum -y install mysql-server rsyslog-mysql mysql #安裝mysql服務器和rsyslog鏈接mysql的驅動 [root@jie1 ~]# rpm -ql rsyslog-mysql #查看rsyslog-mysql安裝生成了那些文件 /lib64/rsyslog/ommysql.so /usr/share/doc/rsyslog-mysql-5.8.10 /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql [root@jie1 ~]# service mysqld start Starting mysqld: [ OK ] [root@jie1 ~]# mysqladmin -u root password redhat #設置mysql的密碼 [root@jie1 ~]# mysql -u root -p Enter password: #登陸mysql服務器 mysql> show databases; #顯示數據庫服務器中沒有日誌的數據庫 +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | +--------------------+ 3 rows in set (0.00 sec) mysql> \q Bye [root@jie1 ~]# cd /usr/share/doc/rsyslog-mysql-5.8.10/ #日誌文件sql腳本的路徑 [root@jie1 rsyslog-mysql-5.8.10]# ls createDB.sql [root@jie1 rsyslog-mysql-5.8.10]# mysql -u root -p < createDB.sql Enter password: #導入日誌文件的sql腳本,生成日誌文件的數據庫 [root@jie1 rsyslog-mysql-5.8.10]# mysql -u root -p Enter password: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | Syslog | | mysql | | test | +--------------------+ 4 rows in set (0.01 sec) mysql> use Syslog; #Syslog便是記錄日誌文件的數據庫 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +------------------------+ | Tables_in_Syslog | +------------------------+ | SystemEvents | | SystemEventsProperties | +------------------------+ 2 rows in set (0.00 sec) mysql> grant all on Syslog.* to 'syslogroot'@'127.0.0.1' identified by 'syslogpass'; #設置用戶訪問數據庫服務器中Syslog數據庫的用戶名和密碼 Query OK, 0 rows affected (0.00 sec) mysql> grant all on Syslog.* to 'syslogroot'@'172.16.22.1' identified by 'syslogpass'; Query OK, 0 rows affected (0.04 sec) mysql> flush privileges; #重讀受權表,及時生效 Query OK, 0 rows affected (0.00 sec) mysql> \q Bye [root@jie1 rsyslog-mysql-5.8.10]#cd / [root@jie1 /]# grep -v "^$" /etc/rsyslog.conf | grep -v "^#" #####vim /etc/ryslog.conf##################################### $ModLoad imuxsock $ModLoad imklog $ModLoad imudp #加載udp的模塊 $UDPServerRun 514 #容許接收udp 514的端口傳來的日誌 $ModLoad imtcp #加載tcp的模塊 $InputTCPServerRun 514 #容許接收tcp 514的端口傳來的日誌 $ModLoad ommysql #加載mysql的模塊 $ActionFileDefaultTemplateRSYSLOG_TraditionalFileFormat $IncludeConfig /etc/rsyslog.d/*.conf *.* :ommysql:172.16.22.1,Syslog,syslogroot,syslogpass #添加這行,把其餘行都註釋掉,這行表示把全部的設施的全部日誌都記錄到數據庫服務器中的Syslog數據庫中,以syslogroot用戶,syslogpass密碼訪問數據庫 local7.* /var/log/boot.log $template SpiceTmpl,"%TIMESTAMP%.%TIMESTAMP:::date-subseconds% %syslogtag% %syslogseverity-text%:%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" :programname, startswith, "spice-vdagent" /var/log/spice-vdagent.log;SpiceTmpl ###################################################################### [root@jie1 /]# service rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ]
rsyslog客戶端的配置:
[root@jie3 ~]# sed -e '/^$/d' -e '/^#/d' /etc/rsyslog.conf ################ /etc/rsyslog.conf###################### $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imklog # provides kernel logging support (previously done by rklogd) $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat $IncludeConfig /etc/rsyslog.d/*.conf *.* @172.16.22.1 #添加這行用於和服務器通訊 *.* :ommysql:172.16.22.1,Syslog,syslogroot,syslogpass #添加這行,把其餘行都註釋掉,這行表示把全部的設施的全部日誌都記錄到數據庫服務器中的Syslog數據庫中,以syslogroot用戶,syslogpass密碼訪問數據庫 $template SpiceTmpl,"%TIMESTAMP%.%TIMESTAMP:::date-subseconds% %syslogtag% %syslogseverity-text%:%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" :programname, startswith, "spice-vdagent" /var/log/spice-vdagent.log;SpiceTmpl #################################################################### [root@jie3 ~]# service rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ]
驗證客戶端的日誌文件存放位置:
1)驗證是否存放在客戶端本地
2)驗證是否存在服務器的/var/log/messages裏面
3)驗證是否存放在服務器的mysql數據庫中
雖然日誌存放在mysql數據庫服務器中,是解決了日誌集中管理,可是存放在mysql服務器中讓管理人員頭疼的是不便於查看這些大量的日誌,因而乎搭建一個日誌分析工具就很是的有必要性了。
4、基於web的loganalyzer日誌分析工具的搭建
本環境是針對上面的日誌存放在mysql服務器中不方便查看,配置loganalyzer日誌分析工具來分析查看日誌
rsyslog服務器的配置步驟:
一、安裝httpd,php,php-gd,php-mysql
httpd用來提供web服務
php使apache支持php,由於loganalyzer是用php編寫
php-mysql用於loganalyzer鏈接數據庫
php-gd用於繪圖
[root@jie1 ~]# yum -y install httpd php php-mysql php-gd [root@jie1 ~]# mkdir -pv /web/loganalyzer #存放loganalyzer的網頁文件 mkdir: created directory `/web' mkdir: created directory `/web/loganalyzer'
二、下載loganalyzer源碼包
[root@jie1 ~]# ls anaconda-ks.cfg install.log install.log.syslog loganalyzer-3.6.4.tar.gz [root@jie1 ~]# tar xf loganalyzer-3.6.4.tar.gz [root@jie1 ~]# ls anaconda-ks.cfg install.log.syslog loganalyzer-3.6.4.tar.gz install.log loganalyzer-3.6.4 [root@jie1 ~]# cd loganalyzer-3.6.4 [root@jie1 loganalyzer-3.6.4]# ls ChangeLog contrib COPYING doc INSTALL src [root@jie1 loganalyzer-3.6.4]# mv src/* /web/loganalyzer/ #把src目錄的全部文件移到存放loganalyzer的文件中 [root@jie1 loganalyzer-3.6.4]# cd contrib/ [root@jie1 contrib]# ls configure.sh secure.sh [root@jie1 contrib]# mv ./*.sh /web/loganalyzer/ #把腳本文件也移到loganalyzer文件中
三、執行腳本
[root@jie1 contrib]#cd /web/loganalyzer/ [root@jie1 loganalyzer]# bash configure.sh
四、修改httpd的配置文件,新建一個虛擬主機
vim /etc/httpd/conf/httpd.conf ################## ServerName 172.16.22.1:80 DirectoryIndex index.php index.html index.html.var #DocumentRoot "/var/www/html" #註釋掉默認存放網頁文件的路徑 <VirtualHost *:80> DocumentRoot /web/loganalyzer #指定存放loganalyzer網頁文件的路徑 ServerName www.jie.com </VirtualHost> #################
五、重啓服務,建立loganalyzer的數據庫,並受權
[root@jie1 loganalyzer]# service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ] [root@jie1 loganalyzer]# mysql -u root -p Enter password: mysql> create database loganalyzer; Query OK, 1 row affected (0.04 sec) mysql> grant all on loganalyzer.* to lyzeruser@'172.16.22.1' identified by 'lyzeruser'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
六、安裝loganalyzer