二月 17, 2011

【转】配置rsyslog,实现设备日志的集中管理

Written by

这次为了把交换机及路由器的日志文件集中放置,并方便调试,安装了rsyslog,并对其进行配置,使其可记录网络设备传来的syslog,并将之存入Mysql数据中,以便我们集中管理,下面是具体的配置过程:

1、首先从www.rsyslog.com/下载并安装最新版本的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,怎么解决??请参考:http://kb.monitorware.com/viewtopic.php?f=36&t=1754,而我的解决方案是自定义模板,而不能用其默认的模板了!我定义了一个模板:MySQLInsert并用它来执行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的一些经过,希望对大家有帮助

 

本文来自:http://www.cublog.cn/u2/76419/showart_1783316.html

 

Category : Linux/Unixshell其他

Tags :

发表评论

电子邮件地址不会被公开。

Proudly powered by WordPress and Sweet Tech Theme