欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go 標(biāo)準(zhǔn)庫(kù)增加metrics指標(biāo)探討分析

 更新時(shí)間:2023年10月11日 14:19:54   作者:煎魚  
go中有一個(gè)神奇的標(biāo)準(zhǔn)庫(kù) runtime/metrics,提供了一系列預(yù)定義好的 Go 自身的相關(guān)指標(biāo),如果沒有編寫過(guò)基礎(chǔ)監(jiān)控庫(kù)或者關(guān)注的比較少的朋友可能會(huì)沒接觸到這類指標(biāo),本文展開現(xiàn)有metrics 指標(biāo),并結(jié)合現(xiàn)有的社區(qū)討論一起看看還有沒有必要增加更多的標(biāo)準(zhǔn)庫(kù)指標(biāo)

快速了解 runtime/metrics

以下是一個(gè)快速 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")
}

輸出結(jié)果:

/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
...

里面包含了相當(dāng)多的 Go 系統(tǒng)指標(biāo)。完整的代碼運(yùn)行和輸出可以查看 https://go.dev/play/p/CKASbysqX9x

我梳理了一張對(duì)照清單。其中 10 個(gè)指標(biāo)如下:

序號(hào)指標(biāo)含義
1/cgo/go-to-c-calls:calls當(dāng)前進(jìn)程從 Go 調(diào)用到 C 的次數(shù)
2/cpu/classes/gc/mark/assist:cpu-seconds預(yù)計(jì)執(zhí)行 GC 程序所花費(fèi)的 CPU 總時(shí)長(zhǎng),以協(xié)助 GC 并防止其落后于應(yīng)用程序
3/cpu/classes/gc/mark/dedicated:cpu-seconds在專門用于執(zhí)行 GC 任務(wù)的 CPU 處理器(根據(jù) GOMAXPROCS 的定義)上執(zhí)行 GC 任務(wù)預(yù)計(jì)需要花費(fèi)的 CPU 總時(shí)長(zhǎng)
4/cpu/classes/gc/mark/idle:cpu-seconds在空閑 CPU 資源上執(zhí)行 GC 任務(wù)所花費(fèi)的 CPU 總時(shí)間
5/cpu/classes/gc/pause:cpu-secondsGC 暫停應(yīng)用程序預(yù)計(jì)所花費(fèi)的 CPU 總時(shí)長(zhǎng)
6/gc/cycles/automatic:gc-cyclesGo Runtime 程序已完成的 GC 循環(huán)次數(shù)。
7/gc/gogc:percent用戶配置的堆大小目標(biāo)百分比
8/gc/heap/allocs:objects應(yīng)用程序觸發(fā)的堆分配累計(jì)計(jì)數(shù)
9/memory/classes/heap/free:bytesGo Runtime 對(duì)物理內(nèi)存的可用空間大小的預(yù)估(完全空閑并可返回底層系統(tǒng)但尚未返回的內(nèi)存)
10/sched/gomaxprocs:threads當(dāng)前 runtime.GOMAXPROCS 的值,或是可以同時(shí)執(zhí)行用戶級(jí) Go 代碼的操作系統(tǒng)線程數(shù)。

對(duì)于完整指標(biāo)有興趣的可以查看:

https://pkg.go.dev/runtime/metrics#hdr-Supported_metrics

更多的 metrics 指標(biāo)

最近在 Go 社區(qū)中有同學(xué)發(fā)起了一項(xiàng)討論《metrics for the standard library》,希望探討和在其他標(biāo)準(zhǔn)庫(kù)中添加更多的 metrics 指標(biāo),提供更多的可觀察性。

比較多同學(xué)期望的是網(wǎng)絡(luò)、延遲類的指標(biāo),針對(duì)性能、錯(cuò)誤等。如下幾種場(chǎng)景:

net/http 服務(wù)端:

  • 處理延遲。
  • 請(qǐng)求/響應(yīng)體大小。
  • 恐慌(panic)、恢復(fù)(recover)。
  • 錯(cuò)誤/警告(觸發(fā) net/http.Server.ErrorLog 的所有內(nèi)容)
  • 被拒絕的無(wú)效請(qǐng)求。

net/http 客戶端:

  • 調(diào)用延遲。
  • 請(qǐng)求/響應(yīng)體大小
  • 連接池相關(guān)。

database/sql 客戶端:

  • 查詢延遲。
  • 響應(yīng)大小。
  • 連接池相關(guān)。

net 網(wǎng)絡(luò)包相關(guān):

  • 例如 TCP、UDP 等,對(duì)應(yīng)的打開連接的數(shù)量、連接狀態(tài)(空閑、激活、關(guān)閉)、連接錯(cuò)誤等。
  • 例如 TLS,在握手階段相關(guān)的指標(biāo),握手持續(xù)時(shí)間、握手失敗計(jì)數(shù)等。

總結(jié)

整體上會(huì)發(fā)現(xiàn)大家對(duì)于 Go 標(biāo)準(zhǔn)庫(kù)的指標(biāo)訴求,更多的趨向于底層包。因?yàn)闊o(wú)論你用的是什么開源倉(cāng)庫(kù),其絕大部分都是基于上述提到的包。

