Golang Agent 可观测性的全面升级与新特性介绍

作者:张海彬(古琦)

背景

自 2024 年 6 月 26 日,ARMS 发布了针对 Golang 应用的可观测性监控功能以来,阿里云 ARMS 团队与程序语言与编译器团队一直致力于不断优化和提升该系统的各项功能,旨在为开发者提供更加全面和深入的应用性能监控体验。

在这段时间内,ARMS 推出了多项关键功能,包括:

  • 全链路的追踪: 支持前端、网关、后端服务的全链路追踪,实现端到端的全链路打通。
  • CPU Profiling: 通过提供详细的 CPU 使用情况分析,帮助开发者识别性能瓶颈,优化代码执行效率。
  • 内存 Profiling: Golang Agent 引入内存使用分析工具,帮助监测内存分配和泄漏情况,提高应用的内存管理能力,确保服务的稳定性。
  • 本地错慢全采: 新增的错慢全采功能使得系统能够捕捉到应用中的错误和延迟事件,从而帮助团队快速诊断问题,提升用户体验。
  • 新增插件: 为扩展监控能力,Golang Agent 新增多个插件,支持不同场景和需求,用户可以灵活组合使用,满足个性化监控需求。
  • 日志 Trace 关联: 通过将日志与执行路径关联,提升了问题追踪的效率,开发者能够快速定位故障根源,从而减少故障恢复时间。
  • 动态开关: 为了更好地满足不同环境和使用场景的需求,Golang Agent 实现了动态开关功能,允许用户灵活控制监控开启和关闭,提高系统的灵活性和可管理性。
  • 性能提升: 性能上相比 1.0.0 提升了 35%+ 以上,极大的降低了资源的消耗。
  • Windows: 支持 Windows 环境编译、运行,与 Linux、Mac 上都有相同的体验。

通过这一系列的功能升级,ARMS 希望能够帮助开发者更好地理解和优化他们的 Golang 应用,从而提升整体服务质量和用户满意度。未来,ARMS 将继续关注用户反馈,持续改进和扩展监控功能,为 Golang 应用的可观测性提供更强有力的支持。接下来我将逐个介绍一下 Golang Agent 的新增功能。

全链路追踪

为了实现前端 + 网关 + 后端服务的全链路追踪,Golang Agent 支持了常见的 Trace 透传协议如 w3c、b3、jaeger、EagleEye,实现多个不同类型的语言的应用之间 Trace 透传,Golang 服务内部支持 Span Context 的透传,无需要手动传递 Context,即可实现服务内部链路打通,同时还支持跟 OpenTracing SDK、OTel SDK 兼容,针对自定义的 Span 同样可以做到传递。

持续剖析

pprof 是 Go 语言内置的性能分析工具,允许开发者分析程序的 CPU 和内存使用情况。通过引入 net/http/pprof 包,开发者可以在 HTTP 服务器中开启性能分析功能,从而实时获取程序的运行状态、堆栈信息和内存分配情况等。

但是手动的在代码里面添加 pprof 的端口,获取对应的应用运行情况需要请求这个应用,同时需要有图表展示,使用比较非常麻烦,同时长时间开启 pprof 可能会有一定的性能开销,因此 Agent 在功能上支持随开随关,可以通过开关动态控制这个采集过程,还支持了 pprof 数据的在线查看和对比。

CPU Profiling

通过开启持续剖析的能力,就可以在应用诊断上查看到对应时间段的 CPU Profiling  数据,同时可以支持 Profiling 数据的对比,通过 CPU Profiling 的视图可以非常方便找出服务的性能瓶颈。

内存 Profiling

除了 CPU Profiling 外,内存的 Profiling 同样重要,对于分析内存的异常分配、内存泄漏起到关键作用,通过开关打开内存热点后,在性能分析类型下可以看到应用的内存分配大小、内存分配的次数。

本地错慢全采

