本文为您介绍如何配置作业日志输出到对象存储OSS和日志服务SLS。

背景信息

在作业正常运行状态下,如果您需要查看当前作业运行日志,您可以单击Flink UI进行查看。

如果出现以下情况,则您需要配置作业运行日志到外部存储(OSS或SLS)后,启动作业:
  • 您需要查看、搜索和分析作业历史运行日志(系统默认保留最近5 MB大小的运行日志)。
  • Flink UI无法打开,需要查看Job Manager日志定位问题。
    说明
    • 如果Task Manger和Job Manager任意一个启动,日志都会写到SLS或OSS。但Task Manger和Job Manager都没有正常启动时,日志不会被写到SLS或OSS。
    • 如果因为Job Manager和Task Manger都没有正常启动,导致您在OSS上没有找到对应的日志文件,请提交工单

配置单个作业(新建作业)日志输出到OSS

  1. 登录实时计算控制台
  2. 在左侧导航栏上,单击创建作业
  3. 基础配置区域,填写作业信息。
  4. 单击显示高级配置
  5. 日志配置区域,Logging Profile选择为Custom Template
  6. 将以下文本粘贴到输入框中。
    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration xmlns="http://logging.apache.org/log4j/2.0/config" 
    strict="true" packages="com.ververica.platform.logging.appender" status="WARN">  
      <Appenders> 
        <Appender name="StdOut" type="Console"> 
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/> 
        </Appender>  
        <Appender name="RollingFile" type="RollingFile" fileName="${sys:log.file}" filePattern="${sys:log.file}.%i"> 
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/>  
          <Policies> 
            <SizeBasedTriggeringPolicy size="20 MB"/> 
          </Policies>  
          <DefaultRolloverStrategy max="4"/> 
        </Appender>  
        <Appender name="OSS" type="OSS">
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/>  
          
          <!-- The final effective log path is: ${baseUri}/logs/${namespace}/${deploymentId}/{jobId}/ -->
          <Property name="namespace">{{ namespace }}</Property> <!-- Do not modify this line -->
          <Property name="baseUri">oss://YOUR-BUCKET-NAME/</Property>
          <Property name="endpoint">YOUR-ENDPOINT</Property> 
          <Property name="flushIntervalSeconds">10</Property>  
          <Property name="flushIntervalEventCount">100</Property>  
          <Property name="rollingBytes">10485760</Property>  
        </Appender>
      </Appenders>  
      <Loggers> 
        <Logger level="INFO" name="org.apache.hadoop"/>  
        <Logger level="INFO" name="org.apache.kafka"/>  
        <Logger level="INFO" name="org.apache.zookeeper"/>  
        <Logger level="INFO" name="akka"/>  
        <Logger level="ERROR" name="org.jboss.netty.channel.DefaultChannelPipeline"/>  
        <Logger level="OFF" name="org.apache.flink.runtime.rest.handler.job.JobDetailsHandler"/> 
        {%- for name, level in userConfiguredLoggers -%} 
          <Logger level="{{ level }}" name="{{ name }}"/> 
        {%- endfor -%}
        <Root level="{{ rootLoggerLogLevel }}"> 
          <AppenderRef ref="StdOut"/>
          <AppenderRef ref="RollingFile"/>  
          <AppenderRef ref="OSS"/> 
        </Root>
      </Loggers> 
    </Configuration>
  7. 在自定义模板输入框中,修改以下2个参数为您OSS Bucket信息。
    参数 说明
    YOUR-BUCKET-NAME Bucket名称。
    YOUR-ENDPOINT OSS的Endpoint(ECS的VPC网络访问(内网) 所在行的Endpoint(地域节点)信息)。
  8. 在页面右下角,单击创建作业
  9. 在左侧导航栏上,单击 作业列表
  10. 单击目标作业名称操作列的启动
    您可以在OSS控制台查看作业日志,详情请参见在OSS上查看作业日志

