随着大数据开发场景下需要运维管理的任务越来越多,在日常运维中开发者经常会面临以下几个问题:
1.任务多,依赖关系复杂:很难查找到重要任务的所有上游任务并进行监控。如果监控所有任务,又会产生很多无用报警,导致有用报警被忽视;
(资料图片)
2.配置运维成本高:每个任务的运行情况不一样,承诺完成时间不一样,如果单独对每个任务设置监控,分析及人工对齐任务服务级别协议(SLA)成本非常高;
3.报警形式多样性:对于小时级的任务,不同时段的报警及时性要求不同,普通监控无法满足不同时段多样的报警需求。
为了帮助企业开发者更好地解决这一问题,及时平稳完成日常运维、高效保障数据质量,字节跳动数据平台开发套件数据开发团队自研了基于依赖关系的全链路智能监控报警——基线监控,它能根据任务运行情况,智能决策是否报警、何时报警、如何报警以及向谁报警,贯穿整条任务产出链路,避免出现环节缺失,保障链路完整性。目前基线监控已在字节跳动内部得到广泛使用,覆盖抖音、电商、广告等100+个项目,服务级别协议(SLA)任务的基线监控覆盖率超过80%。
当前,该能力已通过火山引擎DataLeap向企业开放。企业可以通过火山引擎DataLeap的基线监控功能,有效降低监控配置成本、避免无效报警及报警泛滥。
图:火山引擎DataLeap监控范围
火山引擎DataLeap默认监控的范围包括:基线保障任务及保障任务上游的所有任务。如上图所示,保障任务D,E及它们所有的上游节点都会纳入基线监控范围,而任务C,F不受基线监控。值得一提的是,火山引擎DataLeap的基线监控允许用户配置基线监控只覆盖“指定项目”下的任务,此时基线监控的范围就只包含了保障任务及这些项目下的上游任务。
图:火山引擎DataLeap基线监控整体架构
火山引擎DataLeap基线监控由基线管理模块、基线实例生成、基线埋点检测等构成,各模块功能详情如下:
基线管理模块:负责基线创建、更新、删除等操作,管理基线元信息,包括保障任务,承诺时间,余量及报警配置等;
基线实例生成:火山引擎DataLeap每天定时触发生成基线实例,生成实例的同时根据保障任务,由下而上逐层遍历 (BFS)所有上游任务并生成基线监控埋点。生成基线监控埋点的过程中,火山引擎DataLeap会计算每个任务节点的预测运行时长,承诺时间,预警时间,预警最晚开始时间,承诺最晚开始时间。此外,火山引擎DataLeap会给基线监控任务添加基线出错/变慢报警规则,当任务执行触发规则后,通过基础报警服务发送基线报警事件;
监控埋点校验:系统维护一个延迟队列,火山引擎DataLeap会根据校验时间点(预警最晚开始时间,承诺最晚开始时间以及破线加剧时间校验点),同时火山引擎DataLeap会定时触发监控埋点校验任务实例运行状态,如果在时间点实例未运行成功,产生基线预警/破线报警事件,发送报警。
未来,火山引擎DataLeap的研发人员将继续针对基线监控进行优化,如基线关键路径分析、基线实例生成效率优化等,不断提高基线监控算法性能,完善基线链路分析能力,提升用户体验,向企业级市场提供更强大的全链路监控运营服务。(作者:崔岗)