apache-flink - 在 ververica flink 中启用 JSON 日志记录
问题描述
前言 - 我之前在没有 ververica 的情况下使用 flink,并且能够通过利用 pre entrypoint 脚本下载所需的 jackson 依赖项来设置 log4j JSON 日志记录
问题是 - 对于 ververica,无需构建自定义图像,是否可以启用 json 日志记录?
我尝试使用 JSONLayout 类型的日志,但杰克逊不在类路径中,并且由于某种原因将它们标记为工件对于作业/任务管理器日志来说是不够的
接下来,我尝试了不需要杰克逊或任何其他依赖项的 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 为例。
第 1 步:
准备log4j-layout-template-json-2.14.1.jar(或您使用的任何版本)和 LogstashJsonEventLayoutV1.json(来自https://logging.apache.org/log4j/2.x/手册/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
Step-3 :
在 Deployment 配置页面 (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
Step-4 :
将 LogstashJsonEventLayoutV1.json 添加到 Deployment Artifacts 并在 Deployment 配置页面 (YAML) 下引用它:
spec:
template:
spec:
artifact:
additionalDependencies:
- >-
s3://vvp-lab/artifacts/namespaces/default/LogstashJsonEventLayoutV1.json
第 5 步:
为部署配置日志记录模板:
<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 仅在用户类加载器中可用。Flink 需要这个 jar 在父类加载器中可用,以便格式化日志。您还可以使用自定义图像将此 jar 烘焙到 /flink/lib 目录中。
- 对于Step-4,json 文件可以放在“附加依赖项”中,也可以放在与 jar 文件相同的位置。(但后一个意味着您需要在步骤 5 中使用“classpath:LogstashJsonEventLayoutV1.json”而不是绝对文件路径来引用该 json)
推荐阅读
- jquery - 裁剪器不再裁剪相同的图像,如何重置裁剪器
- c++ - 在 C++ 中处理汉字字符
- sql - MS Access 的一般分录分类帐
- react-native - 无法创建 react-native 项目
- javascript - 如何将jqxscheduler拖到日历外
- python - Odoo:如何在 Transient.Model 中创建许多记录?
- jquery - jquery在悬停时对不同元素的相同操作
- active-directory - 使用 WSO2 apim 的登录名访问 Active Directory 时登录失败
- javascript - 如何将函数转换为 JQuery 插件
- docker - 更改 openshift 命名空间的节点选择器的注释