服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

如何收集 Yarn/K8s 集群中的 Flink 任务日志?

日期: 来源:zhisheng收集编辑:zhisheng

背景

不管是 Flink On Yarn 还是 On k8s,如果任务正常运行,我们是可以通过 Flink Web UI 去查看 JobManager 和 TaskManager 日志,虽然日志量大的时候去不同的 TaskManager 找日志有点困难(如何快速知道日志在哪个 TaskManager 上;在 TaskManager 里面可能有多个滚动的日志文件,如何快速找到 root cause 异常;如果 TaskManager OOM 掉了该容器的日志就看不到了),但是起码给了一个可以看日志的途径。

熟悉 Flink On Yarn 的应该知道 Flink 任务运行结束/失败后,只能去 Yarn UI 看到任务的 Jobmanager 日志,对于 TaskManager 日志这些是看不到的,这对于有时候想排查下任务失败的原因日志会比较困难(不过大多数任务挂掉的原因日志都会在 Jobmanager 存在)。

熟悉 Flink On K8s 的那更能体验到查看日志的痛苦了,在任务运行失败和结束后,所有的 Pod 都会退出,如果没有收集这些运行日志,那几乎很难知道任务为啥会失败。

Flink History Server 不像 Spark History Server 一样可以看到任务所有运行的 Excutor 日志,所以对于故障定位 Flink 任务异常日志这个场景,Flink 自带的那些体验不是很友好。因此也有本文的出现,来讲述一下如何针对上面两种运行模式下 Flink 任务的日志收集,来解决我们不方便定位任务异常失败的需求。

当然了,我们收集到这些日志数据后,可以用来做异常日志告警提醒任务负责人作业异常信息(这个后面可以专门开篇文章来写),也可以收集起来存储到 ES,方便用户排查任务异常日志。

方案选择

常见的收集日志方案有下面两种:

1、统一 LogAgent 收集。不管是使用 Flink On Yarn 还是 Flink On K8s,日志都可以配置一个路径(路径有规则),然后每台计算节点机器专门部署一个 LogAgent (比如有 Filebeat)去收集这些运行日志。K8s 的话会比 Yarn 的日志要收集的话稍微会复杂一些,需要 Flink 任务挂载磁盘,这样日志文件数据路径比较固定,否则日志文件是在容器 Pod 内,会随着 Pod 的生命周期而消失。这种方式需要在每台机器都部署一个专门用来收集日志的 Agent,还要额外维护它的稳定性,不然可能会漏收集到任务的日志。

2、自定义 Kafka Appender。这种方式要根据日志框架进行自定义一个 Appender,将定义好的 Appender 打包后放到 Flink lib 目录,然后配置好 log4j 配置,任务启动后会自动加载这个依赖,运行过程中会自动实时将日志发送到 Kafka。这个 Appender 定义可以比较灵活(具体的可以看下文的代码实现),比如加入一些过滤条件:只收集 warn 级别以上的日志(因为任务多了的话收集所有的级别日志数据量会很大,但是对排查问题带来的作用有限)。这种方式和任务运行在 Yarn 和 K8s 无关,都可以正常收集日志,不用单独配置,也不用单独去维护什么组件的稳定性,唯一的缺点就是对已经在运行的任务如果想要收集日志需要重启一下即可,相比来说我个人觉得还是这种方式会比较合适。

整个架构如上,你理解图中的 Reporter 包含三个:第一个是自定义的 Kafka Appender,第二个是自定义的 Kafka Metrics Reporter,第三个是根据官方的 Prometheus PushGateway Metrics Reporter 做了内部改造的。前两个是本篇要讲解的,后两个后面也可以单独再开文章来讲。

相关阅读

  • 大型 SaaS 系统的数据范围权限该如何设计?

  • 关注我,回复关键字“spring”,免费领取Spring学习资料。toB 的系统,除了普通的权限管理之外,往往还需要数据范围权限。本文介绍一种,简单的易实现的 Saas 多租户数据范围权限系统
  • 如何在 Spring 中控制 Bean 初始化先后顺序?

  • 关注我,回复关键字“spring”,免费领取Spring学习资料。问题:如何在Spring中控制Bean初始化先后顺序?从Spring 2.0出现后,Spring提供@Order注解来定义了组件的加载顺序。@Order定
  • 武大学生日常赏樱?真相来了……

  • 听说武大学生日常赏樱?NO NO NOWHUers的日常,可不止花香日常作息揭晓大作战来了!武大人在做什么?快和珞珞珈珈一探究竟吧手绘类传统纸笔是一些人的优先选择好记性不如烂笔头的名
  • 今天,大连地铁5号线开通运营!

  • 2023年3月17日东北首条海下地铁线路大连市首条采用PPP模式建设的轨道交通线路大连地铁5号线正式开通运营标志着大连正式开启地铁网络化运营时代上午10时开通运营仪式在5号线
  • 广东刚刚通知:看牙补贴!就在今晚!

  • 种植牙价格贵,一直是大家的痛点。受到大家广泛关注的“种植牙集采”问题再度有了新的进展。近日,广东省医疗保障局官网发布《广东省医疗保障局关于做好口腔种植医疗服务收费专
  • 地铁设计院招聘正式开启!

  • 轨道交通人专属视频号,请关注↓↓↓点击上方,观看视频关注【RT轨道交通】视频号, 了解更多行业资讯!··点击“阅读原文”立即网申识别二维码加入超大在线人脉圈分享更多人,请点
  • 从“鱼米之乡”到“德企之乡”!

  • 上世纪90年代外资涌入中国热潮开启1993年初经国务院批准,太仓撤县建市1993年末第一家德资企业就来了太仓深耕对德合作的序幕由此拉开30年砥砺奋进,30年跨越山海,时至今日,太仓已
  • 妍真呐,是时候去换新眼镜了

  • 终于终于,等到了《黑暗荣耀》第二季回归当我茶不思饭不想一口气追完,后遗症立现一是熟练掌握了诶西shake it的使用方法二是两眼模糊视力直线下降只想说“妍真呐,是时候去换新眼

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 大型 SaaS 系统的数据范围权限该如何设计?

  • 关注我,回复关键字“spring”,免费领取Spring学习资料。toB 的系统,除了普通的权限管理之外,往往还需要数据范围权限。本文介绍一种,简单的易实现的 Saas 多租户数据范围权限系统
  • 如何在 Spring 中控制 Bean 初始化先后顺序?

  • 关注我,回复关键字“spring”,免费领取Spring学习资料。问题:如何在Spring中控制Bean初始化先后顺序?从Spring 2.0出现后,Spring提供@Order注解来定义了组件的加载顺序。@Order定
  • 如何收集 Yarn/K8s 集群中的 Flink 任务日志?

  • 背景不管是 Flink On Yarn 还是 On k8s,如果任务正常运行,我们是可以通过 Flink Web UI 去查看 JobManager 和 TaskManager 日志,虽然日志量大的时候去不同的 TaskManager 找日