作者:古琦
在现代软件架构中,微服务已成为构建可扩展和灵活应用程序的流行方式。每个微服务负责应用程序的一部分功能,它们共同工作以提供完整的服务。由于微服务架构的分散特性,监控变得至关重要,有效的微服务监控是确保高可用性、可靠性和服务质量的关键组成部分,它支撑了整个系统的健康运行和业务的持续增长。
随着 Kubernetes 以及容器化的技术普及,Go 语言不止应用于云原生基础组件领域,在业务场景下有非常多的新兴业务都使用 Golang 作为编程语言首选,Golang 的 RPC 框架非常多,如 Gin、Kratos、Kitex 等,Golang 在微服务生态中愈趋成熟,通过最新的 TIOBE 的查看到 Golang 的排名进入前十,做好 Golang 微服务的应用监控至关重要。
应用监控 eBPF 版通过 eBPF 的技术实现了无侵入的 Golang 微服务可观测能力,可以获取 Golang 微服务的调用详情,同时能实现无侵入的 Golang 的 CPU Profiling、数据库调用分析。
详细产品介绍:多语言应用监控最优选,ARMS 应用监控 eBPF 版正式发布
eBPF(扩展的 Berkeley 包过滤器)是一种强大的技术,允许开发人员在 Linux 内核中安全地运行预编译的程序,而不改变内核源码或加载外部模块。这一独特的能力使得 eBPF 成为构建现代、灵活且高效的应用监控工具的理想选择。
图 1.1 eBPF 示意图
在可观测性方面,eBPF 优势尤为突出:
将 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)获取帮助。