首页 > 其他分享 >应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控

应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控

时间:2024-03-06 15:23:50浏览次数:22  
标签:调用 服务 监控 eBPF Golang 应用

作者:古琦

在现代软件架构中,微服务已成为构建可扩展和灵活应用程序的流行方式。每个微服务负责应用程序的一部分功能,它们共同工作以提供完整的服务。由于微服务架构的分散特性,监控变得至关重要,有效的微服务监控是确保高可用性、可靠性和服务质量的关键组成部分,它支撑了整个系统的健康运行和业务的持续增长。

随着 Kubernetes 以及容器化的技术普及,Go 语言不止应用于云原生基础组件领域,在业务场景下有非常多的新兴业务都使用 Golang 作为编程语言首选,Golang 的 RPC 框架非常多,如 Gin、Kratos、Kitex 等,Golang 在微服务生态中愈趋成熟,通过最新的 TIOBE 的查看到 Golang 的排名进入前十,做好 Golang 微服务的应用监控至关重要。

应用监控 eBPF 版通过 eBPF 的技术实现了无侵入的 Golang 微服务可观测能力,可以获取 Golang 微服务的调用详情,同时能实现无侵入的 Golang 的 CPU Profiling、数据库调用分析。

详细产品介绍:多语言应用监控最优选,ARMS 应用监控 eBPF 版正式发布

eBPF 介绍

eBPF(扩展的 Berkeley 包过滤器)是一种强大的技术,允许开发人员在 Linux 内核中安全地运行预编译的程序,而不改变内核源码或加载外部模块。这一独特的能力使得 eBPF 成为构建现代、灵活且高效的应用监控工具的理想选择。

图 1.1 eBPF 示意图

在可观测性方面,eBPF  优势尤为突出:

  • 实时性: eBPF 能够实时捕获和分析数据,为开发者提供即时的性能反馈。
  • 精确性: 通过精细的 hook 函数(hook points),eBPF 可以在系统的具体点进行监控,从而准确地收集所需数据。
  • 灵活性: 开发者可以编写定制的 eBPF 程序来监控特定事件,使其能够适应各种复杂的监控需求。
  • 低开销: eBPF 程序直接在内核空间运行,避免了传统监控工具中频繁的用户空间和内核空间之间的上下文切换。
  • 安全性: eBPF 程序在执行前必须通过内核的严格检查,确保不会危及系统安全。

Golang 微服务应用监控

将 Golang 应用添加到应用监控 eBPF 中,可以参考:https://help.aliyun.com/zh/arms/application-monitoring-ebpf/getting-started/access-application-monitoring-ebpf-version?spm=a2c4g.11186623.0.0.73527c6fgIk5te

如下图所示,将一个使用了 Gin 框架的 Golang 应用添加到应用监控eBPF中,如下图所示,在 Deployment 中增加以下配置:

添加完成后查看应用详情:

服务接口调用详情:

查看应用的调用请求详情,包含请求的 body、header、接口等信息:

持续剖析

应用监控 eBPF版 推出无侵入的应用持续剖析的能力,我们通过 eBPF 去获取应用程序的调用栈,同时在 eBPF 探针中实现对应的栈 ID 到方法的映射,可以查看应用的 CPU 火焰图,直观展现业务应用执行过程中 CPU 密集点,不需要做任何的代码修改。如下使用 Go-Gin 框架提供的 Http 服务,火焰图如下所示:

可以查看到处理 Http 请求的 CPU 百分比:

如果在服务中加入一个循环打印数据的功能:

