企业应用观测中枢建设

本文来自腾讯蓝鲸智云社区用户: CanWay

运维挑战加剧

新时代技术背景下,运维面临的挑战加剧:

1、业务数量日益增加、业务规模日益庞大

随着科技发展进步、民众生活富足,线下业务线上化、线上业务复杂化趋势愈演愈烈,各行各业投入巨大人力物力财力进行企业IT建设。随之而来的是线上业务数量的爆炸式增加与业务规模的剧烈扩张,这对企业IT运维人员提出了全局把控能力的重大挑战。

2、云原生、微服务技术应用

伴随着业务增长,IT架构领域提出了云原生、微服务的构建理念,将传统的大体量、高耦合应用系统拆分为微型化、可拆卸的分布式模块。这种高可用性、高灵活度的部署架构使得运维人员更难了解系统全貌,在日常监控和故障现场还原时难度极大。

3、容器技术的大规模实践落地

与此同时,在资源调度层面,为应对上述现状带来的业务快速迭代、运行保障维稳需求,容器技术在各企业内部快速落地推广。容器对基础资源的弱依赖、Pod/Container频繁起灭的特性都给运维工作带来了难以估量的复杂度提升,人力没有算力快的“弱势”日益凸显。
在这里插入图片描述

复杂业务逻辑带来的交错系统关系

综上所述,在当今企业内部,运维工作越来越需要工具的协助,传统人工式的运维方案,已无法应对科技发展带来的挑战要求。

企业应用观测建设路径

面对上述挑战,企业常常会踏上构建可观测性工具体系的征途,而在融合ITIM基础监控之后,针对应用的可观测能力补充往往在中间阶段进行建设落地。
在这里插入图片描述

针对应用的可观测体系,首先需要建设狭义上的应用监控工具(APM),通过请求跟踪(Trace)标记,实现应用架构可视化、应用流量指标化、请求记录数据化;
在观测数据补足后,应用观测进入下一阶段建设目标——数据联动,将应用观测数据(Trace)和指标(metric)、日志(log)关联起来;通过多维度视角监控业务系统运行状况,为告警产生后的故障定位提供可追溯的现场记录。

在这里插入图片描述
完整可观测体系的结构与应用可观测的占位

企业应用观测建设思路

总体定位

链路追踪的工具,即前面提到的APM,因为其自动化生成了一系列数据之间的关联关系,在整个可观测体系中是一个类似中枢的存在。
在这里插入图片描述
链路追踪工具在可观测体系中的作用

这张图概括了链路追踪在整个可观测体系建设中的定位以及与其他工具的关联关系:

  • 向前可关联到用户操作,链路追踪可以将用户在终端上的发起的请求和后端链路联系起来,实现前端到后端完整的时间线和因果关系呈现;

  • 向后则可串联到具体日志,链路追踪可以定位到具体某个服务的某次或某一批请求,从而精确匹配到相关日志来解析问题所在;

  • 向下则可以在锁定某个服务节点问题后,通过资源标签定位到具体承载这个服务节点的进程级监控和主机操作系统层级的监控,或是容器平台的监控。

另外链路追踪本身也是可以进行一些指标提取的,经典指标例如请求量、请求成功率、各种分位的时延,这些指标在配置了一定的告警规则后,也都可以直接作为告警来源。产生异常后主动触达运维人员。

由此可见,在构建全面的可观测性体系时,孤立地看待与应用性能管理(APM)工具的建设是一种偏颇的思路。不少企业曾尝试独立为APM工具设立项目并推进实施,然而最终这些工具并未能实现广泛的采纳与应用,项目所带来的实际效益远低于初始预期。究其根本,是因为单一的APM工具所能覆盖的问题场景极为有限。我们应当将APM尽可能和各类其他观测工具做串联打通,通过APM建立起基于业务实际请求流量的“桥梁”,有目标性地拉通各个观测工具和不同类型的观测数据,实现完整有效的观测效果。

接下来我们就具体的串联打通场景提出一些具体实践供各位读者参考。

前端到后端串联排障