配置单个作业(已有作业)日志输出到OSS

  1. 登录实时计算控制台
  2. 在左侧导航栏上,单击 作业列表
  3. 单击目标作业名称。
  4. 在作业详情页面右上角,单击编辑
  5. 单击显示高级配置
  6. 日志配置区域,Logging Profile选择为Custom Template
  7. 将以下文本粘贴到自定义模板的输入框中。
    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration xmlns="http://logging.apache.org/log4j/2.0/config" 
    strict="true" packages="com.ververica.platform.logging.appender" status="WARN">  
      <Appenders> 
        <Appender name="StdOut" type="Console"> 
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/> 
        </Appender>  
        <Appender name="RollingFile" type="RollingFile" fileName="${sys:log.file}" filePattern="${sys:log.file}.%i"> 
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/>  
          <Policies> 
            <SizeBasedTriggeringPolicy size="20 MB"/> 
          </Policies>  
          <DefaultRolloverStrategy max="4"/> 
        </Appender>  
        <Appender name="OSS" type="OSS">
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/>  
          
          <!-- The final effective log path is: ${baseUri}/logs/${namespace}/${deploymentId}/{jobId}/ -->
          <Property name="namespace">{{ namespace }}</Property> <!-- Do not modify this line -->
          <Property name="baseUri">oss://YOUR-BUCKET-NAME/</Property>
          <Property name="endpoint">YOUR-ENDPOINT</Property> 
          <Property name="flushIntervalSeconds">10</Property>  
          <Property name="flushIntervalEventCount">100</Property>  
          <Property name="rollingBytes">10485760</Property>  
        </Appender>
      </Appenders>  
      <Loggers> 
        <Logger level="INFO" name="org.apache.hadoop"/>  
        <Logger level="INFO" name="org.apache.kafka"/>  
        <Logger level="INFO" name="org.apache.zookeeper"/>  
        <Logger level="INFO" name="akka"/>  
        <Logger level="ERROR" name="org.jboss.netty.channel.DefaultChannelPipeline"/>  
        <Logger level="OFF" name="org.apache.flink.runtime.rest.handler.job.JobDetailsHandler"/> 
        {%- for name, level in userConfiguredLoggers -%} 
          <Logger level="{{ level }}" name="{{ name }}"/> 
        {%- endfor -%}
        <Root level="{{ rootLoggerLogLevel }}"> 
          <AppenderRef ref="StdOut"/>
          <AppenderRef ref="RollingFile"/>  
          <AppenderRef ref="OSS"/> 
        </Root>
      </Loggers> 
    </Configuration>
  8. 在自定义模板输入框中,修改以下2个参数为您OSS Bucket信息。
    参数 说明
    YOUR-BUCKET-NAME Bucket名称。
    YOUR-ENDPOINT OSS的Endpoint(ECS的VPC网络访问(内网) 所在行的Endpoint(地域节点)信息)。
  9. 单击保存
  10. 在左侧导航栏上,单击 作业列表
  11. 单击目标作业名称操作列的启动
    您可以在OSS控制台查看作业日志,详情请参见在OSS上查看作业日志

配置工作空间下所有作业日志输出到OSS

您可以通过配置作业模板的方式,配置工作空间下所有作业日志默认输出到OSS。

  1. 登录实时计算控制台
  2. 在左侧导航栏上,单击 作业模板
  3. 日志配置区域,Logging Profile选择为Custom Template
  4. 将以下文本粘贴到自定义模板的输入框中。
    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration xmlns="http://logging.apache.org/log4j/2.0/config" 
    strict="true" packages="com.ververica.platform.logging.appender" status="WARN">  
      <Appenders> 
        <Appender name="StdOut" type="Console"> 
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/> 
        </Appender>  
        <Appender name="RollingFile" type="RollingFile" fileName="${sys:log.file}" filePattern="${sys:log.file}.%i"> 
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/>  
          <Policies> 
            <SizeBasedTriggeringPolicy size="20 MB"/> 
          </Policies>  
          <DefaultRolloverStrategy max="4"/> 
        </Appender>  
        <Appender name="OSS" type="OSS">
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/>  
          
          <!-- The final effective log path is: ${baseUri}/logs/${namespace}/${deploymentId}/{jobId}/ -->
          <Property name="namespace">{{ namespace }}</Property> <!-- Do not modify this line -->
          <Property name="baseUri">oss://YOUR-BUCKET-NAME/</Property>
          <Property name="endpoint">YOUR-ENDPOINT</Property> 
          <Property name="flushIntervalSeconds">10</Property>  
          <Property name="flushIntervalEventCount">100</Property>  
          <Property name="rollingBytes">10485760</Property>  
        </Appender>
      </Appenders>  
      <Loggers> 
        <Logger level="INFO" name="org.apache.hadoop"/>  
        <Logger level="INFO" name="org.apache.kafka"/>  
        <Logger level="INFO" name="org.apache.zookeeper"/>  
        <Logger level="INFO" name="akka"/>  
        <Logger level="ERROR" name="org.jboss.netty.channel.DefaultChannelPipeline"/>  
        <Logger level="OFF" name="org.apache.flink.runtime.rest.handler.job.JobDetailsHandler"/> 
        {%- for name, level in userConfiguredLoggers -%} 
          <Logger level="{{ level }}" name="{{ name }}"/> 
        {%- endfor -%}
        <Root level="{{ rootLoggerLogLevel }}"> 
          <AppenderRef ref="StdOut"/>
          <AppenderRef ref="RollingFile"/>  
          <AppenderRef ref="OSS"/> 
        </Root>
      </Loggers> 
    </Configuration>
  5. 在自定义模板输入框中,修改以下2个参数为您OSS Bucket信息。
    参数 说明
    YOUR-BUCKET-NAME Bucket名称。
    YOUR-ENDPOINT OSS的Endpoint(ECS的VPC网络访问(内网) 所在行的Endpoint(地域节点)信息)。
  6. 单击保存
    说明 配置作业模板后,后续该工作空间下创建的所有作业的日志都会被存储到OSS。您可以在OSS控制台查看作业日志,详情请参见在OSS上查看作业日志

