Flink日志收集到数据库/kafka

引言

我们做项目过程中发现flink日志不同模式启动,存放位置不同,查找任务日志很不方便,具体问题如下:

  1. 原始flink的日志配置文件log4j-cli.properties appender.file.append = false,取消追加,直接覆盖掉上一次提交任务的信息。这里改为true解决。
  2. application模式启动任务失败/取消后,无法找到错误日志,需要用命令查找对应appId yarn application -appId <Application ID>
  3. flink session模式重启集群,导致之前提交任务信息全部删除,开启历史服务器:historyserver.archive.fs.dir: hdfs:///completed-jobs/,其他配置参考官方文档

这些问题虽然都找到了对应的解决办法,但是仍然很不方便。所有我决定研究flink的log配置文件,将所有log写入数据库/kafka中。

在查找资料中发现log4j2配置都是xml方式,而flink是以properties的配置方式,网上也没有properties方式配置JDBCAppender的资料。注:log4j2在低版本是不支持properties的

log4j2.properties写数据库

先看官网,这里介绍了flink conf目录下的每个配置文件的作用,这里我们针对log4j2修改,logback 这里没有涉及,可以自行查看官网配置。
我们准备收集到所有相关日志,所以这四个文件都需要配置JDBCAppender。
在这里插入图片描述
我这里是连接的是mysql,将mysql-connector-java-8.0.28.jar放在lib目录下,
官方支持一下四种模式,以DriverManager为示例
在这里插入图片描述

rootLogger.appenderRef.jdbc.ref=JDBCAppender
appender.jdbc.name=JDBCAppender
appender.jdbc.type=JDBC
appender.jdbc.tableName=flink_logs
appender.jdbc.connectionSource.type=DriverManager
appender.jdbc.connectionSource.connectionString=jdbc:mysql://ip:port/database
appender.jdbc.connectionSource.userName=root
appender.jdbc.connectionSource.password=root
appender.jdbc.columnConfigs1.type=Column
appender.jdbc.columnConfigs1.name=source
appender.jdbc.columnConfigs1.pattern=%c
appender.jdbc.columnConfigs2.type=Column
appender.jdbc.columnConfigs2.name=type
appender.jdbc.columnConfigs2.pattern=%p
appender.jdbc.columnConfigs3.type=Column
appender.jdbc.columnConfigs3.name=create_time
appender.jdbc.columnConfigs3.pattern=%d{yyyy-MM-dd HH:mm:ss,SSS}
appender.jdbc.columnConfigs4.type=Column
appender.jdbc.columnConfigs4.name=massage
appender.jdbc.columnConfigs4.pattern=%m %throwable

JDBCAppender更多详细配置

log4j2.properties写kafka

将kafka-client.jar放在lib目录下,
官方具体配置说明:
在这里插入图片描述

rootLogger.appenderRef.kafka.ref=KafkaAppender
appender.kafka.name=KafkaAppender
appender.kafka.type=Kafka
appender.kafka.syncSend=true
appender.kafka.ignoreExceptions=false
appender.kafka.topic=flink_log_test
appender.kafka.property.type=Property
appender.kafka.property.name=bootstrap.servers
appender.kafka.property.value=ip:9092
appender.kafka.layout.type = PatternLayout
appender.kafka.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%n

进阶

完成以上操作我们已经可以将日志写入mysql/kafka中了,但是我发现所有日志写入后,无法区分集群,任务分别是那些了,当然可以在配置中每一个配置文件写入不同的表,但是job任务如何区分呢?
我们可以设置环境变量或系统环境变量,让log4j从中获取自定义值
更详细内容参考官方地址
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/140870.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

半导体即国家,日本做了啥?最大的 AI 模型并不十分透明;特斯拉安全数据报告缺失近一年丨 RTE 开发者日报 Vol.70

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」&#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

【Java】ArrayList集合使用

