用Rsyslog进行可靠的日志转发

=Start=

缘由:

最近在学习研究rsyslog的配置和使用,看着这个功能挺实用的,就想着翻译成中文,方便自己参考。

英文地址:http://www.rsyslog.com/doc/v8-stable/tutorials/reliable_forwarding.html

正文:

参考解答:
摘要:

在本文中,我会描述如何(非常)可靠的通过rsyslog转发syslog日志到一个中央日志服务器上去。这需要在client机器上安装有rsyslog,同时也推荐在server机器上安装rsyslog。需要注意的是:工业标准的plain-TCP-syslog协议并不是完全可靠的。如果你需要一个真的非常可靠的解决方案,可以试试rsyslog支持的 RELP 协议。

目标:

只要2个系统通过网络进行通信,错误就可能会发生。比如:通信链路可能会down掉,客户端或服务器端可能会终止,即便是在常规场景中,服务器也可能因为例行维护而停止服务一段时间。

一个可靠的日志系统应该在server端不可达的时候保证日志不丢失,为了做到这点,在server端不可用的时候,未发送的数据就应该被缓存在client上。因此当server端重启之后,消息又能够被重新发送出去。

通过rsyslog你可以轻易地做到这一点。在rsyslog中,每一个Action都是运行在自己的queue中的,而且每个queue在Action没有准备好的时候都能够缓存数据。需要注意的是,只能通过plain-tcp-rsyslog协议和RELP协议做到这一点(检测Action准备好了没有)。

我们这在讲的内容是rsyslog的特性,所以在client上必须要装有rsyslog。

日志内容先是会被缓存到内存里面,queue的内存不够用了之后才会缓存至磁盘。这么做是出于性能的考虑。

如何设置:

如何转发至多台机器:

一个转发目标对应一个转发规则(除了WorkDirectory之外,其它都需要写全)

关于可靠性还有一点要说的是:

使用plain-tcp-syslog协议会比普通的UDP-syslog协议可靠很多,但是,它也不是完全可靠的,如果你需要完全可靠,请使用 RELP 协议。原因的话可以参考文章:http://blog.gerhards.net/2008/04/on-unreliability-of-plain-tcp-syslog.html 。

=END=

声明: 除非注明,CrazyOf.me文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://crazyof.me/blog/archives/3069.html

《用Rsyslog进行可靠的日志转发》上有2条评论

  1. Shell:logger -t "Security" -p local1.debug "$(date +'%F_%T')@$HOSTNAME"
    Python:https://docs.python.org/2/library/syslog.html
    Java:http://syslog4j.org/

发表评论

电子邮件地址不会被公开。 必填项已用*标注