应用监控eBPF 版调研

参考:

https://www.toutiao.com/article/7327353509735596559/?app=news_article×tamp=1717488680&use_new_style=1&req_id=20240604161119838096AAE4AD4F44788E&group_id=7327353509735596559&wxshare_count=1&tt_from=weixin&utm_source=weixin&utm_medium=toutiao_android&utm_campaign=client_share&share_token=b4685197-c1c1-43b6-ae92-0e1d9d77d29a&source=m_redirect&wid=1717555127344

应用实时监控服务(ARMS)-阿里云帮助中心 ​

1.概述

阿里云应用监控 eBPF 版是一套针对K8s集群的一站式可观测性产品,为K8s集群安装应用监控 eBPF 版组件后,即可查看基于K8s集群下的指标、应用链路、日志和事件,为IT开发运维人员提供整体的可观测性方案。

eBPF(extended Berkeley Packet Filter)是一种在Linux内核中运行的技术,它允许用户编写并在内核中运行小型程序,以实现高效的数据包过滤、监控和分析。eBPF程序可以用于实时数据分析、性能监控、安全审计等方面。

在数据采集方面,eBPF可以用于实时监控系统的网络流量、性能指标、进程活动等。通过编写适当的eBPF程序,可以实现对特定数据的捕获、分析和记录。

2.特性

代码无侵入:通过旁路技术,不需要对代码进行埋点即可获取到丰富的网络性能数据。

语言无关:在内核层进行网络协议解析,支持任意语言,任意框架。

高性能:基于eBPF技术,能以极低的消耗获取丰富的网络性能数据。

资源关联:通过网络拓扑,资源拓扑展示相关资源的关联。

数据多样:支持可观测的各种类型数据(监控指标、链路、日志和事件)。

整体性:通过控制台的场景设计,关联起架构感知拓扑、Prometheus监控、告警配置。

3.功能说明

3.1.应用监控

3.1.1.应用概述

支持对各种类型数据进行可视化展示。应用的请求数、错误数、平均耗时、实例数、CPU使用率、内存使用量、请求数的服务排行、错误数排行和平均耗时服务排行。

3.1.2.应用拓扑

通过监控分析网络请求,自动解析网络协议,构建网络拓扑便于查看服务依赖状态、关联网络性能、错慢请求明细。

3.1.3.提供、依赖服务

应用提供的接口的调用详情。其中接口概述可以查看对应接口的调用详情,包括请求数、错误数、平均耗时,同时展示HTTP状态统计和慢调用;调用链,可以查看对应接口的Span调用详情。

说明:接口的Span调用详情通常指的是在分布式系统中使用分布式追踪工具(如Jaeger、Zipkin等)记录和展示接口调用链的详细信息。这些工具通过在代码中插入特定的Span(跨度)来跟踪请求在不同服务之间的传递和处理过程。

具体来说,当一个请求进入系统时,会创建一个根Span,然后在处理过程中,每个服务或组件都会创建自己的Span,并在Span中记录相关信息,如开始时间、结束时间、耗时、标签、日志等。这些Span会形成一个调用链,展示了请求在系统中的流转路径和耗时情况。

通过查看接口的Span调用详情,可以了解每个接口调用的耗时、调用链路、错误信息等,帮助分析系统性能问题、排查故障、优化服务调用顺序等。

3.1.4.调用链分析

显示整体调用情况(调用链采样率为5%),包括调用次数、HTTP错误数和耗时百分位。

3.1.5.数据库分析

支持查看目标数据库的名称、类型、SQL语句、请求数、慢请求数、平均耗时,以及对应的时序曲线和分布情况。

3.1.5.实例监控

服务监控:CPU使用量、内存使用量、请求数、平均耗时和错误数

网络监控:应用接收的包数、TCP RTT、重传次数、TCP Drop次数和发送的包数;

容器监控查看容器视角的CPU、内存、Disk(磁盘)、Load(负载)、网络流量和网络数据包的各项指标。

3.1.6.持续剖析

可以有效发现应用程序中因为CPU导致的瓶颈问题,并且按照方法名称、类名称和行号进行细分统计,最终协助开发者优化程序、降低延迟、增加吞吐、节约成本。