由于采样率的限制,并非每条调用链都能被采集和上报,这在遇到问题时常常导致无法追踪到应用的调用链路。为了解决这一问题,除了调整采样率外,在 Agent 中针对错误和处理缓慢的请求实施全采样策略。这一措施确保所有发生的错误和缓慢请求都能被及时捕捉到,从而为后续问题的分析提供有效依据。

同时,为了优化性能,对如 Redis 等关键服务的调用进行压缩处理,以避免过多的 Span 导致 Trace 链路变得过于冗长。这一措施不仅减少了上报的数据量,还提升了系统整体的追踪效率。通过这些改进希望能够更准确地定位和分析应用中的问题,为开发团队提供更可靠的支持。

可以看到优化前的 Span 展示如下所示(这里对 Redis 进行了循环 10 次的 get、set 请求):

开启错慢全采后:

Span 减少非常多,同时对于错误和慢的 Span 会全部上报,这样既保证了问题查询,又能进行数据压缩降低成本。

新增插件

从 1.1.0 版本的 20 款插件,目前 Golang Agent 的 1.3.0 版本支持了 38 款插件,新增了很多常用的 SDK 支持,如:

  • 消息:Kafka
  • RPC:hertz、thrift、iris、fiber、kratos
  • SQL/NoSQL:elasticsearch、redisv8、redisgo(https://github.com/gomodule/redigo
  • 日志框架:logrus、zap、zerolog,以及 golang 的 log、slog

对于 OpenTracing Go SDK 也做了支持,通过 OpenTracing SDK 的创建 Span、Span End 等操作都可以无需修改即可在 Trace 链路进行绑定。

针对函数计算 FCGo 的 SDK(https://github.com/aliyun/fc-runtime-go-sdk),有在函数计算下部署 Golang 应用的场景,针对 FC Event 的接收和处理的监控,使用 Golang Agent 编译对应的 FC Go 程序,在 FC 运行接收流量后可以在 ARMS 控制台查看到应用对应的监控情况。

更多的插件相关的支持和对应的版本,可以查看。

日志 Trace 关联

通过错慢全采的能力完善了 Trace 采样导致的 Span 被丢弃的问题,为了更好的定位到问题的原因,将 TraceId、SpanId 打印到对应的调用日志中,在日志插件支持方面支持了 logrus、zap、go 自身 log、slog 以及 zerolog 等日志框架。

动态开关

针对 Agent 提供的非常多的功能和插件,为了能实现功能的按需开启,在应用配置上增加了非常多动态开关能力:

1)针对每个插件,Agent 提供了插件的动态开关,默认情况下打开,如不需要采集某些 SDK 的数据,可以动态关闭。

2)日志关联配置,可以将 TraceId、SpanId 关联到对应的日志上,并在 ARMS 控制台实现日志 Trace 关联,这里可以配置对应的日志采集的 Project、LogStore 等。

3)持续剖析,可以配置 CPU Profiling、内存 Profiling 的动态开关。

4)数据库配置,可以配置是否展示 sql 语句的请求参数、sql 语句的长度配置、sql 超时配置等。

5)接口调用配置,设置接口的超时时间、对哪些接口、状态码进行过滤。

Windows

之前的版本在 Linux、Mac 上进行编译运行,在新的 1.3.0 版本中增加了对 Windows 的编译和运行的支持。

RoadMap

  1. 代码热点,通过持续剖析技术定时采集请求线程堆栈快照,真实还原代码执行的第一现场。

  2. 自定义扩展,方便快速定制开发。

  3. Golang 的内存泄漏、goroutine 泄漏等异常事件的检测

同时基于 OpenTelemetry 的协议的 Golang Agent 已经开源,目前已经发布到0.2.0 版本,支持了超过 15+ 的插件。

[1] 《全链路追踪 & 性能监控,GO 应用可观测全面升级》

[2] 应用对应的监控情况