ArrayList集合常见方法 方法名称说明public boolean add(E e)将元素插入到指定位置的arraylist中&#xff0c;返回值&#xff1a;返回boolean类型public E remove(int index)删除 arraylist里的单个元素&#xff0c;返回值&#xff1a;返回删除之前的元素public E set(int inde…

Jetty框架--主要用来处理客户端发送来的http请求,这个框架很轻量级,很灵活,适合做没有客户端,只处理http请求的业务

Jetty框架–主要用来处理客户端发送来的http请求&#xff0c;这个框架很轻量级&#xff0c;很灵活&#xff0c;适合做没有客户端&#xff0c;只处理http请求的业务 依赖 看下使用这个框架的pom依赖&#xff0c;如下&#xff1a; <?xml version"1.0" encoding&…

【vue2.x】如何快速实现每个月倒计时

代码一 //获取这个月最后一天getLastDay(){var year new Date().getFullYear(); //获取年份var month new Date().getMonth() 1; //获取月份var lastDate new Date(year, month , 0).getDate(); //获取当月最后一日month month < 10 ? 0 month : month ; //月份补 0…

[PyTorch]即插即用的热力图生成

先上张效果图&#xff0c;本来打算移植霹雳老师的使用Pytorch实现Grad-CAM并绘制热力图。但是看了下代码&#xff0c;需要骨干网络按照标准写法&#xff08;即将特征层封装为features数组&#xff09;&#xff0c;而我写的网络图省事并没有进行封装&#xff0c;改造网络的代价又…

UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)

在UML类图中&#xff0c;常见的有以下几种关系: 泛化&#xff08;Generalization&#xff09;, 实现&#xff08;Realization&#xff09;&#xff0c;关联&#xff08;Association)&#xff0c;聚合&#xff08;Aggregation&#xff09;&#xff0c;组合(Composition)&#x…

视频剪辑SDK,实现高效的移动端视频编辑

为了满足企业对视频编辑的需求&#xff0c;美摄提供了iOS/Android端视频编辑SDK技术开发服务&#xff0c;帮助企业快速高效地制作高质量视频。本文将详细介绍美摄的视频编辑SDK的优势和特点&#xff0c;以及如何为企业提供技术解决方案。 随着智能手机的普及和移动互联网的发展…

分享一个基于Python+Django的高校食堂外卖点餐系统的设计实现(源码、调试、开题、lw、ppt)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…

ESP32集成开发环境Espressif-IDE安装 – Windows

陈拓 2023/10/15-2023/10/16 1. 概述 Espressif IDE是一个基于Eclipse CDT的集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于使用ESP-IDF框架开发物联网应用程序。这是一个专门为ESP-IDF构建的独立定制IDE。Espressif IDE附带了IDF Eclipse插件、重要的Eclipse CDT插…

深度学习 | CNN卷积核与通道

10.1、单通道卷积 以单通道卷积为例&#xff0c;输入为&#xff08;1,5,5&#xff09;&#xff0c;分别表示1个通道&#xff0c;宽为5&#xff0c;高为5。 假设卷积核大小为3x3&#xff0c;padding0&#xff0c;stride1。 运算过程&#xff1a; 不断的在图像上进行遍历&#…

arrow(c++)改写empyrical系列1---用arrow读取基金净值数据并计算夏普率

用arrow c版本读取了csv中的基金净值数据&#xff0c;然后计算了夏普率&#xff0c;比较尴尬的是&#xff0c;arrow c版本计算耗费的时间却比python的empyrical版本耗费时间多。。。 arrow新手上路&#xff0c;第一次自己去实现功能&#xff0c;实现的大概率并不是最高效的方…

java击球小游戏运行代码

创建一个图形化的小游戏通常需要使用Java图形库&#xff0c;例如Swing或JavaFX。下面是一个使用JavaFX创建的简单的图形化小游戏示例&#xff0c;其中一个小球会在窗口内移动&#xff0c;你需要点击小球以增加得分&#xff1a; import javafx.application.Application; import…