應用監控 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)獲取幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章