当具备对用户终端数据进行采集的能力,那就可以结合这种前端监控工具(RUM)和链路追踪工具(APM)通过一些机制来实现前端到后端的串联排障。
在这里插入图片描述
前端串联后端调用链排障示意图

图中可以解释这一过程的原理,用户在移动应用或者Web浏览器网页上访问时,会生成一个Session被记录,一个Session中记录了一个用户的完整操作流程,包括他依次打开了哪些页面,在每个页面上进行了怎样的操作,触发了哪些后台请求。当产生了一个具体的后台请求后,RUM工具可以按照APM工具定义的Trace标识规则(TraceID的生成规则),来对这个请求进行标记,这样在后端也可以完整跟踪到这个请求在后端系统具体经过了哪些服务,在哪个服务上处理消耗的时间过长或者出现了报错。

链路跟踪与日志关联

对于开发人员来说,直接将问题定位到代码级别是最高效的。但告警信息的有限以及指标类数据的高度抽象,使得运维人员在很多时候其实无法给出这么详细的信息,无法有效辅助开发人员进行问题定位和解决。这时,链路追踪和日志关联的方式就给出了一种有效的解决手段。

具体的实现方式如下图所示:
在这里插入图片描述
调用链串联日志方法

可能会有工程师担心这种方式对代码侵入性很大,很难实践,但其实不然,业界有非常多好用的日志框架来帮你解决这个问题,我们只需要额外生成一份日志输出的配置文件做批量下发即可。

以下就用Logback日志框架配合Skywalking探针(一种业界流行的开源APM探针)来做个例子,其中关键的修改点在于:

1、引用skywalking官方提供的工具类
在这里插入图片描述
2、在Logger配置中引用这个Appender
在这里插入图片描述
在这个过程中,业务并不会有很大感知,只是会发现他们输出的日志中增加了Skywalking注入的TraceID等信息。接下来我们在日志解析过程中就可以提取这些Trace信息,便于后续直接根据这些Trace信息进行关联检索和分析。

链路追踪下钻到资源层监控

这里会进一步分为三种不同类型的场景:

1、下钻到组件或数据库排查问题

APM所捕获到的调用数据中,有一部分是对组件或数据库的调用。这种调用可以将系统所用到的组件和数据库直观地呈现在拓扑图和某一条具体的调用链中,如果相关的组件或数据库出现了问题,大概率会在这种可视化的形式中有所体现,例如拓扑图上的状态呈现以及调用链瀑布图中的长条。当然,这里只是解决了发现的问题,我们只能在APM中判断这些组件或者数据库的故障对上游调用者产生了影响,但至于为何产生以及这些组件及数据库的真实运行状态,我们仍然需要借助其他监控工具来呈现和分析。

此时APM可以在调用信息中提取出对应组件或数据库的资源标识,这可能是IP地址,或是域名链接,再通过这些标识信息去对应的组件监控或数据库监控中获取到这些资源的核心监控指标信息及相关日志,通过同一个平台的页面跳转或者嵌入来实现一套连贯的排障流程,提升此类场景的排障效率。

2、下钻到进程所在的主机/容器集群排查问题

当我们在系统中通过APM探针或者SDK按照规范要求上报了Trace信息,一般都会携带对应服务所在的主机或者容器集群信息,最常见的就是主机的IP地址以及容器的ContainerID,这两种信息会作为我们去寻求其他监控工具时对主机和容器监控的索引,从而能够在识别到某个服务节点故障后,对其所在的主机或者容器进行下钻,查看到主机和容器层级上更加精确的指标数据或者容器数据。

3、下钻到网络行为分析网络问题

我们知道,计算机网络其实底层有七层协议,而我们平时大多数情况会将这七层协议转化抽象成单次请求。但不排除,有时我们的故障发生在比较深的网络层面,在APM调用链中只能得知某一段span的耗时增加、返回码错误或者无响应断链,无法进一步排查深层次的网络问题。这时就可以通过这一进程将请求的span获取到内核态的 sys span ,再从sys span映射到网络监控中的具体net span,然后就可以从专业的网络监控中获取到这次网络请求在各个环节的详细信息。
在这里插入图片描述
一次请求调用实际的网络过程