当前持续剖析的能力是基于eBPF实现的,因为无侵入的特点,针对Go等有Debug符号信息的语言,Profiling的数据能够显示具体的函数调用,如果遇到unknown的函数,表示当前函数无法在内核中找到对应的符号表信息。

Self列表示方法在自身的调用栈中所消耗的时间或资源,不包括其子方法调用所消耗的时间或资源。可以用于识别哪些方法在自身内部花费了大量的时间或资源。

Total列包含方法自身消耗的时间或资源,以及其所有子方法调用所消耗的时间或资源。可以帮助了解整个方法调用栈中哪些方法贡献了最多的时间或资源。

如需排查具体的热点代码逻辑,可以通过重点关注Self列或直接查看右侧火焰图中底部的较宽火苗从中定位到高耗时的业务方法,较宽火苗是引发上层耗时高的根源,一般是系统性能的瓶颈所在,可以重点关注。

3.2.告警监控

提供开箱即用的告警模板,可以根据预置的告警模板创建告警规则,也可以自定义针对特定k8s集群的告警规则。当告警规则被触发时,系统的通知策略会以指定的告警方式向联系人发送告警信息,以提醒告警联系人采取必要的问题解决措施。

3.2.1.阈值检测

根据需求选择对应的告警应用、指标类型和筛选条件设置告警触发模式(单/多条件)、告警条件、通知策略等可以制定针对特定的告警规则。当告警规则被触发时,系统会以指定的通知方式向告警联系人或钉群发送告警信息,以提醒采取必要的解决措施。

支持jvm、定时任务、异常监控、提供/依赖服务统计、主机监控、线程池、http状态码异常、数据库多种指标类型监控。如下http状态码异常的指标描述:

支持建议阈值功能可以根据选择的应用、接口和告警指标,通过智能算法对该指标的历史数据进行分析,推荐较为合理的静态阈值。该功能还支持实时生成指标和阈值的对比图,方便调节阈值。

3.2.2.区间检测

如果需要检测的指标在正常状态下起伏不定(例如RT和QPS),不同的时间段需要适配的告警阈值不同,那么您可以使用区间检测功能,通过动态阈值对指标数据进行异常检测。当数据点的异常突变超出预设的上下边界时,系统将生成区间异常检测事件,这种检测主要用于监控趋势稳定的数据或指标。

示例:某工作网站的访问量在白天(例如10:00~18:00)访问量低于1000是异常的,但在夜间(例如22:00~06:00)访问量超过1000可能是被攻击了。在这种场景下,指标的正常水位会随着时间变化而不断变化。 如果配置一个固定阈值,例如低于1000就告警,那白天访问异常时可以正常收到告警通知,但夜间如果被攻击则无法及时收到告警通知;如果使用区间检测功能,就可以智能识别正常水位,自动更新阈值区间。

应用场景监测服务的资源使用和响应性能。当某个服务出现异常,可以迅速定位问题,从而使管理员能够快速定位及时调整资源分配避免潜在的系统崩溃优化程序性能确保整个系统的稳定运行。

3.2.3.管理告警规则

可以对告警规则执行启动、停止、编辑、删除、查看告警详情等操作,还可以针对指定告警规则发送测试告警验证告警规则是否生效。

4.运行环境要求和限制

版本:Kubernetes v1.20及以上版本

运行环境:阿里云ACK集群(ACK Serverless集群暂不支持)、其他K8s集群。CentOS集群暂不支持。

支持的网络协议:HTTP1.1、MySQL、Redis、Kafka、DNS

服务器:

环境

要求

架构

x86-64

内存

建议≥4 GB,至少预留300 MB。

CPU

建议≥2 Core,至少预留0.3 Core。

内核版本

≥4.9

操作系统发行版本

Alibaba Cloud Linux 2

Alibaba Cloud Linux 3

其他操作系统:

执行以下命令,查询当前操作系统是否支持。

cat /boot/config-$(uname -r) | grep CONFIG_DEBUG_INFO_BTF

