应用监控 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)获取帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3.4日java作业---华为手机小米手机入库问题

​​​​​​​ ​​​​​​​ ​​​​​​​ 【案例】 任务描述 现要对华为和小米两种手机产品进行入库,本案例要求编写一个模拟商品入库的程序,可以在控制台输入入库商品的数量,最后打印出仓库中所有商品详细信息…

去除PDF论文行号的完美解决方案

去除PDF论文行号的完美解决方案 1. 遇到的问题 我想去除论文的行号,但是使用网上的Adobe Acrobat裁剪保存后 如何去掉pdf的行编号? - 知乎 (zhihu.com) 翻译时依然会出现行号,或者是转成word,这样就大大损失了格式&#xff0c…

day13_微服务监控Nginx(微服务集成SBA)

文章目录 1 微服务系统监控1.1 监控系统的意义1.2 SBA监控方案1.3 SBA实战1.3.1 创建SBA服务端1.3.2 微服务集成SBA 1.4 微服务集成logback1.5 配置邮件告警 2 Nginx2.1 Nginx简介2.2 下载和安装2.2.1 方式1:window本地安装2.2.1.1 下载2.2.1.2 安装2.2.1.3 目录结构…

扫地机器人

题目描述 小明公司的办公区有一条长长的走廊,由N个方格区域组成,如下图所示。 R r 走廊内部署了K台扫地机器人,其中第台在第A,个方格区域中。已知扫地机器人每分钟可以移动到左右相邻的方格中,并将该区域清扫干净。 请…

Java 学习和实践笔记(29):super关键字的作用

1. super“可以看做”是直接父类对象的引用。可通过super来访问父类中被子类覆盖的方法或属性,这就是super关键字的作用。 在Java 学习和实践笔记(24):方法重写(override)-CSDN博客中提到,子类可以重写父类…

虚拟机中已经设置好了共享文件夹却不显示

参考链接: 小知识:ubuntu设置共享文件夹之后却找不到的解决方法_ubuntu共享文件夹设置后找不到-CSDN博客 1、输入以下指令,确定共享文件夹是否设置成功 vmware-hgfsclient 若是设置成功,会输出贡献文件夹的名字 2、如果已经设置…

设计模式之策略模式实践

设计模式之策略模式实践 先了解一下策略模式的定义是什么?解决什么问题 策略模式是一种行为设计模式,它定义了一系列算法,将每个算法封装成一个类,并使它们可以互相替换。策略模式允许客户端在运行时从可互换的算法中选择一个&a…

Jetpack Room

增删改查实战代码 1.先导入依赖 val roomVersion "2.6.1"implementation("androidx.room:room-runtime:$roomVersion")annotationProcessor("androidx.room:room-compiler:$roomVersion")2.创建实体类 package com.tiger.chapter06.entity;imp…

vulhub中ThinkPHP 多语言本地文件包含漏洞复现

ThinkPHP是一个在中国使用较多的PHP框架。在其6.0.13版本及以前,存在一处本地文件包含漏洞。当多语言特性被开启时,攻击者可以使用lang参数来包含任意PHP文件。 虽然只能包含本地PHP文件,但在开启了register_argc_argv且安装了pcel/pear的环…

腾讯云轻量服务器Windows系统使用IIS实现公网直链访问文件

windows方便所以服务器装的windows系统,windows默认不能分享文件直链,只要用IIS建个站点就行了 先弄一台有公网ip的windows系统服务器打开服务器管理器,添加这个 打开IIS右键添加网站 程序池默认,路径选个文件夹作为网站根目录 …

JavaSE(上)-Day1

JavaSE(上)-Day1 CMD终端的常见命令配置环境变量的作用?高级记事本安装(略,正版收费)各个语言的运行方式区别为什么Java可以实现跨平台?JDK和JRE的认识JDK是什么?由什么组成JRE是什么?由什么组…

C++ 基础专题容器(list)

前言 本文主要是总结常用容器&#xff0c;加深理解以及实际使用。相关完整网站参考&#xff1a;C函数和容器网站 本文主要是关注C11中的定义和用法。 list 一、类和定义 template < class T, class Alloc allocator<T> > class list; List containers are imp…

HarmonyOS NEXT应用开发案例——滑动页面信息隐藏与组件位移效果

介绍 在很多应用中&#xff0c;向上滑动"我的"页面&#xff0c;页面顶部会有如下变化效果&#xff1a;一部分信息逐渐隐藏&#xff0c;另一部分信息逐渐显示&#xff0c;同时一些组件会进行缩放或者位置移动。向下滑动时则相反。 效果图预览 使用说明 向上滑动页面…

mysql5.7.27安装图解教程和问题

mysql 5.7.27安装教程记录如下&#xff0c;分享给大家 下载文件&#xff1a; 1.下载步骤访问官方网站&#xff1a;https://www.mysql.com/ 选择Downloads下的Community 下载对应的版本点击上图的MySQL Community Server,进入下载界面&#xff1a; 找到MySQL Community Serve…

开源爬虫技术在金融行业市场分析中的应用与实战解析

一、项目介绍 在当今信息技术飞速发展的时代&#xff0c;数据已成为企业最宝贵的资产之一。特别是在${industry}领域&#xff0c;海量数据的获取和分析对于企业洞察市场趋势、优化产品和服务至关重要。在这样的背景下&#xff0c;爬虫技术应运而生&#xff0c;它能够高效地从互…

S7---FPGA- ZYNQ7100板级原理图硬件实战

视频链接 ZYNQ7100板级系统硬件实战01_哔哩哔哩_bilibili FPGA- ZYNQ7100板级原理图硬件实战 1、基于XC7Z100-2FFG900的FPGA硬件实战框图 板卡主要由ZYNQ7100主芯片&#xff0c;6片DDR3&#xff0c;1片eMMC&#xff0c;2个QSPI FLASH和一些外设接口组成。ZYNQ7100 采用Xilin…

【Flink网络数据传输(4)】RecordWriter(下)封装数据并发送到网络的过程

文章目录 一. RecordWriter封装数据并发送到网络1. 数据发送到网络的具体流程2. 源码层面2.1. Serializer的实现逻辑a. SpanningRecordSerializer的实现b. SpanningRecordSerializer中如何对数据元素进行序列化 2.2. 将ByteBuffer中间数据写入BufferBuilder 二. BufferBuilder申…

OpenHarmony教程指南—Navigation开发 页面切换场景范例

简介 在应用开发时&#xff0c;我们常常遇到&#xff0c;需要在应用内多页面跳转场景时中使用Navigation导航组件做统一的页面跳转管理&#xff0c;它提供了一系列属性方法来设置页面的标题栏、工具栏以及菜单栏的各种展示样式。除此之外还拥有动态加载&#xff0c;navPathSta…

安全增强型 Linux

书接上篇 一查看selinux状态 SELinux的状态&#xff1a; enforcing&#xff1a;强制&#xff0c;每个受限的进程都必然受限 permissive&#xff1a;允许&#xff0c;每个受限的进程违规操作不会被禁止&#xff0c;但会被记录于审计日志 disabled&#xff1a;禁用 相关命令…

操作系统原理与实验——实验四短进程优先调度

实验指南 运行环境&#xff1a; Dev c 算法思想&#xff1a; 短进程优先 (SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程&#xff0c;将处理机分配给它&#xff0c;使它立即执行并一直执行到完成 核心数据结构&#xff1a; typedef struct data{ int hour; int…