原创分享 即時效能分析工具 Pyroscope

appleboy · 2021年03月05日 · 最后由 EDDYCJY 回复于 2021年04月12日 · 1237 次阅读
本帖已被设为精华帖!

原文來自『即時效能分析工具 Pyroscope

當網站上線後,流量增加或短暫功能故障,都會造成使用者體驗相當不好,而這時該怎麼快速找到效能的瓶頸呢?通常 CPU 衝到 100% 時,有時候也蠻難複製及找出關鍵問題點。本篇會介紹一套工具叫 pyroscope,讓開發者可以快速找到效能瓶頸的程式碼。之前也寫了相關的效能瓶頸文章,可以參考看看『Go 語言用 pprof 找出程式碼效能瓶頸』或『善用 Go 語言效能測試工具來提升執行效率』,上述兩篇都是針對 Go 語言的效能分析文章,而 pyroscope 目前可以支援在 Python, RubyGo 的環境。底下筆者會針對 Go 環境做介紹。

什麼是 Pyroscope?

Pyroscope 是一套開源的效能即時監控平台,簡單的 Server 及 Agent 架構,讓開發者可以輕鬆監控代碼效能,不管你要找 10 秒或幾分鐘內的效能數據,都可以快速的即時呈現,開發者也不用在意裝了此監控會造成任何效能上的負擔。Pyroscope 背後的儲存採用 Badger 這套 Key-Value 資料庫,效能上是非常好的。目前只有支援 3 種語言 (Python, Ruby 及 Go) 未來會預計支援 NodeJS。假設您還沒導入任何效能分析工具或平台,那 Pyroscope 會是您最好的選擇。

Pyroscope 架構

如果你有打算找效能分析工具平台,Pyroscope 提供了三大優勢,讓開發者可以放心使用

  1. 低 CPU 使用率,不會影響既有平台
  2. 可儲存好幾年的資料,並且用 10 秒這麼細的顆粒度看資料
  3. 壓縮儲存資料,減少浪費硬碟空間

架構只有分 Server 跟 Agent 而已,可以參考底下架構圖,除了 Go 語言之外,Python 跟 Ruby App 都是透過 pyroscope 指令啟動相關 app 來監控系統效能。底下架構圖來自官方網站

啟動 Pyroscope 服務

啟動方式有兩種,第一是直接用 docker 指令啟動

docker run -it -p 4040:4040 pyroscope/pyroscope:latest server

另一種可以用 docker-compose 啟動

---
services:
  pyroscope:
    image: "pyroscope/pyroscope:latest"
    ports:
      - "4040:4040"
    command:
      - "server"

在 Go 裡面安裝 agent

本篇用 Go 語言當作範例,先 import package

import "github.com/pyroscope-io/pyroscope/pkg/agent/profiler"

接著在 main.go 寫入底下程式碼即可:

profiler.Start(profiler.Config{
    ApplicationName: "simple.golang.app",
    ServerAddress:   "http://pyroscope:4040",
})

其中 http://pyroscope 可以換成自訂的 hostname 即可,接著打開上述網址就可以看到效能監控的畫面了

透過畫面可以快速找到是 SQL 或哪個函式執行很久

心得

這套工具相當方便,在 Go 語言雖然可以用 pprof 快速找到問題,但是難免還是需要手動的一些地方才可以查出效能瓶頸,有了這套平台,就可以將全部 App 都進行監控,當使用者有任何問題,就可以快速透過 Pyroscope 查看看哪邊程式碼出了問題。

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio
moss GoCN 每日新闻 (2021-03-05) 中提及了此贴 03月05日 02:37
astaxie 将本帖设为了精华贴 03月05日 10:21

这个工具好赞啊

前几天刚刚用上

大哥, 你这玩意把我线上服务器 CPU 炸穿了

非常喜欢,全组推广了

NSObjects 回复

大哥發生啥事情,為啥 CPU 炸了?

更正一下,不是 docker 指令啟動,但是两种启动方式都需要 docker 拉取 pyroscope/pyroscope 并启动服务哈

NSObjects 回复

大概知道你的意思了,大家需要小心注意,這個工具如果用在 production 上,會吃了一些 CPU .. 小心服用

appleboy 回复

好的呢,还是很不错的,没有感觉 CPU 被消耗太多

anyanfei 回复

可以看一下,我這邊使用之後 CPU 上升蠻多的。所以我在 production 環境直接拔除,只剩下用 Prometheus 監控。

比较可惜的是似乎暂时没计划支持 Memory 等其他指标?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册