DataLeap的全链路智能监控报警实践(三): 系统实现

news2025/1/12 10:49:55

系统实现

整体架构

 

  • 基线 管理模块:负责基线创建、更新、删除等操作,管理基线元信息,包括保障任务,承诺时间,余量及报警配置等);
  • 基线 实例生成:系统每天定时触发生成基线实例,生成实例的同时根据保障任务,由下而上逐层遍历 (BFS)所有上游任务并生成基线监控埋点。生成基线监控埋点的过程中,会计算每个任务节点的预测运行时长,承诺时间,预警时间,预警最晚开始时间,承诺最晚开始时间。此外,系统会给基线监控任务添加基线出错/变慢报警规则,当任务执行触发规则后,通过基础报警服务发送基线报警事件;
  • 监控 埋点 校验:系统维护一个延迟队列,根据校验时间点(预警最晚开始时间,承诺最晚开始时间以及破线加剧时间校验点),定时触发监控埋点校验任务实例运行状态,如果在时间点实例未运行成功,产生基线预警/破线报警事件,发送给基础报警服务发送报警。
由于基线实例生成和基线埋点检测是基线监控的核心模块,因此本文只着重介绍下这两个模块。

基线实例生成

  • 每天固定时间点(如22:00),根据基线类型及业务日期生成对应的基线实例。
  • 针对每一个 基线实例,系统根据该基线实例对应的监控链路(任务DAG),由保障任务为起点, 自下而上逐层( BFS )计算各任务对应的监控埋点实例的校验时间节点,包括 预测运行时长预警时间承诺时间、预警最晚开始时间,承诺最晚开始时间。
如上图所示,上游任务(B)的预警时间为其子任务实例埋点的预警最晚开始时间,

 

任务节点中的数字表示任务的预测运行时长,如节点A(1.5h),表示A的预测运行时长是1.5小时。
如上图所示,基线保障任务为A,承诺时间为9:00,用户设置的预警余量为0.5h,结合系统推算出该任务本次的预测运行时长为1.5h。因此,任务A监控埋点的预警时间为8:30(9:00-0.5h),预警最晚开始时间为7:00(8:30-1.5h),承诺最晚开始时间为7:30(7:00+0.5h)。

 

上下游任务之间监控埋点的各时间节点方法如上图所示,满足:上游任务的承诺(预警)时间 = 下游任务的承诺(预警)最晚开始时间。
上图示例只是理想情况,但实际上任务链路会非常复杂,如跨层依赖、循环依赖非常常见。此外,任务链路也是有可能动态变化的,上游依赖新增或者减少也是个普遍现象。因此,基线实例生成时,需要针对上述情况进行处理,以保证基线监控的有效性和合理性。下面,我们针对每种场景介绍基线监控算法的解决办法。

1、基线监控的任务链路变化了怎么办?

  目前,基线监控算法是通过基线实例生成时刻该基线监控的任务链路“快照”来生成监控埋点实例的,暂未针对监控埋点生成结束后,基线覆盖的任务链路发生变化的情况进行处理。即,用户操作任务并不改变已经生成的基线监控埋点实例的信息(计算得来的各种时间及任务与基线的映射关系等),而是等到下一次生成基线实例的时候重新去计算。具体实现时,系统会将任务DAG进行缓存(1h),以提高埋点实例生成的效率。
2、基线覆盖的任务链路存在跨层依赖怎么办?
 由于在计算监控埋点实例的时候是由下至上逐层计算的,可以理解为是个局部计算,无法获取整个任务链路的全貌。因此,如果基线覆盖的任务链路中存在跨层依赖,那么同一业务任务实例上的监控埋点的时间点需要不断更新至 最早值。如下图所示,任务A依赖任务C和E,任务C依赖于任务E,而任务A又直接依赖于任务E。保障任务A的埋点实例计算结束之后,可以计算任务B、C、D、E的埋点实例信息;而当计算任务C的埋点实例信息时,任务E的埋点实例需要根据任务C的埋点实例信息进行更新。这样才能保证整个任务链路监控的合理性。

 

3、基线覆盖的任务链路存在循环依赖怎么办?

  基线覆盖的任务链路中存在循环依赖,一般是由于某两个任务之间在业务时间存在offset导致的。如下图所示,比如任务B 业务时间23:00的实例依赖任务C 业务时间23:00的实例,而任务C 业务时间23:00的实例又依赖于任务A 业务时间22:00的实例。

 

对于这种情况,处理原则为:只保留任务最新业务时间( latest_task_time)对应的埋点实例,早于 latest_task_time的业务时间对应的埋点实例直接丢弃。这是考虑到对更早时间点的实例进行监控的意义不大,因为前一天的基线监控已经发现出问题并触发告警了。

基线埋点校验