https://help.aliyun.com/zh/arms/application-monitoring/user-guide/use-the-arms-golang-probe-in-function-compute-fc-environment?spm=a2c4g.11186623.0.0.6b821af5fydalG

[3] 更多的插件相关的支持和对应的版本

https://help.aliyun.com/zh/arms/application-monitoring/developer-reference/go-components-and-frameworks-supported-by-arms-application-monitoring?spm=5176.arms.console-base_help.dexternal.4c0df16735iKF3

[4] Golang Agent 已经开源

https://github.com/alibaba/opentelemetry-go-auto-instrumentation

点击此处立即开通 ARMS - 应用监控,享受每月 50GB 免费额度!加入钉钉群(群号:35568145)获得在线技术支持。

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

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

相关文章

基于SpringBoot的中药材进存销管理系统设计与实现

摘要 中药材进存销管理系统是为了满足中药材生产和销售企业的高效管理需求,涵盖了药材采购、库存管理和销售跟踪等主要功能。本系统采用Spring Boot框架进行开发,结合了前端和数据库设计,构建了一个实用的中药材管理平台,为企业提…

游戏服务器被攻击有办法防护吗

游戏服务器受到攻击时比较常见的。就算是刚上线的游戏,都会有被攻击的时候。游戏服务器受到攻击的原因以及解决方案有哪些呢? 游戏服务器被攻击的原因有哪些呢? 1、常见的攻击,大部分来自于同行之间的恶意竞争,你的游…

【QT】Qt窗口(上)

个人主页~ Qt窗口 一、菜单栏二、工具栏三、状态栏四、浮动窗口 Qt窗口是通过QMainWindow类来实现的,我们之前的学习是通过QWidget类实现的 QMainWindow包含一个菜单栏Menu Bar②,多个工具栏Tool Bars③,多个浮动窗口Dock Widgets&#xff0c…

OpenRTP 传输增加OpenRTPServer

开源地址 最近增加了OpenRTPServer, 已经修改完成一版放在了目录下,window和linux下编译都成功了,不过由于修改代码CMakefile 需要修改,先放放 OpenRTP开源地址 vlc得纠错传输方式 我发现我代码写错以后,vlc 依然能…

大数据Azkaban(二):Azkaban简单介绍

