成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 標準庫想增加 metrics 指標,你支持嗎?

開發 前端
整體上會發現大家對于 Go 標準庫的指標訴求,更多的趨向于底層包。因為無論你用的是什么開源倉庫,其絕大部分都是基于上述提到的包。

大家好,我是煎魚。

在 Go 的標準庫中,有一個神奇的標準庫 runtime/metrics,這個標準庫提供了一系列預定義好的 Go 自身的相關指標。

如果沒有編寫過基礎監控庫或者關注的比較少的朋友可能會沒接觸到這類指標,甚至不知道有這些值。但我相信你在監控圖標中肯定看到過。

本文分兩個部分,第一個部分是快速了解現有的 metrics 指標,第二個部分是了解現在社區希望追加到標準庫的 metrics 指標內容。

一起看看社區討論的方向和內容。

快速了解 runtime/metrics

以下是一個快速 Demo。代碼如下:

func main() {
 descs := metrics.All()
 samples := make([]metrics.Sample, len(descs))
 for i := range samples {
  samples[i].Name = descs[i].Name
 }

 metrics.Read(samples)

 for _, sample := range samples {
  name, value := sample.Name, sample.Value

  switch value.Kind() {
  case metrics.KindUint64:
   fmt.Printf("%s: %d\n", name, value.Uint64())
  case metrics.KindFloat64:
   fmt.Printf("%s: %f\n", name, value.Float64())
  case metrics.KindFloat64Histogram:
   fmt.Printf("%s: %f\n", name, medianBucket(value.Float64Histogram()))
   ...
  }
 }
}

func medianBucket(h *metrics.Float64Histogram) float64 {
 total := uint64(0)
 for _, count := range h.Counts {
  total += count
 }
 thresh := total / 2
 total = 0
 for i, count := range h.Counts {
  total += count
  if total >= thresh {
   return h.Buckets[i]
  }
 }
 panic("should not happen")
}

輸出結果:

/cgo/go-to-c-calls:calls: 0
/cpu/classes/gc/mark/assist:cpu-seconds: 0.000000
/cpu/classes/gc/mark/dedicated:cpu-seconds: 0.000000
...
/gc/cycles/automatic:gc-cycles: 0
/gc/cycles/forced:gc-cycles: 0
/gc/cycles/total:gc-cycles: 0
/gc/gogc:percent: 100
/gc/gomemlimit:bytes: 9223372036854775807
/gc/heap/allocs-by-size:bytes: 8193.000000
/gc/heap/allocs:bytes: 56832
/gc/heap/allocs:objects: 6
/gc/heap/frees-by-size:bytes: 1.000000
/gc/heap/frees:bytes: 0
/gc/heap/frees:objects: 0
/gc/heap/goal:bytes: 4194304
...

里面包含了相當多的 Go 系統指標。完整的代碼運行和輸出可以查看 https://go.dev/play/p/CKASbysqX9x

我梳理了一張對照清單。其中 10 個指標如下:

序號

指標

含義

1

/cgo/go-to-c-calls:calls

當前進程從 Go 調用到 C 的次數

2

/cpu/classes/gc/mark/assist:cpu-seconds

預計執行 GC 程序所花費的 CPU 總時長,以協助 GC 并防止其落后于應用程序

3

/cpu/classes/gc/mark/dedicated:cpu-seconds

在專門用于執行 GC 任務的 CPU 處理器(根據 GOMAXPROCS 的定義)上執行 GC 任務預計需要花費的 CPU 總時長

4

/cpu/classes/gc/mark/idle:cpu-seconds

在空閑 CPU 資源上執行 GC 任務所花費的 CPU 總時間

5

/cpu/classes/gc/pause:cpu-seconds

GC 暫停應用程序預計所花費的 CPU 總時長

6

/gc/cycles/automatic:gc-cycles

Go Runtime 程序已完成的 GC 循環次數。

7

/gc/gogc:percent

用戶配置的堆大小目標百分比

8

/gc/heap/allocs:objects

應用程序觸發的堆分配累計計數

9

/memory/classes/heap/free:bytes

Go Runtime 對物理內存的可用空間大小的預估(完全空閑并可返回底層系統但尚未返回的內存)

10

/sched/gomaxprocs:threads