基线实例生成结束后,将生成的监控埋点实例维护到一个延迟队列 BaselineTimeQueue里,Delay时间节点、监控埋点实例校验阶段及对应阶段触发的报警类型三者之间的关系如下图所示:

 

 

  • 基线监控埋点实例的初始阶段为 基线预警校验阶段( CHECK_START_WARNING_TIME) 其Delay时间点为预警最晚开始时间( earliest_start_time_for_warning)。当到达 earliest_start_time_for_warning时间节点时,监控埋点对应的任务仍未开始运行,且该任务是该基线监控链路上的首个满足条件的任务,则基线实例的状态由 安全更新为 基线预警,并发送基线预警报警 无论是否触发报警,监控埋点实例的状态都会从 CHECK_START_WARNING_TIME流转至 基线 破线 校验阶段( CHECK_START_COMMIT_TIME),并且重新放至延迟队列中,等待基线破线的校验。
  • 当到达承诺最晚开始时间( earliest_start_time_for_commit)时间节点时,监控埋点对应的任务仍未开始执行,且该任务是该基线监控链路上的首个满足条件的任务,则基线实例的状态由 安全/基线预警更新为 基线 破线,并发送基线破线报警。
  • 在基线破线校验结束之后,需要判断是否需要进入基线破线加剧校验阶段:
    • 如果当前任务或其上游存在破线任务,且当前任务已经开始执行,则基线实例状态更新为 基线破线加剧检查阶段( CHECK_OVERTIME_INTENSIFY),Delay时间为基线破线加剧校验时间节点( overtime_intensify_time),即任务实际开始时间 + (预测运行耗时 * (1 + N%));
    • 如果当前任务尚未开始执行,则基线实例状态更新为 等待基线 破线 加剧检查阶段( CHECK_WAIT_OVERTIME_INTENSIFY),此时Delay时间为等待基线破线校验时间节点( wait_overtime_intensify_time),即破线开始时间 + (预测运行耗时 * (1 + N%))。
  • 当到达 wait_overtime_intensify_time时间节点进行校验时,若任务 仍未开始执行,则检查阶段保持不变, wait_overtime_intensify_time增加 30 秒,重新入队等待下次检查。
  • 当到达 overtime_intensify_time时间节点进行校验时,若任务 仍未运行成功,则触发 基线 破线 加剧报警,并将基线实例的状态更新为 FINISH_WITH_UNSAFE,埋点监控结束;若任务 已运行成功,则不触发报警,并将基线实例的状态更新为 FINISH_WITH_SAFE,监控结束。

总结

未来,我们将继续针对基线监控进行优化,如基线关键路径分析、基线实例生成效率优化等,不断提高基线监控算法性能,完善基线链路分析能力,不断提升用户体验,致力于向火山引擎DataLeap用户提供更强大的全链路监控运维能力。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023 年最新互联网 Java 面试八股文出炉(附大厂 P5-P8 技术栈)

为什么感觉 Java 面试变难了? 几年前,你只需要简单的 ssm 框架,就能轻松找到一份 Java 的工作,但现在不一样了,随着涌入这个行业的人越来越多,同一个岗位需要筛选掉更多人,要求自然水涨船高&am…

ubuntu 20.04 aarch64 平台交叉编译 opencv 静态库

编译环境 win10 64 位 VMware Workstation Pro 16 虚拟机 虚拟机安装 ubuntu 20.04 opencv 版本: 来自 github 当前最新 4.7 目的 交叉编译 opencv 生成静态库(.a),用于 嵌入式 aarch64 平台。 环境配置方法 参考上一篇 u…

基于Java汽车配件销售业绩管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

@vue/cli脚手架

2. vue/cli脚手架 2.1vue/cli 脚手架介绍 目标: webpack自己配置环境很麻烦, 下载vue/cli包,用vue命令创建脚手架项目 vue/cli是Vue官方提供的一个全局模块包(得到vue命令), 此包用于创建脚手架项目脚手架是为了保证各施工过程顺利进行而搭设的工作平台 2.2 vue/cli 目录和代…

Camera | 11.瑞芯微摄像头采集图像颜色偏绿解决笔记

前言 在实际调试基于瑞芯微平台的camera过程中,发现显示的图片发绿, 现在把调试步骤分享给大家: 1、修改iq文件 sdk中位置: external/camera_engine_rkaiq/iqfiles/isp21/ov13850_ZC-OV13850R2A-V1_Largan-50064B31.xml【现在…

EBU5476 Microprocessor System Design 知识点总结_1 Introduction

主要学习自北邮国院物联网工程大三下学期微处理器课程。 Introduction-随便聊 嵌入式系统是什么?专用的计算机系统。为专门功能可能对计算机架构,外设等做出一些取舍。 通常的限制:Cost(比如大量部署传感器节点)&am…