如果输出CONFIG_DEBUG_INFO_BTF=y,则表示支持。

如果输出其他内容,则表示不支持。

5.协议解析框架

基于 eBPF 来进行应用监控必须进行协议解析。

5.1.传统框架

主要流程为:数据采集、数据传递、协议解析。

首先eBPF从内核态中抓取到流量事件,包括控制事件如connect、close 等;数据事件如 read、write 等。采用 perf buffer(一种特殊 eBPF Map)来做数据传递,将事件从内核态传递至用户态进行协议解析。

这种方案导致CPU、内存占用过高,在高流量场景下错误率较高,主要体现如下:

高内存占用:数据采集中无法筛选协议,导致大量无关数据占满 perf buffer,引发内存过高。

事件丢失风险:高 QPS 导致 perf buffer 迅速填满,处理不及时会丢失事件,特别是控制层事件可能因数据层事件过多而丢失。

解析效率低:需要遍历尝试所有支持协议才能找到正确的协议,导致大量无效解析,增加 CPU 负担。

5.2.高效框架

基于传统框架中存在的问题,提出一种高效的协议解析框架,并在阿里云应用实时监控服务 ARMS “应用监控 eBPF 版”中正式发布。主要流程为:数据采集、协议推断、事件分流、协议解析(包含连接维护、数据分帧、协议解析、请求-响应匹配)。

首先eBPF从内核态中抓取到流量事件,根据协议帧头进行协议推断,可以初步判断是否是支持的协议。如果判断为“是”,后续才传递至用户态进一步解析,否则不处理。

然后根据事件类型进行分流。如控制事件放到control events perf buffer 中,数据事件放到data event perf buffer。

在用户态中,控制事件将用于连接维护。如长连接中,连接元数据信息总是相同的,不必每次都放入 perf buffer 中,只用传递连接 ID 可进一步降低网络带宽。data event perf buffer可以理解为数据流,需要进行分帧处理,从整个数据流中分解出每一帧的数据是进行协议解析的前提。

分解出单独的帧数据后将通过初步推断的协议类型去匹配解析器进一步解析。解析出请求与响应后,需要去匹配请求和响应,完成一个完成的可观测记录,即 record,后续也将通过 record 来生成可观测中的 Span。

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

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

相关文章

springboot 网上商城系统-计算机毕业设计源码08789

摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设网上商城系统。 本设…

算法课程笔记——点积叉积

算法课程笔记——点积叉积

Kotlin设计模式:享元模式(Flyweight Pattern)

Kotlin设计模式:享元模式(Flyweight Pattern) 在移动应用开发中,内存和CPU资源是非常宝贵的。享元模式(Flyweight Pattern)是一种设计模式,旨在通过对象重用来优化内存使用和性能。本文将深入探…

2023年零信任落地关键词:整合、身份、普及

2023年,全球企业纷纷加快了落地零信任的步伐。虽然落地的功能、落地的场景不尽相同,但企业对零信任的诉求、落地零信任的优先级却殊途同归,不同的零信任产品的应用场景也日益明晰。 全面整合和协同运行,是2023年企业用户对零信任…

一文搞懂Linux多线程【上】

目录 🚩引言 🚩再次理解页表 🚩初识线程 🚩线程和pthread库 🚀线程创建 🚩线程的资源共享问题 🚩线程的优缺点 🚩引言 今天,我们开始学习Linux中的线程部分。Lin…

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引…

react学习——09react中props属性

1、基本使用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><!-- 移动端适配--><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>1_props基…

行业原型:智能资产管理平台-个人资产服务

​行业原型预览链接&#xff1a;&#xff08;请与班主任联系获取原型文档&#xff09; 文件类型&#xff1a;.rp 支持版本&#xff1a;Axrure RP 8 文档名称&#xff1a;金融&#xff1a;智能资产管理平台&#xff08;个人资产服务&#xff09; 文件大小&#xff1a;1.75 MB 智…

光伏发电项目是如何提高开发效率的?