當前 runtime.GOMAXPROCS 的值,或是可以同時執行用戶級 Go 代碼的操作系統線程數。

對于完整指標有興趣的可以查看:https://pkg.go.dev/runtime/metrics#hdr-Supported_metrics

更多的 metrics 指標

最近在 Go 社區中有同學發起了一項討論《metrics for the standard library[1]》,希望探討和在其他標準庫中添加更多的 metrics 指標,提供更多的可觀察性。

比較多同學期望的是網絡、延遲類的指標,針對性能、錯誤等。如下幾種場景:

  • net/http 服務端:
  • 處理延遲。
  • 請求/響應體大小。
  • 恐慌(panic)、恢復(recover)。
  • 錯誤/警告(觸發 net/http.Server.ErrorLog 的所有內容)
  • 被拒絕的無效請求。
  • net/http 客戶端:
  • 調用延遲。

  • 請求/響應體大小

  • 連接池相關。

  • database/sql 客戶端:

  • 查詢延遲。

  • 響應大小。

  • 連接池相關。

  • net 網絡包相關:

  • 例如 TCP、UDP 等,對應的打開連接的數量、連接狀態(空閑、激活、關閉)、連接錯誤等。

  • 例如 TLS,在握手階段相關的指標,握手持續時間、握手失敗計數等。

新提及的 metrics 指標有沒有滿足你的需求呢,或者有沒有更多的補充?

總結

整體上會發現大家對于 Go 標準庫的指標訴求,更多的趨向于底層包。因為無論你用的是什么開源倉庫,其絕大部分都是基于上述提到的包。

在現階段,如果自己的 Go 業務應用程序去記錄這些指標,就需要再封裝一層,每一個包,例如:ORM 就需要去實現一遍插件等。

而第三方庫實現不會把 metrics 這類非核心功能直接加入初始化實現中。因此官方標準庫對 metrics 的支持是非常有必要的。

至少這樣就不用每個團隊都搞一遍 net/http、database/sql 等的延遲調用指標的配置和設置了。

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2017-10-18 08:17:16

Linux

2023-12-26 07:37:27

2024-10-09 08:54:31

2023-04-02 23:13:07

Go語言bufio

2021-08-13 12:05:15

Goneturl

2024-09-29 16:04:14

2022-04-06 08:19:13

Go語言切片

2022-10-24 09:57:02

runeGo語言

2021-11-05 10:59:06

元編程語言工具

2023-10-30 16:14:44

Metrics SD數據庫

2021-11-10 15:37:49

Go源碼指令

2023-09-27 08:26:48

Go標準庫函數

2021-12-10 15:22:26

Go Zip 文件

2013-09-13 09:31:09

MongoDBZardosht KaTokutek

2022-05-11 09:04:50

Go函數數組

2013-04-03 10:33:58

微軟Windows Ser

2024-09-29 08:54:36

2022-10-24 08:55:13

Go工具鏈開發者

2021-09-13 07:23:52

Go Set 設計

2020-08-30 16:30:14

VMwarevSphere 6虛擬化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 伊人91在线 | 久久国内 | 久久一区二区免费视频 | 情侣av| 久久久久9999 | 亚洲天堂男人的天堂 | 欧美日韩不卡 | 成人二区 | 99热在这里只有精品 | 国产精品一区二区在线 | 亚洲国产福利视频 | 国产一级片一区二区三区 | 粉嫩av久久一区二区三区 | 国产亚洲一级 | 国产精品99久久久久久久久久久久 | 国产情侣在线看 | 日韩国产专区 | 欧美成人二区 | 久久久人成影片一区二区三区 | 免费网站国产 | 国产精品毛片 | 毛片视频观看 | 亚洲av毛片 | 高清视频一区二区三区 | 日本三级线观看 视频 | 精品视频一区二区三区在线观看 | 久久一| 亚洲精品一区二 | 久久91精品国产 | 国产伦精品一区二区三区四区视频 | 人人看人人射 | 精品久久久久久亚洲精品 | 国产精品一区二区在线 | 久久精品亚洲成在人线av网址 | 精品欧美一区二区三区久久久 | 蜜桃毛片 | 成人免费影院 | 黑人中文字幕一区二区三区 | 国产综合久久久久久鬼色 | 成人一区在线观看 | 久久精品视频一区二区三区 |