基础知识学习---牛客网C++面试宝典(二)C/C++基础之C++内存

1、本栏用来记录社招找工作过程中的内容,包括基础知识学习以及面试问题的记录等,以便于后续个人回顾学习; 暂时只有2023年3月份,第一次社招找工作的过程; 2、个人经历: 研究生期间课题是SLAM在无人机上的应…

深入理解深度学习——注意力机制(Attention Mechanism):带掩码的多头注意力(Masked Multi-head Attention)

分类目录:《深入理解深度学习》总目录 相关文章: 注意力机制(AttentionMechanism):基础知识 注意力机制(AttentionMechanism):注意力汇聚与Nadaraya-Watson核回归 注意力机制&#…

想了解会计软件吗?来看看Zoho Books的功能和特点

Zoho Books 是一款功能强大的在线会计软件,为企业提供多合一解决方案,该解决方案可定制、可扩展,并使始终保持合规。 轻松生成电子发票 在Zoho Books中,您可以通过包含电子发票架构中提到的所有必填字段来创建电子发票格式的发票。…

css 包含块

你不知道的 CSS 之包含块 一说到 CSS 盒模型,这是很多小伙伴耳熟能详的知识,甚至有的小伙伴还能说出 border-box 和 content-box 这两种盒模型的区别。 但是一说到 CSS 包含块,有的小伙伴就懵圈了,什么是包含块?好像…

【啃】《Java核心卷 一》 | 第一,二章

文章目录 《Java核心技术卷 一》第一章 概述第二章 Java编程环境 图书推荐 《Java核心技术卷 一》 第一章 概述 前言:本书与一些”0基础入门“的书定位感觉是不太一样的,可能就像书名所说,是”核心技术“叭。书中经常将Java语言与 c 进行对比…

无损网络理论和实践

一、为什么需要无损网络? 随着高性能计算、大数据分析、人工智能以及物联网等技术的飞速发展,集中式存储、分布式存储以及云数据库的普及等原因,业务应用有越来越多的数据需要从网络中获取,这对数据中心网络的交换速度和性能要求…

Linux :: 权限篇:【1】:Linux 下文件访问者身份说明:三人一组!【补充:Linux下用户类型的分类!】

系列文章说明 前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集推荐: C 入门到入土!!!学习合集Linux 从命令到网络再到内核!学习…

【Flutter】Flutter 如何调用另一个 Page 里的函数

文章目录 一、前言二、状态管理和页面函数调用1. 状态管理简介2. 页面函数调用的需求 三、方法介绍和示例1. Provider 方法2. Global Key 方法3. 回调函数方法 四、总结 一、前言 本文的目标是为 Flutter 初学者解释如何在 Flutter 中调用另一个 Page 里的函数。通过阅读本文&…

碳排放预测模型 | Python实现基于机器学习回归分析的碳排放预测模型——数据清理和准备

文章目录 效果一览文章概述研究内容源码设计参考资料效果一览 文章概述 碳排放预测模型 | Python实现基于机器回归分析的碳排放预测模型——数据清理和准备 研究内容 分析国家在设计用于预测和预测二氧化碳排放的机器学习模型方面的特定记录,利用来自全球绝大多数国家的记录。…

探索iOS之Metal编程指南

iOS推出Metal渲染库为了取代OpenGL。Metal有自己的Shader语言,渲染效率比OpenGL高。在这里我们一起探索:Metal使用C限制、预处理定义、动态链接配置、GPU编译配置、设备坐标系、视口坐标系、纹理坐标系、矢量类型、矩阵类型、采样器状态、矩阵相乘。 1、…

如何下载远程maven仓库的jar 手动放到本地仓库?

文章目录 如何下载远程maven仓库的jar 手动放到本地仓库?简单步骤描述:详细步骤描述:案例1:案例2:结语如何下载远程maven仓库的jar 手动放到本地仓库? 在使用Maven构建Java项目时,通常会从中央仓库或其他远程仓库下载所需的依赖库。但是,有时候我们需要手动下载这些依赖库并…

Java并发之 Lock 锁

一、Lock接口 1 Lock简介&地位&作用 锁是一种工具,用于控制对共享资源的访问Lock和synchronized是最常见的两个锁,他们都能够达到线程安全的目录,但是使用和功能上又有较大的不同Lock接口最常见的实现类就是ReentrantLock通常情况下…

【LeetCode热题100】打卡第21天:最小路径和爬楼梯

文章目录 【LeetCode热题100】打卡第21天:最小路径和&爬楼梯⛅前言 最小路径和🔒题目 爬楼梯🔒题目🔑题解 【LeetCode热题100】打卡第21天:最小路径和&爬楼梯 ⛅前言 大家好,我是知识汲取者&#…

深入了解RTMP协议:实时传输的利器

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想…