Apache flink 如何配置Flink群集以通过web ui进行日志记录?

Apache flink 如何配置Flink群集以通过web ui进行日志记录?,apache-flink,Apache Flink,我已经设置了Flink集群,我希望能够查看JobManager和TaskManager的日志和标准输出。当我转到web ui时,我在相应的选项卡上看到以下错误消息: JobManager: Logs (log file unavailable) Stdout (stdout file unavailable) TaskManager Logs Fetching TaskManager log failed. Std

我已经设置了Flink集群,我希望能够查看JobManager和TaskManager的日志和标准输出。当我转到web ui时,我在相应的选项卡上看到以下错误消息:

JobManager:
    Logs
        (log file unavailable)
    Stdout
        (stdout file unavailable)

TaskManager
    Logs
        Fetching TaskManager log failed.
    Stdout
        Fetching TaskManager log failed.
我可以看到可以设置一些配置参数,特别是
taskmanager.log.path
job manager.web.log.path
env.log.dir
。但是,没有提到这些路径是网络可访问路径还是本地路径等


要查看任务管理器和作业管理器日志,我需要做什么?

作业管理器web UI远程请求任务管理器日志,因此这些日志不必驻留在共享文件系统上。另一方面,JobManager日志似乎是从本地文件系统读取的

使用默认的log4j.properties,所有日志文件都会写入
log.file
属性指定的路径。使用默认的Flink启动脚本,此属性中的目录由
env.log.dir
config选项(通过
Flink\u log\u dir
变量)控制

taskmanager.log.path
仅在作业管理器从taskmanager请求日志时才显示出来。但是,如果未设置,则会返回到
log.file
,这将导致自动使用正确的目录。类似地,当设置了
log.file
时,
jobmanager.web.log.path
甚至根本不被使用


因此,我不认为
taskmanager.log.path
jobmanager.web.log.path
与生产部署相关,也不知道应该如何使用它们(请参阅)。您可以设置
env.log.dir
来控制日志文件的位置,这原则上也应该与web UI一起工作。

我发现,如果您运行的是正式的Flink docker容器(),默认情况下,它会将所有内容发送到控制台(即docker最佳实践,一般来说,我猜)。因此,似乎与调整相关的log4j配置是
/opt/flink/conf/log4j console.properties
。这对于
求职者和
任务经理都是如此

因此,我将该文件配置为不仅向控制台吐出,还向文件吐出(在我的情况下是滚动文件):

log4j-console.properties:

上面的代码与下面的
flink-conf.yaml
相结合,能够在jobmanager的日志选项卡中显示jobmanager的日志,并在Taskmanager的日志选项卡中显示taksmanager的日志

flink-conf.yaml:

#一般配置
taskmanager.data.port:6121
taskmanager.rpc.port:6122
jobmanager.rpc.port:6123
blob.server.port:6124
query.server.port:6125
jobmanager.rpc.address:
jobmanager.heap.size:1024m
taskmanager.heap.size:1024m
taskmanager.numberOfTaskSlots:1
web.log.path:/opt/flink/log/output.log
taskmanager.log.path:/opt/flink/log/output.log

注意:我在Flink 1.8.0上,运行Kubernetes中的一个小集群(即jobmanager和TaskManager的单独pod)

您使用的是哪种操作系统?你是怎么部署弗林克的?您是否检查了计算机上是否存在日志文件(在
log/
目录中),以及它们是否存在,是否包含任何错误?Centos7,通过Kubernetes部署。当我转到运行运行作业的任务管理器的容器时,我在安装Flink的
日志
目录中没有看到任何内容(对我来说是
/opt/Flink/log
)。但是,我确实从容器控制台看到了Flink日志。据我所见,Flink运行正常(集群和作业都正常)。啊,好的。我认为“问题”在于docker映像没有记录到日志文件,而是记录到标准输出。也许您也可以采用log4j属性来记录到文件中?当前Docker映像(flink 1.5)也存在同样的问题,您解决了吗?我想知道在哪里设置env.log.dir。我试图在flink-conf.yaml:/opt/flink/log中设置它。但它似乎被完全忽视了。但是当我添加jobmanager.web.log.path:/opt/flink/log/output.log时,webui将至少显示日志。@buddy
env.log.dir
是如果设置了
flink\u log\u dir
环境变量,那么您可以检查是否在您的环境中定义了它。根据您启动Flink的确切方式,它可以在启动脚本中显式设置。
    log4j.rootLogger=INFO, console, file
    # Uncomment this if you want to _only_ change Flink's logging
    #log4j.logger.org.apache.flink=INFO
    # The following lines keep the log level of common libraries/connectors on
    # log level INFO. The root logger does not override this. You have to manually
    # change the log levels here.
    log4j.logger.akka=INFO
    log4j.logger.org.apache.kafka=INFO
    log4j.logger.org.apache.hadoop=INFO
    log4j.logger.org.apache.zookeeper=INFO
    # Log all infos to the console
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%n
    # Log all INFOs to the given rolling file
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.file=/opt/flink/log/output.log
    log4j.appender.file.MaxFileSize=5MB
    log4j.appender.file.MaxBackupIndex=5
    log4j.appender.file.append=true
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%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.apache.flink.shaded.akka.org.jboss.netty.channel.DefaultChannelPipeline=ERROR, console, file
    # General configuration
    taskmanager.data.port: 6121
    taskmanager.rpc.port: 6122
    jobmanager.rpc.port: 6123
    blob.server.port: 6124
    query.server.port: 6125
    jobmanager.rpc.address: <your location>
    jobmanager.heap.size: 1024m
    taskmanager.heap.size: 1024m
    taskmanager.numberOfTaskSlots: 1
    web.log.path: /opt/flink/log/output.log
    taskmanager.log.path: /opt/flink/log/output.log