文章目录 Azkaban简单介绍 一、Azkaban特点 二、Azkaban组成结构 三、Azkaban部署模式 1、solo-server ode(独立服务器模式) 2、two server mode(双服务器模式) 3、distributed multiple-executor mode(分布式多…

【Rust】环境搭建

▒ 目录 ▒ 🛫 导读需求 1️⃣ 安装Chocolatey安装依赖 2️⃣ 安装RustRover安装toolchain(rustup、VS)重启配置生效设置安装插件 📖 参考资料 🛫 导读 需求 重装系统,记录下环境搭建遇到的问题。 1️⃣ …

【最全基础知识2】机器视觉系统硬件组成之工业相机镜头篇--51camera

机器视觉系统中,工业镜头作为必备的器件之一,须和工业相机搭配。工业镜头是机器视觉系统中不可或缺的重要组成部分,其质量和性能直接影响到整个系统的成像质量和检测精度。 目录 一、基本功能和作用 二、分类 1、按成像方式分 2、按焦距分 3、按接口类型分 4、按应用…

如何制定有效的学习计划

文章目录 第一章:目标设定1.1 目标的重要性1.2 SMART原则1.3 目标设定公式 第二章:时间管理2.1 时间的重要性2.2 制定时间表2.3 时间管理公式2.4 番茄工作法2.5 时间分配公式 第三章:学习策略3.1 学习方法3.2 学习材料的选择3.3 学习效果公式…

量子计算突破:下一个科技革命的风口浪尖在哪里?

内容概要 在当今科技飞速发展的时代,量子计算如同一颗璀璨的明珠,正闪烁着无尽的可能性。它不仅是解决科学难题的钥匙,更是即将引领科技革命的先锋。如今,随着技术的不断突破,量子计算已经步入了一个崭新的阶段。想象…

【ZZULI】数据库第二次实验

【ZZULI】数据库第二次实验 创建学生信息管理系统的数据库通过T-SQL语句创建学生表、课程表、选课表创建学生表创建课程表创建选课表 修改表结构。为SC表添加写的列,列名为备注修改备注列的数据长度。删除SC表的备注列。 通过T-SQL语句对表的列添加约束,…

iOS静态库(.a)及资源文件的生成与使用详解(OC版本)

引言 iOS静态库(.a)及资源文件的生成与使用详解(Swift版本)_xcode 合并 .a文件-CSDN博客 在前面的博客中我们已经介绍了关于iOS静态库的生成步骤以及关于资源文件的处理,在本篇博客中我们将会以Objective-C为基础语言…

实验:使用Oxygen发布大型手册到Word格式

此前,我曾发表过一篇文章《结构化文档发布的故事和性能调优》,文中讨论了在将大型DITA手册转换为PDF格式时可能遇到的性能挑战及相应的优化策略。 近日,有朋友咨询,若将同样的大型手册输出为MS Word格式,是否也会面临…

从0到1,用Rust轻松制作电子书

我之前简单提到过用 Rust 做电子书,今天分享下如何用Rust做电子书。制作电子书其实用途广泛,不仅可以用于技术文档(对技术人来说非常方便),也可以制作用户手册、笔记、教程等,还可以应用于文学创作。 如果…

Python应用指南:利用高德地图API实现路径规划

高德路径规划API是一套基于HTTP协议的接口服务,旨在为开发者提供便捷的路径规划解决方案。该API支持多种出行方式,包括步行、公交和驾车,能够满足不同场景下的路径查询需求。通过调用这些API,用户可以获得从起点到终点的最优路径建…

【Web.路由】——路由原理

这篇文章,我们来讲一讲什么是路由。 路由是 将用户请求地址映射为一个请求委托的过程,负责匹配传入的Http请求,然后将这些请求发送到应用的可执行终结点。 这里需要注意一个内容,发送到应用的可执行终结点。 路由的分类&#x…

大模型落地,要追求极致的务实主义

图源:AI生成 ▎****更快用上最新的大模型,是不是就赢定了? “能够像人类一样操作电脑。”这一堪称革命性的新技能来自10月23日Anthropic最新推出的升级版Claude 3.5 Sonnet模型,据介绍该模型不仅各项性能指标上取得显著提升&…

MobileNetV2实现实时口罩检测tensorflow

项目源码获取方式见文章末尾! 回复暗号:13,免费获取600多个深度学习项目资料,快来加入社群一起学习吧。 **《------往期经典推荐------》**项目名称 1.【Informer模型复现项目实战】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【…

机器学习 - 概述、数据集、Scikit-learn

目录 一、人工智能概述1、概念2、应用领域 二、机器学习1、概念2、数据集的构成3、算法分类a、监督学习b、无监督学习 4、开发流程5、可用数据集总结 三、Scikit-learn1、介绍2、安装3、数据集API介绍4、数据集返回值介绍5、数据集的划分6、数据集划分的API介绍7、案例a、获取鸢…

sass软件数据架构思路——未来之窗行业应用跨平台架构

一、SAAS多商户数据库 1.1 SaaS 多商户数据库的全部商户数据放在一个服务器上 1. 成本效益:集中管理和维护一个服务器通常比维护多个独立服务器更经济,降低硬件、运维和管理成本。 2. 数据集中管理:便于进行统一的数据备份、恢复和数据治理…

高清 MV 无字幕视频素材

在当下的短视频和自媒体时代,高清无字幕的视频素材无疑是创作者们的“得力助手”。不管是用于剪辑情感励志视频、制作搞笑段子,还是创作风景航拍视频,优质的素材库都能让你的创作如虎添翼。今天,我就为大家介绍几个海外的高质量素…