Chinaunix首页 | 论坛 | 博客
  • 博客访问: 238228
  • 博文数量: 79
  • 博客积分: 1942
  • 博客等级: 上尉
  • 技术积分: 910
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-19 16:17
文章分类

全部博文(79)

文章存档

2011年(1)

2010年(50)

2009年(28)

分类: LINUX

2010-08-03 13:41:56

今天突然要配置Linux的syslog服务器,摸了一早上才弄好。记录远程机器发来的syslog消息倒是容易(网上到处都是),不过按照默认的设置,syslog会将所有信息都给写入 /var/log/messages 中,和本机的消息都混到一块去了。

实在可恨,搜了一上午都找不到解决办法。本来看到个FreeBSD中用脚本处理的方法,兴冲冲的跑去实验,结果一点反应都没有。
后来看到介绍中有一句:“※注意,不能通过“|/var/xxx.sh”方式导向日志到其他脚本中处理!!”,差点气得吐血...

网上有人说syslog不能分离远程日志,于是试图从syslog-ng下手。结果syslog-ng编译起来N麻烦不说,跑起来还有问题,于是回头继续摸索syslog。试了N次终于找到个差强人意的解决办法,算是解决分离的问题。

 


首先确定远程发来的消息是哪一级的,比如Panabit发过来的都是emerg级消息,某些路由器用的是notice级。实在不行就先用info然后过滤(具体办法见后文)。

(红色字是要添加的内容)
vi /etc/sysconfig/syslog
SYSLOGD_OPTIONS="-r -x -m 0"
-r: 打开接受外来日志消息的功能,其监控514 UDP端口;
-x: 关闭自动解析对方日志服务器的FQDN信息,这能避免DNS不完整所带来的麻烦;

vi /etc/syslog.conf
# 把emerg等级的消息从messages中除开,免得重复记录:
*.info;*.!emerg;mail.none;authpriv.none;cron.none /var/log/messages          # *.!emerg 表示不记录emerg级的消息
#*.emerg    *                   # 注释掉原来的emerg,不将emerg级消息显示到控制台
# 输出到/var/log/mylog
*.emerg  /var/log/mylog

然后重启syslog:service syslog restart

这样就把远程日志写入/var/log/syslog并且不影响本机syslog工作了。


 

关于/etc/syslog.conf写法,这里有个详细说明:

 

/etc/syslog.conf 根据如下的格式定义规则

 

另外:如果确定不了远程发来的消息属于哪一级,可以这样做:

# 先分别记录各种消息
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
*.emerg                                                               /var/log/testlog1
*.warning                                                             /var/log/testlog2
*.notice                                                                /var/log/testlog3

然后分别cat并与messages中比较一下看看哪个里面有需要的日志。比如发现emerg和notice里有需要的内容,再改成这样:

*.info;*.!emerg;*.!notice;mail.none;authpriv.none;cron.none      /var/log/messages
*.emerg;*.notice                                                                    /var/log/mylog

这样写就是将emerg和notice的内容独立出来,存入/var/log/mylog,以免都混到/var/log/messages中不好分析。

阅读(839) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~