随着全球对可再生能源需求的持续增长&#xff0c;光伏发电项目的高效开发成为关键。本文将深入探讨如何在实际操作中提高光伏发电项目的开发效率。 一、优化选址流程 1、数据收集与分析&#xff1a;利用卫星地图和遥感技术&#xff0c;收集目标区域的光照资源、地形地貌、阴影…

chrome 使用本地替换功能替换接口返回内容

前言 在web开发或测试过程中&#xff0c;我们经常会需要修改接口返回值来模拟数据进行开发或测试。 常用的方式一般通过抓包工具&#xff0c;如charles&#xff0c;或fildder 的功能。 例如我们可以使用charles打断点的方式&#xff0c;或者使用charles的map local 功能进行…

手工微调embedding模型,让RAG应用检索能力更强

BAAI/bge-small-en 目前HuggingFace的MTEB(海量文本Embedding基准)排行榜上排名第一的Embedding模型是big-large-en&#xff0c;它由北京人工智能研究院(BAAI&#xff0c;智源)开发。它是一种预训练的transformer模型&#xff0c;可用于各种自然语言处理任务&#xff0c;如文本…

艺术家电gorenje x 设计上海丨用设计诠释“生活的艺术”

2024年6月19日—22日&#xff0c;艺术家电gorenje亮相“设计上海”2024&#xff0c;以“gorenje是家电更是艺术品”为题&#xff0c;为人们带来融入日常的艺术之美。设计上海2024不但汇集了国内外卓越设计品牌和杰出独立设计师的家具设计作品&#xff0c;还联合国内外多名设计师…

ESP-01S 模块使用串口助手获取天气参数

ESP-01S 模块 接线AT命令ESP01S联网测试并获取心知天气测试流程 接线 引脚接线3V3接电源RST外部复位引脚&#xff0c;低电平复位。可以悬空或者接高电平。EN接高电平&#xff0c;高电平使能。TX接CH340的RXRX接CH340的TXIO0悬空&#xff1a;Flash Boot&#xff0c;工作模式。下…

智慧在线医疗在线诊疗APP患者端+医生端音视频诊疗并开处方

智慧在线医疗&#xff1a;音视频诊疗新纪元 &#x1f310; 智慧医疗新篇章 随着科技的飞速发展&#xff0c;智慧医疗正逐步走进我们的生活。特别是在线医疗&#xff0c;凭借其便捷、高效的特点&#xff0c;已成为许多患者的首选。而其中的“智慧在线医疗患者端医生端音视频诊疗…

Jrebel热部署

1、下载包 2、解压后本地启动exe文件 3、配置 http://127.0.0.1:8888/{GUID} https://www.guidgen.com/ 获取 GUID 4、激活后&#xff0c;Jrebel针对本项目模块进行勾选 5、如果报错&#xff0c;setting设置offine

代码随想录训练营Day 69|并查集理论基础、卡码网107.寻找存在的路径

1.并查集理论基础 并查集理论基础 | 代码随想录 并查集可以解决什么问题呢&#xff1f; 主要就是集合问题&#xff0c;两个节点在不在一个集合&#xff0c;也可以将两个节点添加到一个集合中。 注意&#xff1a;求根是求箭头出发的数 路径压缩&#xff1a;求根的根。把根的根的…

解析JSON字符串

QJsonDocument类用于解析JSON字符串&#xff0c;

详解 | DigiCert EV代码签名证书

简介 DigiCert EV 代码签名证书是一种高级别的代码签名证书&#xff0c;它不仅提供了标准代码签名证书的所有安全特性&#xff0c;还增加了额外的身份验证流程&#xff0c;以确保软件开发者或发布者的身份得到最严格验证。这对于提升软件的信任度、防止恶意篡改和确保下载安全…

vue3的网站项目内嵌到别的项目内部,通过用户名免登陆

前言&#xff1a;想把vue3的网站项目1内嵌到别的项目2内部。 希望在项目2内&#xff0c;点击一个按钮就出现一个页面进入项目1&#xff0c;其中用户名密码是互通的&#xff08;这一块需要接口调用实现同步&#xff09;&#xff0c;仔细一想&#xff0c;原理应该是提供一个地址链…

【Python系列】FastAPI 中的路径参数和非路径参数解析问题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…