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
-
代码热点,通过持续剖析技术定时采集请求线程堆栈快照,真实还原代码执行的第一现场。
-
自定义扩展,方便快速定制开发。
-
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)获得在线技术支持。
相关文章:
Golang Agent 可观测性的全面升级与新特性介绍
作者:张海彬(古琦) 背景 自 2024 年 6 月 26 日,ARMS 发布了针对 Golang 应用的可观测性监控功能以来,阿里云 ARMS 团队与程序语言与编译器团队一直致力于不断优化和提升该系统的各项功能,旨在为开发者提…...
SpringBoot的开篇 特点 初始化 ioc 配置文件
文章目录 前言SpringBoot发展历程SpringBoot前置准备SpringBoot特点 SpringBoot项目初始化项目启动Springboot的核心概念IOC概念介绍Bean对象通过注解扫描包 例子配置文件 前言 SpringBoot发展历程 最初,Spring框架的使用需要大量的XML配置,这使得开发…...
docker 可用镜像服务地址(2024.10.25亲测可用)
1.错误 Error response from daemon: Get “https://registry-1.docker.io/v2/” 原因:镜像服务器地址不可用。 2.可用地址 编辑daemon.json: vi /etc/docker/daemon.json内容修改如下: {"registry-mirrors": ["https://…...
【SQL实验】表的更新和简单查询
完整代码在文章末尾 在上次实验创建的educ数据库基础上,用SQL语句为student表、course表和sc表中添加以下记录 【SQL实验】数据库、表、模式的SQL语句操作_创建一个名为educ数据库,要求如下: (下面三个表中属性的数据类型需要自己设计合适-CSDN博客在这篇博文中已经…...
【C++】 string的了解及使用
标准库中的string类 在使用string类时,必须包含#include头文件以及using namespace std; string类的常用接口说明 C中string为我们提供了丰富的接口来供我们使用 – string接口文档 这里我们只介绍一些常见的接口 string类对象的常见构造 #include <iostrea…...
【K8S】kubernetes-dashboard.yaml
https://raw.githubusercontent.com/kubernetes/dashboard/v3.0.0-alpha0/charts/kubernetes-dashboard.yaml 以下链接的内容: 由于国内访问不了,找到一些方法下载了这个文件内容, 部署是mages 对象的镜像 WEB docker.io/kubernetesui/dash…...
远程root用户访问服务器中的MySQL8
一、Ubuntu下的MySQL8安装 在Ubuntu系统中安装MySQL 8.0可以通过以下步骤进行1. 更新包管理工具的仓库列表: sudo apt update 2. 安装MySQL 8.0,root用户默认没有密码: sudo apt install mysql-server sudo apt install mysql-client 【…...
解释一下 Java 中的静态变量(Static Variable)和静态方法(Static Method)?
今天来和大家深入探讨一下 Java 中的静态变量和静态方法,并通过一些具体的例子来理解它们在实际开发中的应用。 静态变量(Static Variable) 静态变量,也称为类变量,是在类的层次上共享的变量。这意味着无论创建了多少…...
【Linux】————磁盘与文件系统
作者主页: 作者主页 本篇博客专栏:Linux 创作时间 :2024年10月17日 一、磁盘的物理结构 磁盘的物理结构如图所示: 其中具体的物理存储结构如下: 磁盘中存储的基本单位为扇区,一个扇区的大小一般为512字…...
平衡控制——直立环——速度环
目录 平衡控制原理 平衡控制模型 平衡控制中基于模型设计与自动代码生成技术 速度环应用原理 速度控制模型 平衡控制原理 下图是一个单摆模型,对其进行受力分析如图。 在重力作用下,单摆受到和角度成正比,运动方向相反的回复力。而且在空气中运动的单摆,由于受…...
面试简要介绍hashMap
jdk8之前,hashmap采用的数据结构是数组链表,jdk8之后采用的数据结构是数组链表/红黑树。hashmap的数据以键值对的形式存在,如果两个元素的hash值相同,就会发生hash冲突,被放到同一个链表上--->如何解决hash冲突---&…...
HTTPS如何实现加密以及SSL/TSL加密的详细过程
通过将服务器从 HTTP 提升到 HTTPS 加密,数据在客户端和服务器之间的传输过程中的确得到了安全保护。以下是这种实现加密的机制以及客户端需要做的事情的详细说明。 为什么这样就实现了加密 SSL/TLS 协议: HTTPS 使用 SSL(安全套接层&#x…...
Golang | Leetcode Golang题解之第516题最长回文子序列
题目: 题解: func longestPalindromeSubseq(s string) int {n : len(s)dp : make([][]int, n)for i : range dp {dp[i] make([]int, n)}for i : n - 1; i > 0; i-- {dp[i][i] 1for j : i 1; j < n; j {if s[i] s[j] {dp[i][j] dp[i1][j-1] …...
(done) 什么 RPC 协议? remote procedure call 远程调用协议
来源:https://www.bilibili.com/video/BV1Qv4y127B4/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 可以理解为,调用远程服务器上的一个方法/函数/服务的方式,同时隐藏网络细节 一个 python3 …...
PCL 基于Ransac提取误匹配点对
目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 基于RANSAC的误匹配点对提出函数 2.1.2 点云可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新) 一、…...
光速写作 2.0.5 | 专注AI写作,海量素材库
光速写作是一款专为解决写作难题设计的应用。它具有以下功能:- 「AI写作」:帮助分析题目、整理写作思路,合成作文,写出好文章。- 「作文批改」:拍照上传作文后,进行全文点评和分句点评,并进行全…...
【已解决,含泪总结】非root权限在服务器上配置python和torch环境,代码最终成功训练(一)
配置Python环境 没有root权限服务器上有多个python环境但没有自己想要的怎么办 之前跑别的实验的时候改过指定的python3.7版本,但是居然我过了一段时间之后,再次打开,python版本居然又回到2.7(服务器/usr/下的默认python版本&am…...
公安基础知识-通哥
公安机关办理行政案件能力 考点一 治安案件追溯失效 6个月 派出所只有警告和500块以下罚款 公安是行政机关 1、治安小事、刑事案件大事 2、殴打他人-轻伤-(刑事案件)、轻微伤(治安案件) 3、《治安处罚法》《刑法》 4、只能构…...
Python画图|极坐标下的散点图动态输出
【1】引言 前序已经学习过散点图输出和极坐标图输出,文章链接包括但不限于下述部分: python画散点图|scatter()函数小试牛刀(入门级教程)_python ax.scatter-CSDN博客 python画图|极坐标中画散点图_极坐标上的散点图-CSDN博客 …...
揭开MySQL并发中的“死锁”之谜:从原理到解决方案的深度解析
目录 1. 环境准备:创建“账户”和“标记”表1.1 创建 dl_account_t 表1.2 创建 dl_mark_t 表 2. 死锁详解2.1 死锁情景一:相反加锁顺序导致的死锁2.2 死锁情景二:唯一索引冲突引发的死锁 3. 事务隔离级别与锁机制4. 预防与解决死锁的方法4.1 …...
【论文阅读】Reliable, Adaptable, and Attributable Language Models with Retrieval
文章目录 OverviewCurrent Retrieval-Augmented LMsArchitectureTraining Limitations & Future Work Overview Parametic language models的缺点: 事实性错误的普遍存在验证的难度(可溯源性差)难以在有顾虑的情况下排除某些序列适应调整…...
A-Frame负责人Diego Marcos分享WebXR与开源AI的未来
一、引言 在最近的一次播客访谈中,《虚拟现实之声》的主持人Kent Bye与A-Frame的创始人Diego Marcos展开了一场关于WebXR技术及其未来发展潜力的对话。Diego不仅是A-Frame的创始人,同时也是WebXR规范的原创者之一。本次访谈不仅回顾了WebXR的发展历程,还探讨了开源AI技术在…...
【STM32-HAL库】火焰传感器(STM32F407ZGT6)(附带工程下载链接)
一、TEMT6000光照强度传感器 火焰传感器是一种能够检测火焰的传感器,它通过检测空气中的特定波长的光线来检测火焰的存在,并输出一个信号来通知系统发生了火灾 工作原理 火焰传感器的工作原理基于光学检测技术。当火焰燃烧时,会产生一些特…...
git merge没有生成合并提交
有时候本地使用gitmerge命令的时候会发现,合并后的log里边并没有一次merge branch的log,而是把合并分支上的所有commit log都带过来。 这是因为当执行合并操作时,如果目标分支的提交历史是源分支的直接延续(即,目标分支…...
算法题总结(十九)——图论
图论 DFS框架 void dfs(参数) { if (终止条件) {存放结果;return; }for (选择:本节点所连接的其他节点) {处理节点;dfs(图,选择的节点); // 递归回溯,撤销处理结果 } }深搜三部曲 确认递归函数,参数确认终止条件处理目前搜索节…...
android studio编译错误提示无法下载仓库
一、调整方法之一 buildscript {repositories {google()jcenter()//maven { url https://maven.aliyun.com/repository/google }//maven { url https://maven.aliyun.com/repository/central }}dependencies {// classpath "com.android.tools.build:gradle:4.1.1"c…...
基于SpringBoot的时装购物系统【源码】+【论文】
时装购物系统是一个基于Springboot框架开发的Web应用系统,数据库使用的是MySQL。该系统充分考虑了代码的可读性、实用性、扩展性和通用性,页面设计简洁、操作方便,易于后期维护。系统分为管理员和用户两大角色,前台页面提供了商品…...
自动化结账测试:使用 Playwright确保电商支付流程的无缝体验【nodejs]
使用 Playwright 掌握端到端结账测试 在电商领域,结账流程是用户体验中至关重要的一环。确保这一流程的稳定性和可靠性对于维护客户满意度和转化率至关重要。在本文中,我们将探讨如何使用 Playwright 进行端到端的结账测试,确保您的结账系统…...
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-25
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-25 0. 前言 大语言模型在很多领域都有成功的应用,在本期计算机前沿技术进展研究介绍中,我们将带来一篇用大语言模型进行诺贝尔文学作品分析的论文。虽然有一定趁最近诺贝尔奖热潮的意味&…...
【读书笔记-《网络是怎样连接的》- 5】Chapter2_4-网卡的工作过程
IP模块组装好的数据包,就可以交给网卡进行发送了。本篇就来介绍网卡在发送数据包时的工作过程。 1 以太网基础 以太网是一种为多台计算机能够彼此自由和廉价地相互通信而设计的通信技术,原型如下图所示。这种网络的本质其实是一根网线,通过…...
屏山县龙华镇中心村建设招标网站/网络营销推广方案有哪些
文件上传 文件上传几乎我们天天都在使用,在工作中也会遇到这样的需求。那么我们如何前端和后端配合上传文件呢? 完整案例下载 我们在开始讲解之前,我已经提前为大家准备了一个前后端完整的案例 gitee地址: 上传文件ÿ…...
输入公司名字找不到公司网站/网站排名系统
iphonex 已经上线有一段时间了,作为业界刘海屏幕第一款机型,导致全屏不能正常的全屏显示了,,所以需要对 iphonx 适配,下面就详细说说如何适配 先看一张适配前后的图: iphonex 提供的 meta 头 <meta name"vi…...
广州网站建设第一公司/小说关键词提取软件
摘要:从零开始写爬虫,初学者的速成指南! 本期我们来聊聊URL去重那些事儿。以前我们曾使用Python的字典来保存抓取过的URL,目的是将重复抓取的URL去除,避免多次抓取同一网页。爬虫会将待抓取的URL放在todo队列中&#x…...
婚纱设计网站首页/电话营销系统
面试中最难回答的一个问题:你的优点和缺点分别是什么? 面对这个问题,很多人自作聪明的会把自己的优点当做缺点去说,比如:我最大的优点是认真,我最大的缺点就是太认真了。 这么回答只会让面试官觉得你是在装…...
雨花区区网站建设公司/沈阳网站seo
摘要: bootstrap栅栏系统css中的col-xs-*、col-sm-*、col-md-* 的意义: .col-xs- 超小屏幕 手机 (<768px) .col-sm- 小屏幕 平板 (≥768px) .col-md- 中等屏幕 桌面显示器 (≥992px) .col-lg- 大屏幕 大桌面显示器 (≥1200px) 首先说明: 1、col…...
企业做网站有发展么/中文搜索引擎有哪些平台
SQL Server数据库镜像的页面自动修复原理 主库页面损坏 镜像库页面损坏 LSN用来保证事务的时序 LSN保存在每个数据页面的页头 在同一台机器,内存中的数据页和磁盘中的数据页保持同步依靠的是数据页头的LSN和事务日志LDF文件里的LSN 当跨机器的时候,内存中…...