實時可視化 Go Runtime 指標,這個 Go 庫超讚

前言

小土之前分享過一篇如何監控 Go Runtime 的文章,主要是通過 Grafana,Graphite,Statsd 等組件來採用 UDP 協議採集 metrics 上報到 Grafana 來進行一系列的展示。相對比較繁瑣。今天小土帶來一個 Go 庫 statsviz-https://github.com/arl/statsviz 可以一鍵集成到你的 HTTP 服務中,並且在瀏覽器中可以實時看到服務的 runtime 指標信息。感興趣的同學可以跟着小土一起試一下。開整。

一句話描述

在 Web 瀏覽器中可以實時可視化 Go 程序的runtime- 運行時指標數據:堆、對象、goroutine、GC 暫停、調度器等。

安裝

go get github.com/arl/statsviz@latest

Example

可以在 HTTP 服務 http.ServeMux[1] 註冊 statsviz

mux := http.NewServeMux()
statsviz.Register(mux)

或者使用 http.DefaultServeMux註冊:

statsviz.RegisterDefault()

默認情況下 statsviz 的服務路由地址是在 /debug/statsviz/下。

下面我們來一個實例

package main

import (
 "log"
 "net/http"

 "github.com/arl/statsviz"
)

func main() {
 statsviz.RegisterDefault()
 log.Println(http.ListenAndServe(":6060", nil))
}

UI 頁面介紹

  1. 服務啓動成功,我們可以訪問 http://localhost:6060/debug/statsviz/,看到如下頁面,可以看出如下的圖表信息
  1. 頁面頂部的控件作用於所有的圖表:

  1. 在每個圖的頂部,你會發現 2 個圖標:

statsviz 是如何運作的呢?

那麼你想知道 statsviz 是怎麼工作的呢?讓我們來一探究竟。

Statsviz 主要有 2 個 HTTP 接口服務:

程序會每隔一秒將所有運行時 / 指標 [2] 數據指標信息發送到網頁。數據存儲在瀏覽器中的循環緩衝區中,該緩衝區只會保存預先設置的數量的數據信息。

statsviz 如何集成到各不同的 web 框架中呢?

假如你也想接入 statsviz,用的不是標準庫,也可以看下 statsviz 在各個 web 框架和標準庫中編寫的例子,https://github.com/arl/statsviz/blob/v0.5.1/_example/README.md。如沒有你用的框架的實例,你也可以按需編寫。這兒我們簡單看一下常用 web 框架 gin 的例子

package main

import (
 "fmt"

 "github.com/gin-gonic/gin"

 "github.com/arl/statsviz"
 example "github.com/arl/statsviz/_example"
)

func main() {
 // Force the GC to work to make the plots "move".
 go example.Work()

 fmt.Println("Point your browser to http://localhost:8085/debug/statsviz/\n\n")

 router := gin.New()
 router.GET("/debug/statsviz/*filepath", func(context *gin.Context) {
  if context.Param("filepath") == "/ws" {
   statsviz.Ws(context.Writer, context.Request)
   return
  }
  statsviz.IndexAtRoot("/debug/statsviz").ServeHTTP(context.Writer, context.Request)
 })
 router.Run(":8085")
}

例子中可以看出,主要實現了 / debug/statsviz / 路由下的 GET 請求,並實現了 websocket 的監聽處理,另外後臺強制開啓了一個 GC 的工作任務。

參考資料

[1]

http.ServeMux: https://pkg.go.dev/net/http?tab=doc#ServeMux

[2]

運行時 / 指標: https://pkg.go.dev/runtime/metrics

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/rDSKItZ8hvgjvpp4f4VzCQ