配置单个作业(新建作业)日志输出到SLS

  1. 登录实时计算控制台
  2. 在左侧导航栏上,单击作业管理 > 创建作业
  3. 高级页签,填写作业基本信息行为配置等信息,详情请参见提交
  4. 日志模板选择为自定义
  5. 将以下文本粘贴到自定义模板的输入框中。
    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration xmlns="http://logging.apache.org/log4j/2.0/config" 
    strict="true" packages="com.ververica.platform.logging.appender" status="WARN">  
      <Appenders> 
        <Appender name="StdOut" type="Console"> 
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/> 
        </Appender>  
        <Appender name="RollingFile" type="RollingFile" fileName="${sys:log.file}" filePattern="${sys:log.file}.%i"> 
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/>  
          <Policies> 
            <SizeBasedTriggeringPolicy size="5 MB"/> 
          </Policies>  
          <DefaultRolloverStrategy max="1"/> 
        </Appender>  
        <Appender name="SLS" type="SLS">
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/>  
    
          <!-- The final effective log path is: ${baseUri}/logs/${namespace}/${deploymentId}/{jobId}/ -->
          <Property name="namespace">{{ namespace }}</Property> <!-- Do not modify this line -->
          <Property name="project">YOUR-SLS-PROJECT</Property>  
          <Property name="logStore">YOUR-SLS-LOGSTORE</Property> 
          <Property name="endpoint">YOUR-SLS-ENDPOINT</Property> 
          <Property name="accessKeyId">YOUR-SLS-ACCESSKEYID</Property> 
          <Property name="accessKeySecret">YOUR-SLS-ACCESSKEYSECRET</Property> 
          <Property name="topic">{{ namespace }}:{{ deploymentId }}:{{ jobId }}</Property> 
          <Property name="flushIntervalSeconds">10</Property>
          <Property name="flushIntervalEventCount">100</Property>
        </Appender>
      </Appenders>  
      <Loggers> 
        <Logger level="INFO" name="org.apache.hadoop"/>  
        <Logger level="INFO" name="org.apache.kafka"/>  
        <Logger level="INFO" name="org.apache.zookeeper"/>  
        <Logger level="INFO" name="akka"/>  
        <Logger level="ERROR" name="org.jboss.netty.channel.DefaultChannelPipeline"/>  
        <Logger level="OFF" name="org.apache.flink.runtime.rest.handler.job.JobDetailsHandler"/> 
        {%- for name, level in userConfiguredLoggers -%} 
          <Logger level="{{ level }}" name="{{ name }}"/> 
        {%- endfor -%}
        <Root level="{{ rootLoggerLogLevel }}"> 
          <AppenderRef ref="StdOut"/>
          <AppenderRef ref="RollingFile"/>  
          <AppenderRef ref="SLS"/> 
        </Root>
      </Loggers> 
    </Configuration>
  6. 自定义模板输入框中,修改以下5个参数。
    文件夹 说明
    YOUR-SLS-PROJECT 替换成您SLS的Project名称。
    YOUR-SLS-LOGSTORE 替换成您SLS的Logstore名称。
    YOUR-SLS-ENDPOINT 替换成您SLS所在地域的Endpoint,详情请参见服务入口
    YOUR-SLS-ACCESSKEYID 替换成您开通Flink全托管服务账号的AccessKey ID
    YOUR-SLS-ACCESSKEYSECRET 替换成您开通Flink全托管服务账号的AccessKey Secret
    说明
    • 请确保您所使用的AccessKey IDAccessKey Secret是您开通Flink全托管所使用账号下管理的密钥对。
    • 请确保您开通Flink全托管服务所使用的账号,有读写该SLS项目的权限。
  7. 在自定义模板输入框中,修改以下2个参数。
    参数 说明
    YOUR-BUCKET-NAME 替换成您oss的BUCKET名称。
    YOUR-ENDPOINT 替换成您ECS的VPC网络访问(内网)的endpoint。
  8. 在页面右下角,单击创建
  9. 在左侧导航栏上,单击作业管理 > 作业列表
  10. 单击目标作业名称。
  11. 在作业详情页面,单击启动
    您可以在SLS控制台查看作业日志,详情请参见在SLS上查看作业日志

