分类: LINUX
2010-07-14 17:01:22
这次为了把交换机及路由器的日志文件集中放置,并方便调试,安装了rsyslog,并对其进行配置,使其可记录网络设备传来的syslog,并将之存入 Mysql数据中,以便我们集中管理,下面是具体的配置过程:
1、首先从下载并安装最新版本的 rsyslog
2、安装时很容易
(1)把源代码解压,并进入源代码树中执行:
./configure --enable-mysql
这里要注意,你的mysql要安装正确,特别是版本,比如我的mysql版本是:5.0.22,系统是redhat,那么我就要安装有MySQL- client-standard-5.0.22-0.rhel4.i386.rpm,总之如果这一步执行出错,比如我的刚开始是提示错 误:checking for mysql_init in -lmysqlclient 在这一步有问题,后来重新安装了MySQL-client-standard-5.0.22-0.rhel4.i386.rpm就ok了
(2)依次执行: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文件,打开它, 把里面的建表语句在你的数据库里执行,当然你也可以自建一个新数据库,一切由你
之后加载mysql模块,当然你一定要确认ommysql.so在lib文件夹里存在,如果你之前使用./configure --enable-mysql进行配置则会在/usr/local/lib/rsyslog下存在ommysql.so文件(操作系统不同,目录可能不一 样),然后在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,我们会发现fromhost的这个字段不对,并不是你的交换机的地址,这是rsyslog的一个bug,怎么解决??请参考:, 而我的解决方案是自定义模板,而不能用其默认的模板了!我定义了一个模板:MySQLInsert并用它来执行sql语句,关于模板的概念,请参考这 里有详细的解释
参考我的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的一些经过,希望对大家有帮助。
摘自: