远程消息未被转发的Syslog

4

我使用下面的配置来配置/etc/syslog.conf

*.* @10.10.10.2:514
*.* @@10.10.10.2:514

并通过以下代码进行了登录

openlog("Test-Msg", LOG_PID, LOG_LOCAL0);
for (int i = 0; i <10; i++)
{
    syslog(LOG_ALERT, "My msg %d", i);
    std::cout<<"-------------Writing Syslog "<<i<<"\n";
}

closelog();

但它没有转发到远程服务器,相反它会创建一个文件"@ 10.10.10.2:514"和"@ @10.10.10.2:514",并将所有信息记录在那里。

使用wireshark测试,没有消息转发到远程系统。

我正在使用yocto平台和busybox 1.22 syslog实现。

更新

在yocto中,我看到了另一个配置文件/ etc / syslog-startup.conf,在那里我进行了配置。

DESTINATION=remote  # log destinations (buffer file remote)
REMOTE=10.10.10.2:514          # where to log (syslog remote)

现在它已经开始转发所有的消息,但是根据 Linux 手册,syslog conf 必须支持 *.=alert @<host:port> 过滤器。如果我要使用上述配置,如何应用这些过滤器?

仔细确认您正在使用哪种syslog实现... - Anders
3个回答

2
默认情况下,基于Yocto的系统使用Busybox提供许多基本工具的最小版本。其中syslog是这些工具之一。这是来自Busybox文档的引用:
请注意,此版本的syslogd忽略/etc/syslog.conf。
要获得完整的syslog功能,您需要在映像中包含更完整的实现。在meta-openembedded中有几个选项,rsyslog in meta-oe可能是一个不错的默认选择。

谢谢@jku,我在syslog.conf中添加了一个无效的条目,当我尝试重新启动时,我可以看到它崩溃了。因此,我认为syslogd正在读取配置文件并尝试解析它。 - Gilson PJ
嗯,如果启用了特定的构建配置,则似乎有限的支持:https://git.busybox.net/busybox/tree/docs/syslog.conf.txt -- 你需要阅读源代码以确保,但我愿意打赌你的语法不受支持。 - Jussi Kukkonen
1
@GilsonPJ,您需要在您的镜像中包含rsyslog或syslog-ng,它们支持远程日志记录。Busybox中的syslogd不支持将日志记录到远程机器。 - nos
根据Linux手册https://linux.die.net/man/5/syslog.conf,@nos应该被syslog支持,对吗?为什么Busybox的实现方式不同呢?虽然他们可以自由地实现自己的方式,但是他们如何避免一个共同的特性呢? - Gilson PJ
那个 man 页面不适用于 busybox syslogd 实现。然而,如果在构建 busybox 时启用 FEATURE_REMOTE_LOG,busybox syslogd 可以使用 -R 参数进行远程日志记录,详情请参见 https://busybox.net/downloads/BusyBox.html。但是,请确保您知道实际运行的 syslogd 实现,也许您正在运行完全不同的东西。 - nos
有没有可能通过简单安装rsyslog或syslog-ng来升级busybox(而不需要重新安装busybox)?(我知道这是旧帖子,但我觉得它很有用) - ransh

0

我也在研究这个问题。busybox 支持远程日志记录,但似乎会转发所有消息。它不支持与远程日志记录结合使用的筛选功能。因此我在镜像上安装了 rsyslog 来解决这个问题。

我还发现 rsyslog 默认没有文件轮换功能。虽然 Logrotate 作为依赖项已经被安装,但是没有 cron 守护进程运行。所以我需要安装 cronie 并配置 cronie、logrotate 和 rsyslog。


0
我会首先使用 logger(busybox 中的工具)来确保您的 syslog 配置正确。 如果通过此方法发送的消息良好,则我们可以调查代码。
logger [OPTIONS] [MESSAGE]

Write MESSAGE to the system log. If MESSAGE is omitted, log stdin.

Options:

        -s      Log to stderr as well as the system log
        -t TAG  Log using the specified tag (defaults to user name)
        -p PRIO Priority (numeric or facility.level pair)

记录器运行良好。已使用记录器以及自定义应用程序进行测试。 - Gilson PJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接