在現(xiàn)階段,如果自己的 Go 業(yè)務(wù)應(yīng)用程序去記錄這些指標(biāo),就需要再封裝一層,每一個(gè)包,例如:ORM 就需要去實(shí)現(xiàn)一遍插件等。

而第三方庫(kù)實(shí)現(xiàn)不會(huì)把 metrics 這類非核心功能直接加入初始化實(shí)現(xiàn)中。因此官方標(biāo)準(zhǔn)庫(kù)對(duì) metrics 的支持是非常有必要的。

至少這樣就不用每個(gè)團(tuán)隊(duì)都搞一遍 net/http、database/sql 等的延遲調(diào)用指標(biāo)的配置和設(shè)置了。

以上就是Go 標(biāo)準(zhǔn)庫(kù)增加metrics指標(biāo)探討分析的詳細(xì)內(nèi)容,更多關(guān)于Go 標(biāo)準(zhǔn)庫(kù)metrics指標(biāo)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • go使用errors.Wrapf()代替log.Error()方法示例

    go使用errors.Wrapf()代替log.Error()方法示例

    這篇文章主要為大家介紹了go使用errors.Wrapf()代替log.Error()的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Golang中使用不定數(shù)量空格分割字符串的方法

    Golang中使用不定數(shù)量空格分割字符串的方法

    有這樣一個(gè)使用空格分割字符串的場(chǎng)景,字符串中被分割的子串之間的空格數(shù)量不確定,有一個(gè)兩個(gè)或者多個(gè)空格,這種場(chǎng)景下,使用最容易想到的strings.Split函數(shù)就做不到了,本文接下來(lái)就介紹幾種行之有效的方法,需要的朋友可以參考下
    2023-07-07
  • Go語(yǔ)言中讀取命令參數(shù)的幾種方法總結(jié)

    Go語(yǔ)言中讀取命令參數(shù)的幾種方法總結(jié)

    部署golang項(xiàng)目時(shí)難免要通過(guò)命令行來(lái)設(shè)置一些參數(shù),那么在golang中如何操作命令行參數(shù)呢?那么下面這篇文章就來(lái)給大家介紹了關(guān)于Go語(yǔ)言中讀取命令參數(shù)的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起看看吧。
    2017-11-11
  • Go語(yǔ)言中append函數(shù)用法分析

    Go語(yǔ)言中append函數(shù)用法分析

    這篇文章主要介紹了Go語(yǔ)言中append函數(shù)用法,對(duì)比使用append函數(shù)與不使用append函數(shù)的兩個(gè)實(shí)例,詳細(xì)分析了Go語(yǔ)言中append函數(shù)的功能,需要的朋友可以參考下
    2015-02-02
  • golang網(wǎng)絡(luò)通信超時(shí)設(shè)置方式

    golang網(wǎng)絡(luò)通信超時(shí)設(shè)置方式

    這篇文章主要介紹了golang網(wǎng)絡(luò)通信超時(shí)設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 一文詳解Golang使用接口支持Apply方法的配置模式

    一文詳解Golang使用接口支持Apply方法的配置模式

    這篇文章主要為大家介紹了一文詳解Golang使用接口支持Apply方法的配置模式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • go-zero使用goctl生成mongodb的操作使用方法

    go-zero使用goctl生成mongodb的操作使用方法

    mongodb是一種高性能、開源、文檔型的nosql數(shù)據(jù)庫(kù),被廣泛應(yīng)用于web應(yīng)用、大數(shù)據(jù)以及云計(jì)算領(lǐng)域,goctl model 為 goctl 提供的數(shù)據(jù)庫(kù)模型代碼生成指令,目前支持 MySQL、PostgreSQL、Mongo 的代碼生成,本文給大家介紹了go-zero使用goctl生成mongodb的操作使用方法
    2024-06-06
  • Golang通脈之?dāng)?shù)據(jù)類型詳情

    Golang通脈之?dāng)?shù)據(jù)類型詳情

    這篇文章主要介紹了Golang通脈之?dāng)?shù)據(jù)類型,在編程語(yǔ)言中標(biāo)識(shí)符就是定義的具有某種意義的詞,比如變量名、常量名、函數(shù)名等等,Go語(yǔ)言中標(biāo)識(shí)符允許由字母數(shù)字和_(下劃線)組成,并且只能以字母和_開頭,更詳細(xì)內(nèi)容請(qǐng)看下面文章吧
    2021-10-10
  • Go連接數(shù)據(jù)庫(kù)操作基礎(chǔ)講解

    Go連接數(shù)據(jù)庫(kù)操作基礎(chǔ)講解

    這篇文章主要為大家介紹了Go連接數(shù)據(jù)庫(kù)操作基礎(chǔ)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Go 語(yǔ)言 select 的實(shí)現(xiàn)原理解析

    Go 語(yǔ)言 select 的實(shí)現(xiàn)原理解析

    select是Go在語(yǔ)言層面提供的I/O多路復(fù)用的機(jī)制,其專門用來(lái)讓Goroutine同時(shí)等待多個(gè)channel是否準(zhǔn)備完畢:可讀或可寫,這篇文章主要介紹了Go 語(yǔ)言 select 的實(shí)現(xiàn)原理,需要的朋友可以參考下
    2025-01-01

最新評(píng)論