syslog-ng flush_lines 选项不起作用

Posted

技术标签:

【中文标题】syslog-ng flush_lines 选项不起作用【英文标题】:syslog-ng flush_lines option does not work 【发布时间】:2015-07-30 11:03:15 【问题描述】:

我在 ubuntu 14.04 上使用 syslog-ng 3.5.3 我需要减少系统负载。 所以我想使用 flush_lines 选项。

我在全局选项中添加了 flush_lines(2)。 我用tail -h /var/log/messages确认终端中的行为

但是日志消息像以前一样立即写入。 我怎样才能一次发出一些消息?

我将以下配置用于 syslog-ng。

@version: 3.5
@include "scl.conf"
@include "`scl-root`/system/tty10.conf"

# Syslog-ng configuration file, compatible with default Debian syslogd
# installation.

# First, set some global options.
options  chain_hostnames(off); flush_lines(2); use_dns(no); use_fqdn(no);
      owner("root"); group("adm"); perm(0640); stats_freq(0);
      bad_hostname("^gconfd$");
;

########################
# Sources
########################
# This is the default behavior of sysklogd package
# Logs may come from unix stream, but not from another machine.
#
source s_src 
       system();
       internal();
;

# If you wish to get logs from remote machine you should uncomment
# this and comment the above source line.
#
#source s_net  tcp(ip(127.0.0.1) port(1000)); ;

########################
# Destinations
########################
# First some standard logfile
#
destination d_auth  file("/var/log/auth.log"); ;
destination d_cron  file("/var/log/cron.log"); ;
destination d_daemon  file("/var/log/daemon.log"); ;
destination d_kern  file("/var/log/kern.log"); ;
destination d_lpr  file("/var/log/lpr.log"); ;
destination d_mail  file("/var/log/mail.log"); ;
destination d_syslog  file("/var/log/syslog"); ;
destination d_user  file("/var/log/user.log"); ;
destination d_uucp  file("/var/log/uucp.log"); ;

# This files are the log come from the mail subsystem.
#
destination d_mailinfo  file("/var/log/mail.info"); ;
destination d_mailwarn  file("/var/log/mail.warn"); ;
destination d_mailerr  file("/var/log/mail.err"); ;

# Logging for INN news system
#
destination d_newscrit  file("/var/log/news/news.crit"); ;
destination d_newserr  file("/var/log/news/news.err"); ;
destination d_newsnotice  file("/var/log/news/news.notice"); ;

# Some `catch-all' logfiles.
#
destination d_debug  file("/var/log/debug"); ;
destination d_error  file("/var/log/error"); ;
destination d_messages  file("/var/log/messages"); ;

# The root's console.
#
destination d_console  usertty("root"); ;

# Virtual console.
#
destination d_console_all  file(`tty10`); ;

# The named pipe /dev/xconsole is for the nsole' utility.  To use it,
# you must invoke nsole' with the -file' option:
#
#    $ xconsole -file /dev/xconsole [...]
#
destination d_xconsole  pipe("/dev/xconsole"); ;

# Send the messages to an other host
#
#destination d_net  tcp("127.0.0.1" port(1000) log_fifo_size(1000)); ;

# Debian only
destination d_ppp  file("/var/log/ppp.log"); ;

########################
# Filters
########################
# Here's come the filter options. With this rules, we can set which 
# message go where.

filter f_dbg  level(debug); ;
filter f_info  level(info); ;
filter f_notice  level(notice); ;
filter f_warn  level(warn); ;
filter f_err  level(err); ;
filter f_crit  level(crit .. emerg); ;

filter f_debug  level(debug) and not facility(auth, authpriv, news, mail); ;
filter f_error  level(err .. emerg) ; ;
filter f_messages  level(info,notice,warn) and 
                    not facility(auth,authpriv,cron,daemon,mail,news); ;

