引言
问题分解
错误日志分析
分析内容为当前作业抛出的日志栈,分析包含两个阶段:
-
开发阶段: 开发状态的异常日志栈分析,如常见的语法错误、表模式配置错误等。
-
运行阶段: 作业运行过程中产生的异常日志栈分析,如上游 binlog 过期、Time 字段存在 Null 脏数据等。
异常分析
主要分析内容为影响作业当前运行的问题,分析包含三个阶段:
-
启动阶段: 启动文件分析、依赖的云资源分析、数据源权限探测、网络分析、Session 集群分析等。
-
运行阶段: Checkpoint 检查、权限检查、状态检查等。
-
停止阶段: 停止速度分析。
风险分析
主要分析内容为不影响作业运行的问题,分析包含两个阶段:
-
配置阶段:JobGraph 检查、版本检查、HA 检查等。
-
运行阶段:Checkpoint 检查、作业运行环境检查等。
核心技术
工程架构
■ 数据层
■ 服务层
-
错误日志分析服务:借助数智平台提供的日志聚类&推荐算法,建立服务于 Flink 业务场景的错误日志知识库,沉淀了用户报错信息输入 – 错误日志库聚类日志 – 产研/SRE 分析 – 日志打标 – 回馈用户解决方案这样一套完善的错误日志分析方法。相比于传统工单方式,错误日志诊断服务打通用户问题直接触达产研的渠道,真正帮助用户解决面临的高优报错问题,提高了用户问题解决的效率。错误日志诊断服务通过引入日志聚类能力,解决传统日志分析场景通过正则匹配方式面临的信息拟合准确度问题以及海量信息去重的难题。其他关于日志聚类细节会在技术创新部分详解。
-
作业诊断服务:调度引擎是智能诊断的大脑,通过读取数据层 Flink 完整生命周期的数据,会定期轮训执行决策树,并产出诊断结果。决策树中沉淀了 Flink 产研/SRE 数载打磨Flink产品沉淀下来的专家经验,包含作业报错、作业性能、作业配置、底层运行环境风险等。将这些作业面临的风险通过数条诊断项形式透出给接口层,帮助用户实现全托管、免运维的产品体验。
■ 业务层
Flink智能诊断中日志聚类&推荐部分算法侧整体链路如图所示,整体分为两个阶段:
-
知识沉淀:面向大量日志,通过算法提取关键信息并沉淀在知识库中。
-
日志诊断:通过报错日志内容,从知识库中匹配相应的原因和解决方案。
主要提供两大核心能力:
-
诊断能力:实时为错误日志匹配相应的原因和解决方案,提供日志诊断能力。
-
自动化分析能力:定时对未命中错误日志进行分析,提升专家经验集成效率。
技术创新
■ 诊断能力
为了解决这个问题,Advisor 建立了面向 Flink 错误日志的日志知识库,通过算法提取日志中的信息,并结合专家经验进行聚合,沉淀关键信息。日志聚类算法主要流程如下:
-
冗余信息清洗[日志预处理和编码]:去除非结构化信息,减少信息干扰。
-
日志特征构建[分词&特征选择]:提取日志特征,将日志转化为结构化表征。
-
层次聚类:基于日志特征间的相似度,对日志进行聚合。
-
结合标注:结合专家经验对类别进行调整和细化,提升结果准确性。
当日志诊断算法服务被触发时,算法的匹配逻辑如下:
-
规则:优先根据 Flink 产研/SREs 预先定义的规则匹配相应的原因及解决方案。
-
算法:计算日志内容与知识库中类别的相似度对日志进行归类,给出对应的原因和解决方案。
■ 自动化分析能力
-
定时收集产品未命中的错误日志信息
-
结合知识库中沉淀的结果以及专家经验对未命中的错误日志进行聚类,将海量日志聚合成数量有限的日志类
-
根据类别调用频率进行排序
日志自动化分析能力带来的核心优势如下:
-
实时性:能够帮助产研和 SRE 实时感知日志匹配情况。
-
高效性:明确给出了产品当前无法解决的日志类别,给产品功能完善提供了明确的方向。同时算法还能分析已有规则的不足,实现查漏补缺。
-
低门槛:算法对海量日志进行了去重并给出了关键词,降低了产研的标注成本和门槛。
功能实战
开发态错误日志分析
在 Flink 全托管开发控制台作业开发页面,您可以使用开发态错误日志分析
-
登录实时计算控制台。
-
在 Flink 全托管 页签,单击目标工作空间 操作 列下的 控制台 。
-
在左侧导航栏上,选择 应用 > 作业开发。
-
编写 SQL 后,点击验证,可查看错误日志的分析。
查看健康分
在 Flink 全托管开发控制台作业运维页面,您可以查看作业的健康分:
-
登录实时计算控制台。
-
在 Flink 全托管 页签,单击目标工作空间 操作 列下的 控制台 。
-
在左侧导航栏上,选择 应用 > 作业运维 。
-
您可以查看以下信息。
查看运行态日志分析
在 Flink 全托管开发控制台作业运维页面,您可以使用开发态错误日志分析:
-
登录实时计算控制台。
-
在 Flink 全托管 页签,单击目标工作空间 操作 列下的 控制台 。
-
在左侧导航栏上,选择 应用 > 作业运维 。
-
单击目标作业名称。
-
在作业详情页面,单机 作业探查。
-
在左边可切换运行日志、启动日志、异常信息可查看运行态日志分析。
对作业进行诊断
在 Flink 全托管开发控制台作业运维页面,您可以通过诊断功能,查看作业详细的风险原因及平台所给的建议。
-
登录实时计算控制台。
-
在 Flink 全托管 页签,单击目标工作空间 操作 列下的 控制台 。
-
在左侧导航栏上,选择 应用 > 作业运维 。
-
单击目标作业名称。
-
在作业详情页面右上角,单击 诊断 。
-
在页面左侧,查看诊断结果和优化建议。
总结
Flink 智能诊断的核心能力主要体现在:
-
产品体验:产品控制台开发引入了秒级实时报错诊断功能,覆盖了作业从开发态到运维态的全流程,方便用户自助解决问题,降低工单量。
-
技术创新:采用了日志聚类和推荐算法来替代传统的正则表达式,不仅解决了海量日志“去重”难题,同时也大幅降低了专家业务经验的集成门槛。
-
根因建议:覆盖异常场景,提供 100%准确匹配异常原因诊断以及解决方案,敏捷发布热更新即刻生效。
-
产研共建:智能诊断是 SRE、研发、服务团队、产品多团队联合共建的结果,属于全链路专家经验产品化的产物,已形成常态化运作及维护机制,保障持续迭代优化。
Flink 智能诊断上线至今,在用户 PV、问题覆盖率等几个方面都取得了较好的阶段性结果:
-
每个 Flink 用户平均每天使用诊断 3.5 次。
-
作业运维类咨询工单(报错日志&运行异常)下降了 28%。
本文转载自Apache Flink,原文链接:https://mp.weixin.qq.com/s/oi5uDSP8qm9GqgxnuJBjxg。