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