func Print() {  for {    fmt.Println("This will print indefinitely every second.")    time.Sleep(1 * time.Second) // 每秒打印一次  }}

可以从火焰图中找到对应的 Print 函数,能快速定位 Golang 微服务中 CPU 的占比:

数据库分析

数据库是业务应用中使用最多的中间件产品,监控业务应用对数据的调用能够快速发现问题,比如慢 sql、调用数据库的响应时间等,应用监控 eBPF 版提供了针对数据库的调用分析页面,如下所示:

查看数据库调用的详情,其中展示了数据库的调用次数、sql 语句(聚合后)、平均耗时、慢调用次数(500ms)等信息。

网络监控

网络监控数据描述了应用对应的每个实例接收的包数、发送包数、Tcp Latency、Tcp 重传、Tcp Drop。

目前,应用监控 eBPF 版处于免费使用阶段,欢迎开发者体验与使用,点击此处,立即体验。

如果您在使用应用监控 eBPF 版中有任何问题,请联系答疑钉钉群(群号:35568145)获取帮助。

标签:调用,服务,监控,eBPF,Golang,应用
From: https://www.cnblogs.com/alisystemsoftware/p/18056695

相关文章

  • 记一次 .NET某设备监控自动化系统 CPU爆高分析
    一:背景1.讲故事先说一下题外话,一个监控别人系统运行状态的程序,结果自己出问题了,有时候想一想还是挺讽刺的,哈哈,开个玩笑,我们回到正题,前些天有位朋友找到我,说他们的系统会偶发性CPU爆高,CPU上去了就下不来了,让我帮忙看一下怎么回事,而且自己也分析过了,没找到哪里有问题,写监控的都是......
  • CEIWEI CommMonitor 串口监控精灵v12.7 最新版 串口过滤; 串口监控; SerialPort M
    CEIWEICommMonitor串口监控精灵是用于RS232、RS422串口协议、ModbusRTU/ASCII协议过滤监控抓包的专业工具软件程序。CEIWEICommMonitor监控记录和分析系统中的所有串口活动,并不占用串行端口;追踪应用程序或驱动程序开发,串口设备测试和优化等过程中可能出现的问题的理想工具......
  • golang标准库之 fmt
    目录fmt库1.获取输入(1)fmt.Scan(常用)(2)fmt.Scanln(常用)(3)fmt.Scanf2.print、println、printf输出3.Sprint(了解即可)4.Errorf(了解即可)5.格式化占位符(1)通用占位符(2)布尔型占位符(3)整型占位符(4)浮点数与复数占位符(5)字符串和[]byte占位符(6)指针占位符(7)宽度标识符(8)其他fmt库fmt包实现了......
  • golang标准库之 flag、strconv
    目录一、flag库1.flag的简单替代2.flag的参数类型3.flag参数的定义(1)flag.Type()(2)flag.TypeVar()4.flag解析命令行参数5.flag其他方法二、strconv库1.string转换为int类型2.int转换为string类型3.Parse系列函数(1)ParseBool()(2)ParseInt()(3)ParseUnit()(4)ParseFloat()(5)示例4.Fo......
  • golang标准库之 time
    目录time库1.时间类型2.时间戳(1)时间格式转化为时间戳(2)时间戳转换为时间格式3.时间间隔类型4.时间的操作(1)时间格式化(2)解析字符串类型的时间(3)时间加时间间隔(4)两个时间之差(5)时间是否相同(6)判断时间前后(7)定时器time库time库是Go语言内置的库,用来定义和操作时间、日期time.Sl......
  • golang进阶之结构体
    目录一、结构体(Go的面向对象)1.结构体的含义2.type关键字(1)自定义新类型(2)类型的别名(3)自定义类型和类型别名的区别二、结构体的定义三、结构体实例化1.基本实例化2.匿名结构体2.指针型结构体3.取结构体的地址实例化4.结构体指针进阶实例四、结构体的初始化1.未初始化的结构......
  • 代码随想录算法训练营第三十七天 | 738. 单调递增的数字,968.监控二叉树
    968.监控二叉树 已解答困难 相关标签相关企业 给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。 示例1:输入:[0,0,null,0,0]输出:1......
  • 实时图像识别技术:在监控与安防领域的革新应用
    实时图像识别技术在监控与安防领域的应用正在引发一场革新。这种技术能够实现对监控视频中的实时图像进行快速、准确的识别和分析,从而为安防工作提供了前所未有的便利和效率。首先,实时图像识别技术大大提高了监控系统的智能化水平。传统的监控系统往往只能提供简单的录像和回放功......
  • 代码随想录算法训练营第三十六天| ● 738.单调递增的数字 ● 968.监控二叉树 ● 总
    单调递增的数字 题目链接:738.单调递增的数字-力扣(LeetCode)思路:从左向右验证是否按位单调递增,如果出现递减的区间,则从该位开始验证该位减1后是否比左边的相邻位大,如果不符合就接着向左寻找这样的位,如果找到了,则将该位前面的位复制到结果中,该位减1加入结果,该位之后的位全部改......
  • 如何使用/proc文件系统监控Linux系统?
    如何使用/proc文件系统监控Linux系统?原创 漫谈君 运维漫谈 2024-02-2909:58 江苏/proc是Linux系统中的一个虚拟文件系统,提供了对运行中内核和进程的实时访问。这个目录下包含了很多以数字命名的目录,每个目录代表一个运行中的进程或者系统信息。每个进程目录下有许多......