通常某次请求出现网络问题的概率还是比较小的,往往是短时间大面积出现网络问题,这个时候我们也可以从APM的某些样本请求中获取一个大致的范围,接下来按一定条件跳转到专业的网络监控,查看相应的指标趋势(例如丢包数量、丢包率、CRC校验通过率等)。

结语

以上,我们介绍了比较成熟理想的企业应用观测中枢建设方案。总的来说,应用观测领域目前尚处于快速发展、落地探索阶段,各企业在建设应用观测中枢的过程中不应操之过急。企业内部从一个试点出发,以点带面,逐渐推广是比较理想且稳妥的建设节奏。其最终实现的观测能力也将会对企业内部的系统维稳及代码调优起到极大的助力作用。

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

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

相关文章

Python实例题:基于边缘计算的智能物联网系统

目录 Python实例题 题目 问题描述 解题思路 关键代码框架 难点分析 扩展方向 Python实例题 题目 基于边缘计算的智能物联网系统 问题描述 开发一个基于边缘计算的智能物联网系统,包含以下功能: 边缘设备管理:连接和管理大量物联网…

一,python语法教程.内置API

一,字符串相关API string.strip([chars])方法:移除字符串开头和结尾的空白字符(如空格、制表符、换行符等),它不会修改原始字符串,而是返回一个新的处理后的字符串 chars(可选)&…

私有 Word 文件预览转 PDF 实现方案

私有 Word 文件在线预览方案(.doc/.docx 转 PDF) 前言 由于 .doc 和 .docx Word 文件 无法在浏览器中直接预览(尤其在私有 API 场景下),常见的 Content-Disposition: inline 并不能生效。因此,本方案通过…

Alpine Docker 容器中安装包缓存与 C/C++ 运行问题

在使用 Docker 容器部署应用时,基于 Alpine 镜像能带来轻量化的优势,但过程中也会遇到不少问题。今天就来分享下我在 Alpine 容器中解决安装包缓存与 C/C 程序运行问题的经验。 一、Alpine 安装包缓存到本地目录 Alpine Linux 默认使用apk作为包管理工…

[2-02-02].第59节:功能函数 - 函数基础

服务器端操作学习大纲 一、函数基础 需求场景 在shell脚本的编写过程中,我们经常会遇到一些功能代码场景:多条命令组合在一起,实现一个特定的功能场景逻辑、一些命令在脚本内部的多个位置频繁出现。在这些场景的代码量往往不多,…

RA4M2开发涂鸦模块CBU(6)----RA4M2驱动涂鸦CBU模组

RA4M2开发涂鸦模块CBU.6--RA4M2驱动涂鸦CBU模组 概述视频教学样品申请参考程序硬件准备接口生成UARTUART属性配置R_SCI_UART_Open()函数原型回调函数user_uart_callback0 ()变量定义按键回调更新按键状态DP-LED 同步长按进入配网涂鸦协议解析主循环任务调度 概述 本方案基于瑞…

MiniMax-M1: Scaling Test-TimeCompute Efficiently with I Lightning Attention

我们推出了MiniMax-M1,这是全球首个开源权重、大规模混合注意力推理模型。MiniMax-M1采用了混合专家系统(Mixture-of-Experts,简称MoE)架构,并结合了闪电注意力机制。该模型是在我们之前的MiniMax-Text-01模型&#xf…

Appium+python自动化(二十六) -Toast提示

在日常使用App过程中,经常会看到App界面有一些弹窗提示(如下图所示)这些提示元素出现后等待3秒左右就会自动消失,那么我们该如何获取这些元素文字内容呢? Toast简介 Android中的Toast是一种简易的消息提示框。 当视图…

【信号与系统三】离散时间傅里叶变换

上一讲我们讲述了连续时间傅里叶变换,这一讲同理来个离散时间傅里叶变换。 和上讲模块类似 5.1离散时间傅里叶变换 这一式子就是离散时间傅里叶变换对 5.2周期信号的傅里叶变换 同理,由于之前第一讲讲到: 可以推出: 举个例子&am…

