Flink-on-Yarn 解决方法使用 rsyslog 实时获取日志
在应用程序完成之前,Yarn 默认不会聚合日志,这对于甚至不终止的流式作业来说可能会有问题。
解决方法是使用 rsyslog
,这在大多数 Linux 机器上都可用。
首先,通过取消注释/etc/rsyslog.conf
中的以下行来允许传入的 udp 请求:
-properties langCopy$ModLoad imudp
$UDPServerRun 514
编辑你的 log4j.properties
(参见本页的其他例子)来使用 SyslogAppender
:
-properties langCopylog4j.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
并添加:
-properties langCopy$EscapeControlCharactersOnReceive off
如果要将所有日志重定向到特定文件,则在 conversionPattern
开头使用 myTag:
非常有用。为此,请编辑 rsyslog.conf
并添加以下规则:
-properties langCopyif $programname == 'myTag' then /var/log/my-app.log
& stop