你们为什么要记录数据?对于我有两个明确的原因:统计和调试。对于第一种情况,一段时间内无法访问得到数据并不是什么大问题,统计只有在收集很长一段时间后才有意义。但当某台服务器完全故障,服务一个接一个不可用,你想马上确定发生了什么,你必须通过ssh访问你的日志,然而服务已经不可用。这时日志记录在远程就很有必要了。
我们可以依靠操作系统提供一个方案来解决这个问题。从2004年开始,Rainer Gerhanrds开始编写rsyslog,这是一个提供了远程记录和强大过滤功能的守护进程。本文会介绍如何进行设置实现远程记录功能,并展示一些可能的日常使用示例,包括标准的系统日志和apache的访问和错误日志。
免责声明
如果你要开始更改你们的日志设置,请小心操作,记得备份相关数据并在之后检查新设置是否正确的工作。本文只是一个简单的介绍,不是完美的参考。如果你不知道一些操作是什么意思或有什么作用,请先查阅一下。另外,备份配置文件迟早会派上用场的。如果你发现我范了什么错误,也请通知我。
linux上记录日志小而陋的历史
回到当年,在《帝国反击战》被视为绝无仅有的特效电影的时代,Eric Allman为邮件发送创造了一个日志记录标准。很快这个标准被其他程序采纳并成为unix系统事实上的日志记录标准。20年后,syslog-ng,一个开源的syslog实现出现了,在过滤和配置方面带来了巨大改进。最后几乎到现代(2004)上边提到的Rainer Gerhanrds开始编写rsyslog作为syslog-ng的竞争对手,因为他认为竞争对手的存在是很有必要的。
起步
很简单,毕竟我们是在linux上,执行“aptitude install rsyslog”就足够了。你还要做的就是检查是否有其他日志记录守护进程在你的系统上运行(或者你已经有rsyslog在运行了),比如sysklogd或其他。你不需要它们了因为我们要开始远程日志记录。如果你能在/etc/下边看到rsyslog.conf,表明已经设置好本地日志记录了。现在,清除文件中所有的规则,实测最少需要保留这么两行:
$ModLoad imuxsock
*.* @1.2.3.4:514
这时候如果你重启rsyslog,所有设施所有级别的错误都会通过UDP发送到IP为1.2.3.4的服务器上。通过在第一个@前边添加第二个并更改端口你就能通过TCP来发送,不过现在我不介意日志丢失因此使用UDP就足够了。使用*.*日志可能有点多,如果你清楚在接收服务器上哪些日志是要被抛弃的,你可以直接在发送服务器上抛弃掉以节省带宽。继续往下看该如何操作。
以上就是实现系统日志记录这个目标所要做的全部工作,但我们不仅于此,我们还要让apache使用系统日志而不是监听它自己本身的命令。对于错误日志,非常简单,我们告诉它使用系统日志来处