【发布时间】:2015-06-04 03:28:25
【问题描述】:
我正在尝试通过 syslog-ng 将系统日志通过管道传输到 perl 脚本,但并非所有系统日志条目都能通过 - 实际上可能有三分之一的情况发生。
我找遍了整个地方,找不到任何人远程遇到我遇到的问题。看起来很简单,但我找不到答案!
这是我的 syslog-ng 设置:
source s_1 { tcp(port(514)); };
destination d_zen { program("/tmp/zen.pl"); };
log { source(s_1); destination(d_zen); };
这是我的 perl 脚本:
#!/usr/bin/perl
use strict;
use warnings;
$|=1
my $filename = "/tmp/zen.log";
open(my $fh, '>>', $filename) or die "could not open file '$filename' $!";
while ( <STDIN> ) {
print $fh <STDIN>."\n";
};
有什么想法吗?
【问题讨论】:
-
仅供参考,我已经尝试过 flush_lines (1),但没有帮助。我也在同时登录到其他地方并且日志正在适当地发生,只有这个目的地参差不齐。
-
这可以告诉您日志生成的频率吗?如果日志很频繁,那么我建议在两者之间使用 unix 域套接字。它在我的用例中非常适合我。
-
它实际上不是很频繁,但一次可以以 5 个为一组。也许每 10 秒一次,我会得到 1-5 个日志条目。我不确定我是否完全理解域 unix 套接字是我会在我的 perl 脚本或其他地方使用的东西吗?
-
你能把你的代码用while循环放在这里吗?此外,我认为您不需要任何类型的套接字来使用。套接字放置在 syslog 和 perl 脚本之间,因此流程类似于
syslog ==> socket ==> perl script。您的情况下的日志率不是很多。 -
与conf文件中的速率限制无关?
标签: linux perl syslog syslog-ng