Table of Go Metrics Exposed by Prometheus under Different Rules¶
Prometheus golang_client helps to expose go runtime/metrics so you can collect it, and the block below shows a short example.
collectors.WithGoCollectorRuntimeMetrics accepts various rules and prometheus collector package also offers several options.
This page offers a table to show prometheus exposed go runtime metrics naming, and the rules to enable them for reference. It solves 2 painpoints listed below.
- conversion from runtime metrics to prometheus exposed metrics.
The names are very similar but with different format change, the table below shows the exposed go metrics by prometheus.
- quickly choose rules to expose specific metrics.
Sometimes you don't want to expose all metrics but a part of them, then users need to check the rules offered by collector package and use it, but then they may also want to understand what are the metrics exposed by the way. The table helps to check all metrics exposed by a certain rule.
reg := prometheus.NewPedanticRegistry()
reg.MustRegister(collectors.NewGoCollector(
collectors.WithGoCollectorRuntimeMetrics(
collectors.MetricsGC,
),
))
Table is generated by Go version go1.25.1, and using rule collectors.MetricsAll will get all metrics listed below.
Metrics added by default¶
| Metric Name | Help |
|---|---|
| go_memstats_mcache_sys_bytes | Number of bytes used for mcache structures obtained from system. Equals to /memory/classes/metadata/mcache/inuse:bytes + /memory/classes/metadata/mcache/free:bytes. |
| go_gc_duration_seconds | A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles. |
| go_memstats_mallocs_total | Total number of heap objects allocated, both live and gc-ed. Semantically a counter version for go_memstats_heap_objects gauge. Equals to /gc/heap/allocs:objects + /gc/heap/tiny/allocs:objects. |
| go_memstats_mspan_inuse_bytes | Number of bytes in use by mspan structures. Equals to /memory/classes/metadata/mspan/inuse:bytes. |
| go_memstats_buck_hash_sys_bytes | Number of bytes used by the profiling bucket hash table. Equals to /memory/classes/profiling/buckets:bytes. |
| go_memstats_heap_alloc_bytes | Number of heap bytes allocated and currently in use, same as go_memstats_alloc_bytes. Equals to /memory/classes/heap/objects:bytes. |
| go_threads | Number of OS threads created. |
| go_memstats_alloc_bytes_total | Total number of bytes allocated in heap until now, even if released already. Equals to /gc/heap/allocs:bytes. |
| go_sched_gomaxprocs_threads | The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads. |
| go_memstats_heap_objects | Number of currently allocated objects. Equals to /gc/heap/objects:objects. |
| go_memstats_heap_released_bytes | Number of heap bytes released to OS. Equals to /memory/classes/heap/released:bytes. |
| go_memstats_sys_bytes | Number of bytes obtained from system. Equals to /memory/classes/total:byte. |
| go_memstats_stack_sys_bytes | Number of bytes obtained from system for stack allocator. Equals to /memory/classes/heap/stacks:bytes + /memory/classes/os-stacks:bytes. |
| go_memstats_heap_idle_bytes | Number of heap bytes waiting to be used. Equals to /memory/classes/heap/released:bytes + /memory/classes/heap/free:bytes. |
| go_memstats_last_gc_time_seconds | Number of seconds since 1970 of last garbage collection. |
| go_memstats_next_gc_bytes | Number of heap bytes when next garbage collection will take place. Equals to /gc/heap/goal:bytes. |
| go_memstats_stack_inuse_bytes | Number of bytes obtained from system for stack allocator in non-CGO environments. Equals to /memory/classes/heap/stacks:bytes. |
| go_memstats_alloc_bytes | Number of bytes allocated in heap and currently in use. Equals to /memory/classes/heap/objects:bytes. |
| go_memstats_gc_sys_bytes | Number of bytes used for garbage collection system metadata. Equals to /memory/classes/metadata/other:bytes. |
| go_memstats_heap_inuse_bytes | Number of heap bytes that are in use. Equals to /memory/classes/heap/objects:bytes + /memory/classes/heap/unused:bytes |
| go_memstats_mspan_sys_bytes | Number of bytes used for mspan structures obtained from system. Equals to /memory/classes/metadata/mspan/inuse:bytes + /memory/classes/metadata/mspan/free:bytes. |
| go_gc_gomemlimit_bytes | Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes. |
| go_memstats_frees_total | Total number of heap objects frees. Equals to /gc/heap/frees:objects + /gc/heap/tiny/allocs:objects. |
| go_memstats_other_sys_bytes | Number of bytes used for other system allocations. Equals to /memory/classes/other:bytes. |
| go_goroutines | Number of goroutines that currently exist. |
| go_memstats_heap_sys_bytes | Number of heap bytes obtained from system. Equals to /memory/classes/heap/objects:bytes + /memory/classes/heap/unused:bytes + /memory/classes/heap/released:bytes + /memory/classes/heap/free:bytes. |
| go_memstats_mcache_inuse_bytes | Number of bytes in use by mcache structures. Equals to /memory/classes/metadata/mcache/inuse:bytes. |
| go_info | Information about the Go environment. |
| go_gc_gogc_percent | Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent. |
Metrics added by collectors.MetricsGC¶
| Metric Name | Help |
|---|---|
| go_gc_heap_goal_bytes | Heap size target for the end of the GC cycle. Sourced from /gc/heap/goal:bytes. |
| go_gc_cycles_total_gc_cycles_total | Count of all completed GC cycles. Sourced from /gc/cycles/total:gc-cycles. |
| go_gc_stack_starting_size_bytes | The stack size of new goroutines. Sourced from /gc/stack/starting-size:bytes. |
| go_gc_cycles_automatic_gc_cycles_total | Count of completed GC cycles generated by the Go runtime. Sourced from /gc/cycles/automatic:gc-cycles. |
| go_gc_heap_live_bytes | Heap memory occupied by live objects that were marked by the previous GC. Sourced from /gc/heap/live:bytes. |
| go_gc_scan_globals_bytes | The total amount of global variable space that is scannable. Sourced from /gc/scan/globals:bytes. |
| go_gc_scan_total_bytes | The total amount space that is scannable. Sum of all metrics in /gc/scan. Sourced from /gc/scan/total:bytes. |
| go_gc_heap_frees_by_size_bytes | Distribution of freed heap allocations by approximate size. Bucket counts increase monotonically. Note that this does not include tiny objects as defined by /gc/heap/tiny/allocs:objects, only tiny blocks. Sourced from /gc/heap/frees-by-size:bytes. |
| go_gc_limiter_last_enabled_gc_cycle | GC cycle the last time the GC CPU limiter was enabled. This metric is useful for diagnosing the root cause of an out-of-memory error, because the limiter trades memory for CPU time when the GC's CPU time gets too high. This is most likely to occur with use of SetMemoryLimit. The first GC cycle is cycle 1, so a value of 0 indicates that it was never enabled. Sourced from /gc/limiter/last-enabled:gc-cycle. |
| go_gc_heap_tiny_allocs_objects_total | Count of small allocations that are packed together into blocks. These allocations are counted separately from other allocations because each individual allocation is not tracked by the runtime, only their block. Each block is already accounted for in allocs-by-size and frees-by-size. Sourced from /gc/heap/tiny/allocs:objects. |
| go_gc_heap_objects_objects | Number of objects, live or unswept, occupying heap memory. Sourced from /gc/heap/objects:objects. |
| go_gc_scan_heap_bytes | The total amount of heap space that is scannable. Sourced from /gc/scan/heap:bytes. |
| go_gc_heap_allocs_bytes_total | Cumulative sum of memory allocated to the heap by the application. Sourced from /gc/heap/allocs:bytes. |
| go_gc_heap_allocs_objects_total | Cumulative count of heap allocations triggered by the application. Note that this does not include tiny objects as defined by /gc/heap/tiny/allocs:objects, only tiny blocks. Sourced from /gc/heap/allocs:objects. |
| go_gc_scan_stack_bytes | The number of bytes of stack that were scanned last GC cycle. Sourced from /gc/scan/stack:bytes. |
| go_gc_pauses_seconds | Deprecated. Prefer the identical /sched/pauses/total/gc:seconds. Sourced from /gc/pauses:seconds. |
| go_gc_cycles_forced_gc_cycles_total | Count of completed GC cycles forced by the application. Sourced from /gc/cycles/forced:gc-cycles. |
| go_gc_heap_allocs_by_size_bytes | Distribution of heap allocations by approximate size. Bucket counts increase monotonically. Note that this does not include tiny objects as defined by /gc/heap/tiny/allocs:objects, only tiny blocks. Sourced from /gc/heap/allocs-by-size:bytes. |
| go_gc_heap_frees_objects_total | Cumulative count of heap allocations whose storage was freed by the garbage collector. Note that this does not include tiny objects as defined by /gc/heap/tiny/allocs:objects, only tiny blocks. Sourced from /gc/heap/frees:objects. |
| go_gc_heap_frees_bytes_total | Cumulative sum of heap memory freed by the garbage collector. Sourced from /gc/heap/frees:bytes. |
Metrics added by collectors.MetricsMemory¶
| Metric Name | Help |
|---|---|
| go_memory_classes_total_bytes | All memory mapped by the Go runtime into the current process as read-write. Note that this does not include memory mapped by code called via cgo or via the syscall package. Sum of all metrics in /memory/classes. Sourced from /memory/classes/total:bytes. |
| go_memory_classes_heap_released_bytes | Memory that is completely free and has been returned to the underlying system. This metric is the runtime's estimate of free address space that is still mapped into the process, but is not backed by physical memory. Sourced from /memory/classes/heap/released:bytes. |
| go_memory_classes_other_bytes | Memory used by execution trace buffers, structures for debugging the runtime, finalizer and profiler specials, and more. Sourced from /memory/classes/other:bytes. |
| go_memory_classes_heap_free_bytes | Memory that is completely free and eligible to be returned to the underlying system, but has not been. This metric is the runtime's estimate of free address space that is backed by physical memory. Sourced from /memory/classes/heap/free:bytes. |
| go_memory_classes_heap_stacks_bytes | Memory allocated from the heap that is reserved for stack space, whether or not it is currently in-use. Currently, this represents all stack memory for goroutines. It also includes all OS thread stacks in non-cgo programs. Note that stacks may be allocated differently in the future, and this may change. Sourced from /memory/classes/heap/stacks:bytes. |
| go_memory_classes_heap_unused_bytes | Memory that is reserved for heap objects but is not currently used to hold heap objects. Sourced from /memory/classes/heap/unused:bytes. |
| go_memory_classes_metadata_mspan_inuse_bytes | Memory that is occupied by runtime mspan structures that are currently being used. Sourced from /memory/classes/metadata/mspan/inuse:bytes. |
| go_memory_classes_metadata_other_bytes | Memory that is reserved for or used to hold runtime metadata. Sourced from /memory/classes/metadata/other:bytes. |
| go_memory_classes_metadata_mcache_free_bytes | Memory that is reserved for runtime mcache structures, but not in-use. Sourced from /memory/classes/metadata/mcache/free:bytes. |
| go_memory_classes_os_stacks_bytes | Stack memory allocated by the underlying operating system. In non-cgo programs this metric is currently zero. This may change in the future.In cgo programs this metric includes OS thread stacks allocated directly from the OS. Currently, this only accounts for one stack in c-shared and c-archive build modes, and other sources of stacks from the OS are not measured. This too may change in the future. Sourced from /memory/classes/os-stacks:bytes. |
| go_memory_classes_metadata_mcache_inuse_bytes | Memory that is occupied by runtime mcache structures that are currently being used. Sourced from /memory/classes/metadata/mcache/inuse:bytes. |
| go_memory_classes_profiling_buckets_bytes | Memory that is used by the stack trace hash map used for profiling. Sourced from /memory/classes/profiling/buckets:bytes. |
| go_memory_classes_heap_objects_bytes | Memory occupied by live objects and dead objects that have not yet been marked free by the garbage collector. Sourced from /memory/classes/heap/objects:bytes. |
| go_memory_classes_metadata_mspan_free_bytes | Memory that is reserved for runtime mspan structures, but not in-use. Sourced from /memory/classes/metadata/mspan/free:bytes. |
Metrics added by collectors.MetricsScheduler¶
| Metric Name | Help |
|---|---|
| go_sched_pauses_stopping_other_seconds | Distribution of individual non-GC-related stop-the-world stopping latencies. This is the time it takes from deciding to stop the world until all Ps are stopped. This is a subset of the total non-GC-related stop-the-world time (/sched/pauses/total/other:seconds). During this time, some threads may be executing. Bucket counts increase monotonically. Sourced from /sched/pauses/stopping/other:seconds. |
| go_sched_pauses_stopping_gc_seconds | Distribution of individual GC-related stop-the-world stopping latencies. This is the time it takes from deciding to stop the world until all Ps are stopped. This is a subset of the total GC-related stop-the-world time (/sched/pauses/total/gc:seconds). During this time, some threads may be executing. Bucket counts increase monotonically. Sourced from /sched/pauses/stopping/gc:seconds. |
| go_sched_latencies_seconds | Distribution of the time goroutines have spent in the scheduler in a runnable state before actually running. Bucket counts increase monotonically. Sourced from /sched/latencies:seconds. |
| go_sched_pauses_total_other_seconds | Distribution of individual non-GC-related stop-the-world pause latencies. This is the time from deciding to stop the world until the world is started again. Some of this time is spent getting all threads to stop (measured directly in /sched/pauses/stopping/other:seconds). Bucket counts increase monotonically. Sourced from /sched/pauses/total/other:seconds. |
| go_sched_goroutines_goroutines | Count of live goroutines. Sourced from /sched/goroutines:goroutines. |
| go_sched_pauses_total_gc_seconds | Distribution of individual GC-related stop-the-world pause latencies. This is the time from deciding to stop the world until the world is started again. Some of this time is spent getting all threads to stop (this is measured directly in /sched/pauses/stopping/gc:seconds), during which some threads may still be running. Bucket counts increase monotonically. Sourced from /sched/pauses/total/gc:seconds. |
Metrics added by collectors.MetricsDebug¶
| Metric Name | Help |
|---|---|
| go_godebug_non_default_behavior_winreadlinkvolume_events_total | The number of non-default behaviors executed by the os package due to a non-default GODEBUG=winreadlinkvolume=... setting. Sourced from /godebug/non-default-behavior/winreadlinkvolume:events. |
| go_godebug_non_default_behavior_x509negativeserial_events_total | The number of non-default behaviors executed by the crypto/x509 package due to a non-default GODEBUG=x509negativeserial=... setting. Sourced from /godebug/non-default-behavior/x509negativeserial:events. |
| go_godebug_non_default_behavior_x509usefallbackroots_events_total | The number of non-default behaviors executed by the crypto/x509 package due to a non-default GODEBUG=x509usefallbackroots=... setting. Sourced from /godebug/non-default-behavior/x509usefallbackroots:events. |
| go_godebug_non_default_behavior_allowmultiplevcs_events_total | The number of non-default behaviors executed by the cmd/go package due to a non-default GODEBUG=allowmultiplevcs=... setting. Sourced from /godebug/non-default-behavior/allowmultiplevcs:events. |
| go_godebug_non_default_behavior_containermaxprocs_events_total | The number of non-default behaviors executed by the runtime package due to a non-default GODEBUG=containermaxprocs=... setting. Sourced from /godebug/non-default-behavior/containermaxprocs:events. |
| go_godebug_non_default_behavior_tlsmaxrsasize_events_total | The number of non-default behaviors executed by the crypto/tls package due to a non-default GODEBUG=tlsmaxrsasize=... setting. Sourced from /godebug/non-default-behavior/tlsmaxrsasize:events. |
| go_godebug_non_default_behavior_tlsunsafeekm_events_total | The number of non-default behaviors executed by the crypto/tls package due to a non-default GODEBUG=tlsunsafeekm=... setting. Sourced from /godebug/non-default-behavior/tlsunsafeekm:events. |
| go_godebug_non_default_behavior_gotypesalias_events_total | The number of non-default behaviors executed by the go/types package due to a non-default GODEBUG=gotypesalias=... setting. Sourced from /godebug/non-default-behavior/gotypesalias:events. |
| go_godebug_non_default_behavior_http2server_events_total | The number of non-default behaviors executed by the net/http package due to a non-default GODEBUG=http2server=... setting. Sourced from /godebug/non-default-behavior/http2server:events. |
| go_godebug_non_default_behavior_updatemaxprocs_events_total | The number of non-default behaviors executed by the runtime package due to a non-default GODEBUG=updatemaxprocs=... setting. Sourced from /godebug/non-default-behavior/updatemaxprocs:events. |
| go_godebug_non_default_behavior_http2client_events_total | The number of non-default behaviors executed by the net/http package due to a non-default GODEBUG=http2client=... setting. Sourced from /godebug/non-default-behavior/http2client:events. |
| go_godebug_non_default_behavior_httplaxcontentlength_events_total | The number of non-default behaviors executed by the net/http package due to a non-default GODEBUG=httplaxcontentlength=... setting. Sourced from /godebug/non-default-behavior/httplaxcontentlength:events. |
| go_godebug_non_default_behavior_httpservecontentkeepheaders_events_total | The number of non-default behaviors executed by the net/http package due to a non-default GODEBUG=httpservecontentkeepheaders=... setting. Sourced from /godebug/non-default-behavior/httpservecontentkeepheaders:events. |
| go_godebug_non_default_behavior_multipartmaxheaders_events_total | The number of non-default behaviors executed by the mime/multipart package due to a non-default GODEBUG=multipartmaxheaders=... setting. Sourced from /godebug/non-default-behavior/multipartmaxheaders:events. |
| go_godebug_non_default_behavior_x509sha256skid_events_total | The number of non-default behaviors executed by the crypto/x509 package due to a non-default GODEBUG=x509sha256skid=... setting. Sourced from /godebug/non-default-behavior/x509sha256skid:events. |
| go_godebug_non_default_behavior_x509usepolicies_events_total | The number of non-default behaviors executed by the crypto/x509 package due to a non-default GODEBUG=x509usepolicies=... setting. Sourced from /godebug/non-default-behavior/x509usepolicies:events. |
| go_godebug_non_default_behavior_zipinsecurepath_events_total | The number of non-default behaviors executed by the archive/zip package due to a non-default GODEBUG=zipinsecurepath=... setting. Sourced from /godebug/non-default-behavior/zipinsecurepath:events. |
| go_godebug_non_default_behavior_installgoroot_events_total | The number of non-default behaviors executed by the go/build package due to a non-default GODEBUG=installgoroot=... setting. Sourced from /godebug/non-default-behavior/installgoroot:events. |
| go_godebug_non_default_behavior_embedfollowsymlinks_events_total | The number of non-default behaviors executed by the cmd/go package due to a non-default GODEBUG=embedfollowsymlinks=... setting. Sourced from /godebug/non-default-behavior/embedfollowsymlinks:events. |
| go_godebug_non_default_behavior_rsa1024min_events_total | The number of non-default behaviors executed by the crypto/rsa package due to a non-default GODEBUG=rsa1024min=... setting. Sourced from /godebug/non-default-behavior/rsa1024min:events. |
| go_godebug_non_default_behavior_winsymlink_events_total | The number of non-default behaviors executed by the os package due to a non-default GODEBUG=winsymlink=... setting. Sourced from /godebug/non-default-behavior/winsymlink:events. |
| go_godebug_non_default_behavior_httpmuxgo121_events_total | The number of non-default behaviors executed by the net/http package due to a non-default GODEBUG=httpmuxgo121=... setting. Sourced from /godebug/non-default-behavior/httpmuxgo121:events. |
| go_godebug_non_default_behavior_tarinsecurepath_events_total | The number of non-default behaviors executed by the archive/tar package due to a non-default GODEBUG=tarinsecurepath=... setting. Sourced from /godebug/non-default-behavior/tarinsecurepath:events. |
| go_godebug_non_default_behavior_gocachetest_events_total | The number of non-default behaviors executed by the cmd/go package due to a non-default GODEBUG=gocachetest=... setting. Sourced from /godebug/non-default-behavior/gocachetest:events. |
| go_godebug_non_default_behavior_gocacheverify_events_total | The number of non-default behaviors executed by the cmd/go package due to a non-default GODEBUG=gocacheverify=... setting. Sourced from /godebug/non-default-behavior/gocacheverify:events. |
| go_godebug_non_default_behavior_asynctimerchan_events_total | The number of non-default behaviors executed by the time package due to a non-default GODEBUG=asynctimerchan=... setting. Sourced from /godebug/non-default-behavior/asynctimerchan:events. |
| go_godebug_non_default_behavior_netedns0_events_total | The number of non-default behaviors executed by the net package due to a non-default GODEBUG=netedns0=... setting. Sourced from /godebug/non-default-behavior/netedns0:events. |
| go_godebug_non_default_behavior_gocachehash_events_total | The number of non-default behaviors executed by the cmd/go package due to a non-default GODEBUG=gocachehash=... setting. Sourced from /godebug/non-default-behavior/gocachehash:events. |
| go_godebug_non_default_behavior_gotestjsonbuildtext_events_total | The number of non-default behaviors executed by the cmd/go package due to a non-default GODEBUG=gotestjsonbuildtext=... setting. Sourced from /godebug/non-default-behavior/gotestjsonbuildtext:events. |
| go_godebug_non_default_behavior_multipathtcp_events_total | The number of non-default behaviors executed by the net package due to a non-default GODEBUG=multipathtcp=... setting. Sourced from /godebug/non-default-behavior/multipathtcp:events. |
| go_godebug_non_default_behavior_panicnil_events_total | The number of non-default behaviors executed by the runtime package due to a non-default GODEBUG=panicnil=... setting. Sourced from /godebug/non-default-behavior/panicnil:events. |
| go_godebug_non_default_behavior_randautoseed_events_total | The number of non-default behaviors executed by the math/rand package due to a non-default GODEBUG=randautoseed=... setting. Sourced from /godebug/non-default-behavior/randautoseed:events. |
| go_godebug_non_default_behavior_multipartmaxparts_events_total | The number of non-default behaviors executed by the mime/multipart package due to a non-default GODEBUG=multipartmaxparts=... setting. Sourced from /godebug/non-default-behavior/multipartmaxparts:events. |
| go_godebug_non_default_behavior_tls3des_events_total | The number of non-default behaviors executed by the crypto/tls package due to a non-default GODEBUG=tls3des=... setting. Sourced from /godebug/non-default-behavior/tls3des:events. |
| go_godebug_non_default_behavior_tlssha1_events_total | The number of non-default behaviors executed by the crypto/tls package due to a non-default GODEBUG=tlssha1=... setting. Sourced from /godebug/non-default-behavior/tlssha1:events. |
| go_godebug_non_default_behavior_x509keypairleaf_events_total | The number of non-default behaviors executed by the crypto/tls package due to a non-default GODEBUG=x509keypairleaf=... setting. Sourced from /godebug/non-default-behavior/x509keypairleaf:events. |
| go_godebug_non_default_behavior_x509rsacrt_events_total | The number of non-default behaviors executed by the crypto/x509 package due to a non-default GODEBUG=x509rsacrt=... setting. Sourced from /godebug/non-default-behavior/x509rsacrt:events. |
| go_godebug_non_default_behavior_execerrdot_events_total | The number of non-default behaviors executed by the os/exec package due to a non-default GODEBUG=execerrdot=... setting. Sourced from /godebug/non-default-behavior/execerrdot:events. |
| go_godebug_non_default_behavior_randseednop_events_total | The number of non-default behaviors executed by the math/rand package due to a non-default GODEBUG=randseednop=... setting. Sourced from /godebug/non-default-behavior/randseednop:events. |
| go_godebug_non_default_behavior_tls10server_events_total | The number of non-default behaviors executed by the crypto/tls package due to a non-default GODEBUG=tls10server=... setting. Sourced from /godebug/non-default-behavior/tls10server:events. |
| go_godebug_non_default_behavior_tlsrsakex_events_total | The number of non-default behaviors executed by the crypto/tls package due to a non-default GODEBUG=tlsrsakex=... setting. Sourced from /godebug/non-default-behavior/tlsrsakex:events. |
Method¶
The content above is generated, the source code is put below.
Code to generate the table
package main
import (
"bytes"
"fmt"
"os"
"runtime"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/collectors"
)
func main() {
pkgOfferedRules := []collectors.GoRuntimeMetricsRule{
collectors.MetricsGC,
collectors.MetricsMemory,
collectors.MetricsScheduler,
collectors.MetricsDebug,
}
type metricTyp struct {
Name, Help string
}
set := make(map[int][]metricTyp)
for i := 0; i <= len(pkgOfferedRules); i++ {
reg := prometheus.NewPedanticRegistry()
reg.MustRegister(collectors.NewGoCollector(
collectors.WithGoCollectorRuntimeMetrics(
pkgOfferedRules[:i]...,
),
))
result, err := reg.Gather()
if err != nil {
panic(err)
}
got := []metricTyp{}
for _, r := range result {
got = append(got, metricTyp{
Name: r.GetName(),
Help: r.GetHelp(),
})
}
set[i] = got
}
// retrieve where does the metric come from.
m := make(map[metricTyp]int)
for i := 0; i <= len(pkgOfferedRules); i++ {
for _, metric := range set[i] {
if _, exists := m[metric]; exists {
// it's added by earlier rule
continue
}
m[metric] = i
}
}
metricsList := make([]metricTyp, 0, len(m))
for metric := range m {
metricsList = append(metricsList, metric)
}
finalListM := map[int][]metricTyp{}
for _, metric := range metricsList {
addedBy := m[metric]
if _, exists := finalListM[addedBy]; !exists {
finalListM[addedBy] = []metricTyp{}
}
finalListM[addedBy] = append(finalListM[addedBy], metric)
}
var buf bytes.Buffer
buf.WriteString("# Table of Go Metrics Exposed by Prometheus under Different Rules\n")
help := fmt.Sprintf(`
Prometheus golang_client helps to expose go runtime/metrics so you can collect it,
and the block below shows a short example.
collectors.WithGoCollectorRuntimeMetrics accepts various rules and prometheus collector package
also offers several options.
This page aims to mitigate 2 painpoints:
1. conversion from runtime metrics to prometheus exposed metrics.
The names are very similar but with different format change, the table below shows
the exposed go metrics by prometheus.
2. quickly choose rules to expose specific metrics.
Sometimes you don't want to expose all metrics but a part of them, then users need to check
the rules offered by collector package and use it, but then they may also want to understand what are the metrics exposed by the way.
The table helps to check all metrics exposed by a certain rule.
%sgo
reg := prometheus.NewPedanticRegistry()
reg.MustRegister(collectors.NewGoCollector(
collectors.WithGoCollectorRuntimeMetrics(
collectors.MetricsGC,
),
))
%s
`, "```", "```")
buf.WriteString(help)
buf.WriteString(fmt.Sprintf("\nTable is generated by Go version %s, and using rule `collectors.MetricsAll` will get all metrics listed below.\n\n", runtime.Version()))
for i := 0; i <= len(pkgOfferedRules); i++ {
addedBy := "default"
optMetricsList := finalListM[i]
switch m[optMetricsList[0]] {
case 1:
addedBy = "collectors.MetricsGC"
case 2:
addedBy = "collectors.MetricsMemory"
case 3:
addedBy = "collectors.MetricsScheduler"
case 4:
addedBy = "collectors.MetricsDebug"
}
buf.WriteString(fmt.Sprintf("\n## Metrics added by %s\n\n", addedBy))
buf.WriteString("| Metric Name | Help |\n|:-----------------|:---------|\n")
for _, metric := range optMetricsList {
buf.WriteString(fmt.Sprintf("| %s | %s |\n", metric.Name, metric.Help))
}
buf.WriteString("\n")
}
err := os.WriteFile("METRICS_ADDED_BY.md", buf.Bytes(), 0644)
if err != nil {
panic(err)
}
}