Flink-on-Yarn 解决方法使用 rsyslog 实时获取日志

在应用程序完成之前,Yarn 默认不会聚合日志,这对于甚至不终止的流式作业来说可能会有问题。

解决方法是使用 rsyslog ,这在大多数 Linux 机器上都可用。

首先,通过取消注释/etc/rsyslog.conf 中的以下行来允许传入的 udp 请求:

$ModLoad imudp
$UDPServerRun 514

编辑你的 log4j.properties(参见本页的其他例子)来使用 SyslogAppender

log4j.rootLogger=INFO, file

# TODO: change package logtest to your package
log4j.logger.logtest=INFO, SYSLOG

# Log all infos in the given file
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.file=${log.file}
log4j.appender.file.append=false
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=bbdata: %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%n

# suppress the irrelevant (wrong) warnings from the netty channel handler
log4j.logger.org.jboss.netty.channel.DefaultChannelPipeline=ERROR, file

# rsyslog
# configure Syslog facility SYSLOG appender
# TODO: replace host and myTag by your own
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.syslogHost=10.10.10.102
log4j.appender.SYSLOG.port=514
#log4j.appender.SYSLOG.appName=bbdata
log4j.appender.SYSLOG.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.SYSLOG.layout.conversionPattern=myTag: [%p] %c:%L - %m %throwable %n

布局很重要,因为 rsyslog 将换行视为新的日志条目。在上面,将跳过换行符(例如在 stacktraces 中)。如果你真的希望多行/标签日志正常工作,请编辑 rsyslog.conf 并添加:

$EscapeControlCharactersOnReceive off

如果要将所有日志重定向到特定文件,则在 conversionPattern 开头使用 myTag:非常有用。为此,请编辑 rsyslog.conf 并添加以下规则:

if $programname == 'myTag' then /var/log/my-app.log
& stop