Python应用石头剪刀布练习初解

大家好!作为 Python 初学者,寻找一个既简单又有趣的项目来练习编程技能是至关重要的。今天,我将向大家介绍一个经典的编程练习——石头剪刀布游戏,它可以帮助你掌握 Python 的基本概念,如条件语句、随机数生成和用户输入处理等。 …

私有规则库:企业合规与安全的终极防线

2.1 为什么企业需要私有规则库?——合规与安全的最后防线 真实案例:2023年某跨境电商因员工泄露内部检测规则,导致黑产绕过风控系统,损失1200万+ 企业规则库的三大刚需: 行业合规: 金融行业需符合《个人金融信息保护技术规范》 医疗行业需满足HIPAA患者数据脱敏要求 业…

长尾关键词优化SEO核心策略

内容概要 本文旨在系统解析长尾关键词在搜索引擎优化中的核心地位,为读者提供从理论到实践的全面指南。文章首先探讨长尾关键词的基础作用,帮助理解其在提升网站流量质量中的价值。接着,深入介绍精准定位低搜索量、高转化率关键词的策略&…

腾讯云事件总线:构建毫秒级响应的下一代事件驱动架构

摘要 事件总线(EventBridge)作为云原生架构的核心枢纽,其性能与可靠性直接影响企业系统弹性。腾讯云事件总线基于TGW云网关底层能力重构,实现单节点吞吐量提升125%、故障恢复时间降至4秒级(行业平均>30秒&#xff0…

PyTorch 中mm和bmm函数的使用详解

torch.mm 是 PyTorch 中用于 二维矩阵乘法(matrix-matrix multiplication) 的函数,等价于数学中的 A B 矩阵乘积。 一、函数定义 torch.mm(input, mat2) → Tensor执行的是两个 2D Tensor(矩阵)的标准矩阵乘法。 in…

Qt 解析复杂对象构成

Qt 解析复杂对象构成 dumpStructure 如 QComboBox / QCalendarWidget / QSpinBox … void Widget::Widget(QWidget* parent){auto c new QCalendarWidget(this);dumpStructure(c,4); }void Widget::dumpStructure(const QObject *obj, int spaces) {qDebug() << QString…

山姆·奥特曼:从YC到OpenAI,硅谷创新之星的崛起

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 山姆奥特曼&#xff1a;从YC到OpenAI&#xff0c;硅谷创新之星的崛起 在人工智能革命…

PHP语法基础篇(五):流程控制

任何 PHP 脚本都是由一系列语句构成的。一条语句可以是一个赋值语句&#xff0c;一个函数调用&#xff0c;一个循环&#xff0c;一个条件语句或者甚至是一个什么也不做的语句&#xff08;空语句&#xff09;。语句通常以分号结束。此外&#xff0c;还可以用花括号将一组语句封装…

怎么隐藏关闭或恢复显示输入法的悬浮窗

以搜狗输入法为例&#xff0c;隐藏输入法悬浮窗 悬浮窗在输入法里的官方叫法为【状态栏】。 假设目前大家的输入法相关显示呈现如下状态&#xff1a; 那我们只需在输入法悬浮窗&#xff08;状态栏&#xff09;的任意位置鼠标右键单击&#xff0c;调出输入法菜单&#xff0c;就…

Electron (02)集成 SpringBoot:服务与桌面程序协同启动方案

本篇是关于把springboot生成的jar打到electron里&#xff0c;在生成的桌面程序启动时springboot服务就会自动启动。 虽然之后并不需要这种方案&#xff0c;更好的是部署[一套服务端&#xff0c;多个客户端]...但是既然搭建成功了&#xff0c;也记录一下。 前端文件 1、main.js…

2025年计算机应用与神经网络国际会议(CANN 2025)

2025 International Conference on Computer Applications and Neural Networks &#xff08;一&#xff09;会议信息 会议简称&#xff1a;CANN 2025 大会地点&#xff1a;中国重庆 收录检索&#xff1a;提交Ei Compendex,CPCI,CNKI,Google Scholar等 &#xff08;二&#x…