配置单个作业(已有作业)日志输出到SLS

  1. 登录实时计算控制台
  2. 在左侧导航栏上,单击作业管理 > 作业列表
  3. 单击目标作业名称。
  4. 在作业详情页面,单击配置作业
  5. 高级页签,日志模板选择为自定义模板
  6. 将以下文本粘贴到自定义模板的输入框中。
    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration xmlns="http://logging.apache.org/log4j/2.0/config" 
    strict="true" packages="com.ververica.platform.logging.appender" status="WARN">  
      <Appenders> 
        <Appender name="StdOut" type="Console"> 
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/> 
        </Appender>  
        <Appender name="RollingFile" type="RollingFile" fileName="${sys:log.file}" filePattern="${sys:log.file}.%i"> 
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/>  
          <Policies> 
            <SizeBasedTriggeringPolicy size="5 MB"/> 
          </Policies>  
          <DefaultRolloverStrategy max="1"/> 
        </Appender>  
        <Appender name="SLS" type="SLS">
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/>  
    
          <!-- The final effective log path is: ${baseUri}/logs/${namespace}/${deploymentId}/{jobId}/ -->
          <Property name="namespace">{{ namespace }}</Property> <!-- Do not modify this line -->
          <Property name="project">YOUR-SLS-PROJECT</Property>  
          <Property name="logStore">YOUR-SLS-LOGSTORE</Property> 
          <Property name="endpoint">YOUR-SLS-ENDPOINT</Property> 
          <Property name="accessKeyId">YOUR-SLS-ACCESSKEYID</Property> 
          <Property name="accessKeySecret">YOUR-SLS-ACCESSKEYSECRET</Property> 
          <Property name="topic">{{ namespace }}:{{ deploymentId }}:{{ jobId }}</Property> 
          <Property name="flushIntervalSeconds">10</Property>
          <Property name="flushIntervalEventCount">100</Property>
        </Appender>
      </Appenders>  
      <Loggers> 
        <Logger level="INFO" name="org.apache.hadoop"/>  
        <Logger level="INFO" name="org.apache.kafka"/>  
        <Logger level="INFO" name="org.apache.zookeeper"/>  
        <Logger level="INFO" name="akka"/>  
        <Logger level="ERROR" name="org.jboss.netty.channel.DefaultChannelPipeline"/>  
        <Logger level="OFF" name="org.apache.flink.runtime.rest.handler.job.JobDetailsHandler"/> 
        {%- for name, level in userConfiguredLoggers -%} 
          <Logger level="{{ level }}" name="{{ name }}"/> 
        {%- endfor -%}
        <Root level="{{ rootLoggerLogLevel }}"> 
          <AppenderRef ref="StdOut"/>
          <AppenderRef ref="RollingFile"/>  
          <AppenderRef ref="SLS"/> 
        </Root>
      </Loggers> 
    </Configuration>
  7. 自定义模板输入框中,修改以下5个参数。
    文件夹 说明
    YOUR-SLS-PROJECT 替换成您SLS的Project名称。
    YOUR-SLS-LOGSTORE 替换成您SLS的Logstore名称。
    YOUR-SLS-ENDPOINT 替换成您SLS所在地域的Endpoint,详情请参见服务入口
    YOUR-SLS-ACCESSKEYID 替换成您开通Flink全托管服务账号的AccessKey ID
    YOUR-SLS-ACCESSKEYSECRET 替换成您开通Flink全托管服务账号的AccessKey Secret
    说明
    • 请确保您所使用的AccessKey IDAccessKey Secret是您开通Flink全托管所使用账号下管理的密钥对。
    • 请确保您开通Flink全托管服务所使用的账号,有读写该SLS项目的权限。
  8. 单击保存
  9. 在左侧导航栏上,单击作业管理 > 作业列表
  10. 单击目标作业名称。
  11. 在作业详情页面,单击启动
    您可以在SLS控制台查看作业日志,详情请参见在SLS上查看作业日志

