rsyslog 在远程启动时发送日志

Posted

技术标签:

【中文标题】rsyslog 在远程启动时发送日志【英文标题】:rsyslog send logs when the remote is up 【发布时间】:2013-07-14 23:24:49 【问题描述】:

我遇到了问题。我有 2 个正在运行的 VM 实例,我想设置从 1 个 VM 传输到另一个 VM 的日志(让我们将它们标记为客户端和服务器)。 我设置了一切。我的客户端 rsyslog 包含以下内容:

. @@192.168.174.132:515

表示通过 tcp 将本地日志传输到端口 515 上的 192.168.174.132。 在服务器端,我安装了 rsyslog-mysql 并且我的服务器配置包含以下内容:

$ModLoad imtcp $InputTCPServerRun 515

我还安装了 loganalyzer。 所以,一切都很好,但问题是:我关闭了远程服务器并在客户端 vm 上运行了几次此代码:

<?php

openlog("php_script_test", LOG_PID | LOG_PERROR, LOG_LOCAL0);

$access = date("Y/m/d H:i:s");
syslog(LOG_CRIT, "This is to be sent after shutdown: $access");

closelog();

然后我运行远程虚拟机,这些消息不会发送到远程虚拟机。 是否有任何配置选项可以使客户端将日志保存在本地并在远程服务器启动时将它们发送到远程服务器? 我尝试使用 $WorkDirectory 选项但失败了。 我的 rsyslog 版本是 4.6.4,我的操作系统是 Debian 6。

谢谢。

【问题讨论】:

【参考方案1】:

您可以使用此处说明的排队系统:http://www.rsyslog.com/doc/queues.html

以下是在磁盘上配置队列的示例。一旦连接可用,它将清理队列。

$ActionQueueType disk
$WorkDirectory /var/spool/rsyslog
$ActionQueueFilename actionRq
$ActionQueueMaxDiskSpace 1m
$ActionQueueSize 4000
$ActionQueueTimeoutEnqueue    0
$ActionResumeRetryCount -1

** 确保在 rsyslog 启动之前已经创建了工作目录

【讨论】:

谢谢你的回答,伙计。我试过了。但这似乎不起作用。在我重新启动客户端 VM 后,文件 actionRq.000001 被创建并填充了一些系统日志消息(我猜像 ssh 这样的初始化消息已启动等)。我关闭了服务器虚拟机并在客户端虚拟机上运行了我的第一篇文章中的脚本。没有任何事情发生在 actionRq.000001 中。当然,当我启动服务器时,它不会收到任何关于 php 的信息。有什么想法吗? :-)

以上是关于rsyslog 在远程启动时发送日志的主要内容,如果未能解决你的问题,请参考以下文章

远程日志记录:rsyslog 与 RESTful API

rsyslog

如何使用 rsyslog 仅将特定文件发送到远程服务器

syslog日志服务器搭建

rsyslog+loganalyzer+mysql部署日志服务器

搭建syslog日志服务器