在 ververica flink 中启用 JSON 登录
Enabling JSON logging in ververica flink
前言 - 我之前在没有 ververica 的情况下使用 flink,并且能够通过利用入口点前脚本下载所需的 jackson 依赖项来设置 log4j JSON 日志记录
问题是 - 对于 ververica,如果不构建自定义图像,是否可以启用 json 日志记录?
我尝试使用 JSON 布局类型的日志,但 jackson 不在 class 路径中,并且出于某种原因将它们标记为工件对于 job/task 管理器日志来说是不够的
接下来,我尝试了不需要 jackson 或任何其他依赖项的 JsonTemplateLayout,但它看起来像 EcsLayout.json 或 LogstashJsonEventLayoutV1.json 等布局也不存在
我的日志记录配置附在下面,它与默认配置相同但更改了 rollingFile appender 布局
我是不是遗漏了什么或者这需要创建自定义图像吗?
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Configuration xmlns="http://logging.apache.org/log4j/2.0/config" strict="true">
<Appenders>
<Appender name="StdOut" type="Console">
<Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%n" type="PatternLayout"/>
</Appender>
<Appender name="RollingFile" type="RollingFile" fileName="${sys:log.file}" filePattern="${sys:log.file}.%i">
<JsonTemplateLayout eventTemplateUri="classpath:EcsLayout.json"/>
<Policies>
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<DefaultRolloverStrategy max="5"/>
</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"/>
</Root>
</Loggers>
</Configuration>
是的,您可以在 Ververica 平台中使用 JSON 没有自定义图像的日志记录。我以JsonTemplateLayout为例
第一步:
准备 log4j-layout-template-json-2.14.1.jar(或您使用的任何版本)和 LogstashJsonEventLayoutV1.json(来自 https://logging.apache.org/log4j/2.x/manual/json-template-layout.html)
第 2 步:
使用 k8s 命名空间中的 log4j-layout-template-json-2.14.1.jar 从 configmap 创建一个 k8s 卷,您将在其中 运行工作:
kubectl create configmap jsonlogging --from-file=log4j-layout-template-json-2.14.1.jar -n vvp-ops-jobs
第三步:
在部署配置页面 (YAML) 中,为 json 模板 jar 添加卷装载(在 spec.template.spec.kubernetes 下):
pods:
volumeMounts:
- name: jsonlogging
volume:
configMap:
name: jsonlogging
name: jsonlogging
volumeMount:
mountPath: /flink/lib/log4j-layout-template-json-2.14.1.jar
name: jsonlogging
subPath: log4j-layout-template-json-2.14.1.jar
第四步:
将 LogstashJsonEventLayoutV1.json 添加到 Deployment Artifacts 并在部署配置页面 (YAML) 下引用它:
spec:
template:
spec:
artifact:
additionalDependencies:
- >-
s3://vvp-lab/artifacts/namespaces/default/LogstashJsonEventLayoutV1.json
第五步:
为 Deployment 配置日志记录模板:
<Appender name="RollingFile" type="RollingFile" fileName="${sys:log.file}" filePattern="${sys:log.file}.%i">
<Layout type="JsonTemplateLayout" eventTemplateUri="file:///flink/usrlib/LogstashJsonEventLayoutV1.json" />
<Policies>
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<DefaultRolloverStrategy max="1"/>
</Appender>
备注:
- 对于 Step-2 和 Step-3,您不能仅将此 jar 添加为部署的附加依赖项,因为jar 将仅在用户 class 加载程序中可用。 Flink 需要这个 jar 在父 class 加载器中可用,以便格式化日志。您还可以将此 jar 放入带有自定义图像的 /flink/lib 目录中。
- 对于Step-4,json 文件可以放在'additional dependencies' 中或与jar 文件相同的位置。 (但后者意味着您需要在第 5 步中使用 'classpath:LogstashJsonEventLayoutV1.json' 而不是绝对文件路径来引用 json)
前言 - 我之前在没有 ververica 的情况下使用 flink,并且能够通过利用入口点前脚本下载所需的 jackson 依赖项来设置 log4j JSON 日志记录
问题是 - 对于 ververica,如果不构建自定义图像,是否可以启用 json 日志记录?
我尝试使用 JSON 布局类型的日志,但 jackson 不在 class 路径中,并且出于某种原因将它们标记为工件对于 job/task 管理器日志来说是不够的
接下来,我尝试了不需要 jackson 或任何其他依赖项的 JsonTemplateLayout,但它看起来像 EcsLayout.json 或 LogstashJsonEventLayoutV1.json 等布局也不存在
我的日志记录配置附在下面,它与默认配置相同但更改了 rollingFile appender 布局
我是不是遗漏了什么或者这需要创建自定义图像吗?
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Configuration xmlns="http://logging.apache.org/log4j/2.0/config" strict="true">
<Appenders>
<Appender name="StdOut" type="Console">
<Layout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%n" type="PatternLayout"/>
</Appender>
<Appender name="RollingFile" type="RollingFile" fileName="${sys:log.file}" filePattern="${sys:log.file}.%i">
<JsonTemplateLayout eventTemplateUri="classpath:EcsLayout.json"/>
<Policies>
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<DefaultRolloverStrategy max="5"/>
</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"/>
</Root>
</Loggers>
</Configuration>
是的,您可以在 Ververica 平台中使用 JSON 没有自定义图像的日志记录。我以JsonTemplateLayout为例
第一步:
准备 log4j-layout-template-json-2.14.1.jar(或您使用的任何版本)和 LogstashJsonEventLayoutV1.json(来自 https://logging.apache.org/log4j/2.x/manual/json-template-layout.html)
第 2 步:
使用 k8s 命名空间中的 log4j-layout-template-json-2.14.1.jar 从 configmap 创建一个 k8s 卷,您将在其中 运行工作:
kubectl create configmap jsonlogging --from-file=log4j-layout-template-json-2.14.1.jar -n vvp-ops-jobs
第三步:
在部署配置页面 (YAML) 中,为 json 模板 jar 添加卷装载(在 spec.template.spec.kubernetes 下):
pods:
volumeMounts:
- name: jsonlogging
volume:
configMap:
name: jsonlogging
name: jsonlogging
volumeMount:
mountPath: /flink/lib/log4j-layout-template-json-2.14.1.jar
name: jsonlogging
subPath: log4j-layout-template-json-2.14.1.jar
第四步:
将 LogstashJsonEventLayoutV1.json 添加到 Deployment Artifacts 并在部署配置页面 (YAML) 下引用它:
spec:
template:
spec:
artifact:
additionalDependencies:
- >-
s3://vvp-lab/artifacts/namespaces/default/LogstashJsonEventLayoutV1.json
第五步:
为 Deployment 配置日志记录模板:
<Appender name="RollingFile" type="RollingFile" fileName="${sys:log.file}" filePattern="${sys:log.file}.%i">
<Layout type="JsonTemplateLayout" eventTemplateUri="file:///flink/usrlib/LogstashJsonEventLayoutV1.json" />
<Policies>
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<DefaultRolloverStrategy max="1"/>
</Appender>
备注:
- 对于 Step-2 和 Step-3,您不能仅将此 jar 添加为部署的附加依赖项,因为jar 将仅在用户 class 加载程序中可用。 Flink 需要这个 jar 在父 class 加载器中可用,以便格式化日志。您还可以将此 jar 放入带有自定义图像的 /flink/lib 目录中。
- 对于Step-4,json 文件可以放在'additional dependencies' 中或与jar 文件相同的位置。 (但后者意味着您需要在第 5 步中使用 'classpath:LogstashJsonEventLayoutV1.json' 而不是绝对文件路径来引用 json)