1、首先從www.rsyslog.com/下載并安裝最新版本的 rsyslog
2、安裝時很容易
(1)把源代碼解壓,并進入源代碼樹中執(zhí)行:
./configure --enable-mysql
這里要注意,你的mysql要安裝正確,特別是版本,比如我的mysql版本是:5.0.22,系統(tǒng)是redhat,那么我就要安裝有MySQL- client-standard-5.0.22-0.rhel4.i386.rpm,總之如果這一步執(zhí)行出錯,比如我的剛開始是提示錯 誤:checking for mysql_init in -lmysqlclient 在這一步有問題,后來重新安裝了MySQL-client-standard-5.0.22-0.rhel4.i386.rpm就ok了
(2)依次執(zhí)行:make和make install就ok
3、配置rsyslog.conf
在源代碼樹下有一個示例文件,把它拷貝到/etc下
(1)如果你要接受遠程設備的syslog則要把以下三行的#去掉:
# UDP Syslog Server:
#$ModLoad imudp.so # provides UDP syslog reception
#$UDPServerRun 514 # start a UDP syslog server at standard port 514
并同時在iptables中開放514端口
(2)配置rsyslog自動啟動
由于rsyslog沒有為redhat準備啟動腳本,所以要我們自己建,其實也很簡單,我直接把syslog的啟動腳本改了下,把里面的syslog改為 rsyslog,如下所示:
more /etc/init.d/syslog
#!/bin/bash
#
#
# chkconfig: 2345 12 88
# description: Syslog is the facility by which many daemons use to log \
# messages to various system log files. It is a good idea to always \
# run syslog.
### BEGIN INIT INFO
# Provides: $syslog
### END INIT INFO
# Source function library.
. /etc/init.d/functions
[ -f /usr/local/sbin/rsyslogd ] || exit 0
[ -f /sbin/klogd ] || exit 0
# Source config
RETVAL=0
start() {
echo -n $"Starting rsyslog: "
/usr/local/sbin/rsyslogd
RETVAL=$?
echo
echo -n $"Starting kernel logger: "
daemon klogd $KLOGD_OPTIONS
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/rsyslog
return $RETVAL
}
stop() {
echo -n $"Shutting down kernel logger: "
killproc klogd
echo
echo -n $"Shutting down rsyslog: "
killproc rsyslogd
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/rsyslog
return $RETVAL
}
rhstatus() {
status rsyslogd
status klogd
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
rhstatus
;;
restart)
restart
;;
condrestart)
[ -f /var/lock/subsys/rsyslog ] && restart || :
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart}"
exit 1
esac
exit $?
就只改了一點點,名字也沒變,這樣出不用ln來建鏈接了,都用原來的
(3)記錄到mysql
如果要使用sql來記錄日志則先要建表,找到rsyslog-3.20.0\plugins\ommysql下的createDB.sql文件,打開它, 把里面的建表語句在你的數據庫里執(zhí)行,當然你也可以自建一個新數據庫,一切由你
之后加載mysql模塊,當然你一定要確認ommysql.so在lib文件夾里存在,如果你之前使用./configure --enable-mysql進行配置則會在/usr/local/lib/rsyslog下存在ommysql.so文件(操作系統(tǒng)不同,目錄可能不一 樣),然后在rsyslog.conf文件中加上:
$ModLoad ommysql
local4.* :ommysql:127.0.0.1,yourdb,yourname,yourpass;
注意我是local4來接受遠程的syslog
在交換機上的配置:
華為的:
info-center loghost 1.1.1.1 facility local4 //local4要和rsyslog.conf 里配置的一致,1.1.1.1為你的syslog服務器地址記得要改啊
info-center loghost source Vlan-interface 11//你的網管VLAN接口,要改的
info-center source SHELL channel loghost log level notifications//我只想要操作日志,其他的不關心,如果你想要更多,請更改
思科的:
logging 1.1.1.1(配置 syslog服務器地址,可以定義多個)
service timestamps debug datetime localtime show-timezone msec
service timestamps log datetime localtime show-timezone msec (syslog 信息包含時間戳)
logging facility local4 (定義 facility 級別,缺省為local7,可以設置從 local0 到 local7)
logging trap warning (定義severity 級別缺省為 infor 級別)
到這里,一切基本ok了,
到你的mysql服務器是看看:
select * from SystemEvents
應該已經記錄有日志了
但這里還有個小bug,我們會發(fā)現fromhost的這個字段不對,并不是你的交換機的地址,這是rsyslog的一個bug,怎么解決??請參考:http://kb.monitorware.com/viewtopic.php?f=36&t=1754, 而我的解決方案是自定義模板,而不能用其默認的模板了!我定義了一個模板:MySQLInsert并用它來執(zhí)行sql語句,關于模板的概念,請參考http://www.rsyslog.com/doc-rsyslog_conf.html這 里有詳細的解釋
參考我的rsyslog.conf:
# UDP Syslog Server:
$ModLoad imudp.so # provides UDP syslog reception
$UDPServerRun 514 # start a UDP syslog server at standard port 514
# MySQL log
$ModLoad ommysql
$template MySQLInsert,"insert into SystemEvents( ReceivedAt,DeviceReportedTime,message,FromHost,syslogtag) values('%timegenerated:::
date-mysql%','%timereported:::date-mysql%','%msg%','%fromhost-ip%','%syslogtag%')", SQL
local4.* :ommysql:127.0.0.1,syslogdatabase,syslogusername,syslogpass;MySQLInsert
注意我使用了%fromhost-ip%,而不是%HOSTNAME%
好了,基本上就這樣了,以上就是我配置rsyslog的一些經過,希望對大家有幫助