作為一名系統運維工程師,平時查看分析LINUX系統日志我覺得是我們每天必做的功課,但時間長了會發現每次查看站點日志都得挨個進後台,幾台服務器還可以這麼對付,但如果管理成百上千台線上服務器,這種方法就捉襟見肘了。
後來想了想能不能有一台日志服務器集中管理日志,並以WEB形式將日志顯示到前台方便查看,頓時碼字的想法油然而生,呵呵。
本人有一個習慣,那就是會把群裡或者網上看到的圈內比較認可的LINUX系統軟件先保存在備忘錄,等閒下來研究研究,剛好前段時間有位朋友提到rsyslog+loganalyzer集中管理日志,所以今天剛好就抽空研究了下,過程雖有曲折(網上的文檔各種坑跌),最後還是利用一天時間搞定,將自己的理解分享給搭建,僅供參考。
本文檔是利用rsyslog+loganalyzer+mysql將網內所有LINUX服務器的系統日志集中到日志服務器進行管理,所有日志會保存在mysql數據庫表中
注:loganalyzer在獲取客戶端日志會有兩種保存模式,一種是直接讀取客戶端/var/log/目錄下的日志並保存到服務端該目錄下,一種是讀取後保存到日志服務器數據庫中,本文檔推薦後者
解決方案:
一.環境部署
操作系統: centos6.3 x64
rsyslog: 系統默認yum源
loganalyzer: loganalyzer-3.6.3
LAMP: httpd-2.4.4,mysql-5.6.10,php-5.4.13
rsyslog server: 192.168.7.201 lamp.example.com
rsyslog client: 192.168.7.74 www2.example.com
1.安裝LAMP環境
本博傳送門:http://showerlee.blog.51cto.com/2047005/1174141
2.關閉iptables和SELINUX
# service iptables stop
注:這裡若要開啟iptables服務增加系統安全性
服務端需添加rsyslog UDP 514端口以及loganalyzer TCP 80端口通過規則
# iptables -A INPUT -p udp --dport 514 -j ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -A INPUT -p TCP --dport 80 -j ACCEPT
客戶端只需添加OUTPUT通過規則
# iptables -P OUTPUT ACCEPT
從規則可見,rsyslog server端為被動獲取數據,client端為主動發送數據
關閉iptables的朋友可以無視。。
# setenforce 0
# vi /etc/sysconfig/selinux
---------------
SELINUX=disabled
---------------
3.同步時間
# ntpdate asia.pool.ntp.org
二.安裝配置rsyslog
(rsyslog server)
# yum install rsyslog rsyslog-mysql -y
注:rsyslog-mysql為rsyslog將日志傳送到mysql數據庫的一個模塊,這裡必須安裝
# cd /usr/share/doc/rsyslog-mysql-5.8.10/
# mysql -uroot -p123456 < createDB.sql
注:這裡導入數據庫操作其實博主最後研究了下,就是創建了Syslog庫並在該庫中創建了兩張空表
創建rsyslog用戶在mysql下的相關權限
# mysql -uroot -p123456
> grant all privileges on Syslog.* to rsyslog@localhost identified by "123456";
> flush privileges;
> exit
配置服務端支持rsyslog-mysql模塊,並開啟UDP服務端口獲取網內其他LINUX系統日志
# vi /etc/rsyslog.conf
在#### MODULES ####下添加這兩行
------------------
$ModLoad ommysql.so
*.* :ommysql:localhost,Syslog,rsyslog,123456
------------------
注:localhost表示本地主機,Syslog為數據庫名,rsyslog為數據庫的用戶,123456為該用戶密碼
取消下面三行注釋
-----------------
$ModLoad immark
$ModLoad imudp
$UDPServerRun 514
-----------------
重啟服務:
# service rsyslog restart
(rsyslog client)
# yum install rsyslog -y
配置rsyslog客戶端發送本地日志到服務端
# vi /etc/rsyslog.conf
末行添加如下內容
-------------------
*.* @192.168.7.201
-------------------
注:192.168.7.201 為日志服務器端IP地址
重啟服務:
# service rsyslog restart
三.安裝loganalyzer
# wget http://download.adiscon.com/loganalyzer/loganalyzer-3.6.3.tar.gz
# tar zxvf loganalyzer-3.6.3.tar.gz
# cd loganalyzer-3.6.3
# mkdir -p /usr/local/apache2/htdocs/loganalyzer
復制loganalyzer源代碼到apache的DocumentRoot下loganalyzer目錄
# cp -r src/* /usr/local/apache2/htdocs/loganalyzer
# cp -r contrib/* /usr/local/apache2/htdocs/loganalyzer
# chown -R daemon.daemon /usr/local/apache2/htdocs/loganalyzer
通過web向導安裝loganalyzer前,必須先執行以下兩個腳本
# cd /usr/local/apache2/htdocs/loganalyzer/
# sh configure.sh
# sh secure.sh
注:該腳本實際上是創建該目錄下的config.php,並配置該文件權限。
在浏覽器輸入網址,進入安裝向導
http://192.168.7.201/loganalyzer
1.提示沒有配置文件,點擊here利用向導生成
2.NEXT
3.按照如圖輸入配置,點擊NEXT:
注:點擊NEXT時若報錯,後台執行如下命令後繼續
# ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
4.開始寫入數據庫,NEXT
5.提示寫入成功,NEXT
 