filter f_auth  facility(auth, authpriv) and not filter(f_debug); ;
filter f_cron  facility(cron) and not filter(f_debug); ;
filter f_daemon  facility(daemon) and not filter(f_debug); ;
filter f_kern  facility(kern) and not filter(f_debug); ;
filter f_lpr  facility(lpr) and not filter(f_debug); ;
filter f_local  facility(local0, local1, local3, local4, local5,
                        local6, local7) and not filter(f_debug); ;
filter f_mail  facility(mail) and not filter(f_debug); ;
filter f_news  facility(news) and not filter(f_debug); ;
filter f_syslog3  not facility(auth, authpriv, mail) and not filter(f_debug); ;
filter f_user  facility(user) and not filter(f_debug); ;
filter f_uucp  facility(uucp) and not filter(f_debug); ;

filter f_cnews  level(notice, err, crit) and facility(news); ;
filter f_cother  level(debug, info, notice, warn) or facility(daemon, mail); ;

filter f_ppp  facility(local2) and not filter(f_debug); ;
filter f_console  level(warn .. emerg); ;

########################
# Log paths
########################
log  source(s_src); filter(f_auth); destination(d_auth); ;
log  source(s_src); filter(f_cron); destination(d_cron); ;
log  source(s_src); filter(f_daemon); destination(d_daemon); ;
log  source(s_src); filter(f_kern); destination(d_kern); ;
log  source(s_src); filter(f_lpr); destination(d_lpr); ;
log  source(s_src); filter(f_syslog3); destination(d_syslog); ;
log  source(s_src); filter(f_user); destination(d_user); ;
log  source(s_src); filter(f_uucp); destination(d_uucp); ;

log  source(s_src); filter(f_mail); destination(d_mail); ;
#log  source(s_src); filter(f_mail); filter(f_info); destination(d_mailinfo); ;
#log  source(s_src); filter(f_mail); filter(f_warn); destination(d_mailwarn); ;
#log  source(s_src); filter(f_mail); filter(f_err); destination(d_mailerr); ;

log  source(s_src); filter(f_news); filter(f_crit); destination(d_newscrit); ;
log  source(s_src); filter(f_news); filter(f_err); destination(d_newserr); ;
log  source(s_src); filter(f_news); filter(f_notice); destination(d_newsnotice); ;
#log  source(s_src); filter(f_cnews); destination(d_console_all); ;
#log  source(s_src); filter(f_cother); destination(d_console_all); ;

#log  source(s_src); filter(f_ppp); destination(d_ppp); ;

log  source(s_src); filter(f_debug); destination(d_debug); ;
log  source(s_src); filter(f_error); destination(d_error); ;
log  source(s_src); filter(f_messages); destination(d_messages); ;

log  source(s_src); filter(f_console); destination(d_console_all);
                    destination(d_xconsole); ;
log  source(s_src); filter(f_crit); destination(d_console); ;

# All messages send to a remote site
#
#log  source(s_src); destination(d_net); ;

###
# Include all config files in /etc/syslog-ng/conf.d/
###
@include "/etc/syslog-ng/conf.d/*.conf"

【问题讨论】:

【参考方案1】:

flush_lines 决定一次输出多少行。如果您连续收到消息,将 flush_lines 从 1 增加到 2 并没有任何效果。将其增加到 50 或 100 以查看差异。

【讨论】:

我尝试将它增加到100,情况也一样。在我的环境中,通常很少发生错误。我通过调用系统调用 openlog、syslog、closelog 向 syslog-ng 发送一行消息。所以我一次尝试只收到一条线消息。 您是立即收到消息,还是几秒钟后才收到消息? syslog-ng 有一个 flush-timeout 参数(默认为 10 秒),如果缓存过期而没有收到新消息,则刷新缓存。 我立即收到了消息。

以上是关于syslog-ng flush_lines 选项不起作用的主要内容,如果未能解决你的问题,请参考以下文章

syslog-ng 2.09 线程()语法

logging syslog-ng 多行记录 Windows 日志

syslog-ng 匹配规则匹配但不应该

syslog-ng 本地读写失败

syslog-ng读取文件权限被拒绝

syslog-ng 如何验证标头?