配置工作空间下所有作业日志输出到SLS

您可以通过配置作业模板的方式,配置工作空间下所有作业日志默认输出到SLS。

  1. 登录实时计算控制台
  2. 在左侧导航栏,单击系统管理 > 作业模板
  3. 高级页签,日志模板选择为自定义模板
  4. 将以下文本粘贴到自定义模板的输入框中。
    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration xmlns="http://logging.apache.org/log4j/2.0/config" 
    strict="true" packages="com.ververica.platform.logging.appender" status="WARN">  
      <Appenders> 
        <Appender name="StdOut" type="Console"> 
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/> 
        </Appender>  
        <Appender name="RollingFile" type="RollingFile" fileName="${sys:log.file}" filePattern="${sys:log.file}.%i"> 
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/>  
          <Policies> 
            <SizeBasedTriggeringPolicy size="5 MB"/> 
          </Policies>  
          <DefaultRolloverStrategy max="1"/> 
        </Appender>  
        <Appender name="SLS" type="SLS">
          <Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+8} %-5p %-60c %x - %m%n" type="PatternLayout"/>  
    
          <!-- The final effective log path is: ${baseUri}/logs/${namespace}/${deploymentId}/{jobId}/ -->
          <Property name="namespace">{{ namespace }}</Property> <!-- Do not modify this line -->
          <Property name="project">YOUR-SLS-PROJECT</Property>  
          <Property name="logStore">YOUR-SLS-LOGSTORE</Property> 
          <Property name="endpoint">YOUR-SLS-ENDPOINT</Property> 
          <Property name="accessKeyId">YOUR-SLS-ACCESSKEYID</Property> 
          <Property name="accessKeySecret">YOUR-SLS-ACCESSKEYSECRET</Property> 
          <Property name="topic">{{ namespace }}:{{ deploymentId }}:{{ jobId }}</Property> 
          <Property name="flushIntervalSeconds">10</Property>
          <Property name="flushIntervalEventCount">100</Property>
        </Appender>
      </Appenders>  
      <Loggers> 
        <Logger level="INFO" name="org.apache.hadoop"/>  
        <Logger level="INFO" name="org.apache.kafka"/>  
        <Logger level="INFO" name="org.apache.zookeeper"/>  
        <Logger level="INFO" name="akka"/>  
        <Logger level="ERROR" name="org.jboss.netty.channel.DefaultChannelPipeline"/>  
        <Logger level="OFF" name="org.apache.flink.runtime.rest.handler.job.JobDetailsHandler"/> 
        {%- for name, level in userConfiguredLoggers -%} 
          <Logger level="{{ level }}" name="{{ name }}"/> 
        {%- endfor -%}
        <Root level="{{ rootLoggerLogLevel }}"> 
          <AppenderRef ref="StdOut"/>
          <AppenderRef ref="RollingFile"/>  
          <AppenderRef ref="SLS"/> 
        </Root>
      </Loggers> 
    </Configuration>
  5. 自定义模板输入框中,修改以下5个参数。
    文件夹 说明
    YOUR-SLS-PROJECT 替换成您SLS的Project名称。
    YOUR-SLS-LOGSTORE 替换成您SLS的Logstore名称。
    YOUR-SLS-ENDPOINT 替换成您SLS所在地域的Endpoint,详情请参见服务入口
    YOUR-SLS-ACCESSKEYID 替换成您开通Flink全托管服务账号的AccessKey ID
    YOUR-SLS-ACCESSKEYSECRET 替换成您开通Flink全托管服务账号的AccessKey Secret
    说明
    • 请确保您所使用的AccessKey IDAccessKey Secret是您开通Flink全托管所使用账号下管理的密钥对。
    • 请确保您开通Flink全托管服务所使用的账号,有读写该SLS项目的权限。
  6. 单击保存更改
    说明 配置作业模板后,后续该工作空间下创建的所有作业的日志都会被存储到您配置的SLS项目下的Logstore。您可以在SLS控制台查看作业日志,详情请参见在SLS上查看作业日志