6.設置管理員賬戶,配置完畢NEXT
7.設置監控日志保存到mysql數據庫中,按照如圖配置後NEXT
8.完成配置,FINISH
9.進入登陸界面:
10.進入主界面:
查看loganalyzer是否獲取192.168.7.201和192.168.7.74系統日志
利用navicat查看rsyslog服務端和客戶端系統日志是否都寫入數據庫Syslog-SystemEvents表
---------- 大功告成------------
後記:
1.本人在loganalyzer安裝向導配置的web後台賬戶,在登陸界面無法登陸,提示賬號或密碼錯誤,不知道是什麼原因?最後是在向導一處去掉登陸認證才勉強通過,有遇到相同問題的朋友望幫忙解答。
經過一位朋友指點,終於找到了原因
首先利用以下命令守株待兔
# tail -f /usr/local/mysql/log/mysql.log
然後在loganalyzer向導STEP6輸入web後台賬號密碼後,點擊NEXT
查看到mysql.log日志裡出現了一條INSERT語句
然後將該語句復制到後台手動執行,看報什麼錯誤
# mysql -uroot -p123456;
> INSERT INTO logcon_users (username, password, is_admin) VALUES ('admin', '00a1f187721cxxxxxxx6bf791e69382c', 1);
ERROR 1364 (HY000): Field 'last_login' doesn't have a default value
提示'last_login'欄不能為空值
OK,直接登錄navicat,將這欄設置為允許空值保存即可
從新執行這條語句
> INSERT INTO logcon_users (username, password, is_admin) VALUES ('admin', '00a1f187721cxxxxxxx6bf791e69382c', 1);
Query OK, 1 row affected (0.06 sec)
顯示執行成功
利用navicat 查看後台該表,顯示成功插入一條記錄
重新利用該賬號即可成功登錄loganalyzer web後台
看來是mysql在執行該語句時,發現last_login欄默認為非空,所以拒絕這條insert語句執行,解決辦法就是將該欄設置為允許空值即可
博主在線上老版本mysql-5.0.56無需進行上述手動操作,即可成功登錄後台
但本篇出現的問題則是在mysql-5.6.10版本上
看來這應該不算是loganalyzer的BUG,應該是mysql在高版本執行insert語句提高了嚴謹性
這裡給卡在這裡的朋友點思路,僅供參考。
在此感謝longeleven11朋友的提點。。。。
2.安裝rsyslog可謂是過程曲折,之前本想全部編譯安裝,最後才發現網上的文檔各種誤導,編譯rsyslog最後花了2個小時安裝了其6個依賴包,全部找的老外的文檔挨個測試,裝完網上給出的文檔又不能合理給出如何與系統自帶的rsyslog共存保證不沖突,也就是編譯的rsyslog的啟動方法如何與系統自帶的區別,索性就yum吧,實屬無奈之舉,還有吐槽下google各種間歇性抽風,至於原因,大家都懂的。。。
3.Windows客戶端安裝(win2008 server 64bit)
1.下載evtsys
http://eventlog-to-syslog.googlecode.com/files/Evtsys_4.4.3_64-Bit.zip
2.解壓文件將包內64-Bit文件夾下的所有文件復制C:\Windows\System32下
3.開啟evtsys服務
運行- cmd
> cd c:\Windows\System32
> evtsys -i -s 10 -h 192.168.7.11 -p 514
> net start evtsys
4.驗證效果
如圖:
作者:51cto博客 一路向北