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

时间:2017-05-25 17:16:00

标签: apache-flink

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

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

TaskManager
    Logs
        Fetching TaskManager log failed.
    Stdout
        Fetching TaskManager log failed.

我可以看到可以设置一些配置参数,特别是taskmanager.log.pathjob manager.web.log.pathenv.log.dir。但是,没有提到这些应该是网络可访问路径还是本地路径等。

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

2 个答案:

答案 0 :(得分:1)

我发现的是,如果您正在运行官方的Flink docker容器(https://hub.docker.com/_/flink),则默认情况下会将所有内容吐到控制台上(即,我猜大概是docker最佳实践)。因此,似乎与调整相关的log4j配置为/opt/flink/conf/log4j-console.propertiesjobamanger(s)taskmanager(s)都是这种情况。

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

log4j-console.properties:

    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

以上内容与下面的flink-conf.yaml组合在一起,能够在Jobmanager的“日志”标签中显示Jobmanager的日志,并在Taskmanager的“ Log”标签中显示taksmanager的日志。

flink-conf.yaml:

    # 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

注意:我正在Flink 1.8.0上,在Kubernetes中运行一个小型集群(即,用于工作经理和任务经理的单独的Pod)

答案 1 :(得分:0)

JobManager Web UI远程请求TaskManager日志,因此这些日志不必驻留在共享文件系统上。另一方面,JobManager日志似乎从本地文件系统中读取。

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

只有在JobManager通过TaskManager 请求日志时才会使用

taskmanager.log.path。但是,如果未设置,则会回退到log.file,这会导致正确的目录自动使用。同样,jobmanager.web.log.path在设置log.file时甚至无法使用。

因此,我不认为taskmanager.log.pathjobmanager.web.log.path与生产部署相关,并且不能告诉他们应该如何使用它们(请参阅{{ 3}})。您可以设置env.log.dir来控制日志文件位置,原则上也应该使用Web UI。