Add go_gomaxprocs, go_gogc_percent and go_gomemlimit to the default Go runtime metrics

Signed-off-by: Arianna Vespri <arianna.vespri@yahoo.it>
This commit is contained in:
Arianna Vespri 2024-07-11 16:36:45 +02:00
parent 7cd1249dcc
commit cd8445b70b
5 changed files with 40 additions and 0 deletions

1
go.mod
View File

@ -18,6 +18,7 @@ require (
require ( require (
github.com/golang/protobuf v1.5.3 // indirect github.com/golang/protobuf v1.5.3 // indirect
github.com/hashicorp/go-version v1.7.0
github.com/jpillora/backoff v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect
github.com/kr/pretty v0.3.1 // indirect github.com/kr/pretty v0.3.1 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect

2
go.sum
View File

@ -14,6 +14,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=

View File

@ -31,6 +31,9 @@ import (
var baseMetrics = []string{ var baseMetrics = []string{
"go_gc_duration_seconds", "go_gc_duration_seconds",
"go_gogc_percent",
"go_gomaxprocs",
"go_gomemlimit",
"go_goroutines", "go_goroutines",
"go_info", "go_info",
"go_memstats_last_gc_time_seconds", "go_memstats_last_gc_time_seconds",

View File

@ -16,6 +16,7 @@ package prometheus
import ( import (
"runtime" "runtime"
"runtime/debug" "runtime/debug"
runmetr "runtime/metrics"
"time" "time"
) )
@ -211,6 +212,9 @@ type baseGoCollector struct {
gcDesc *Desc gcDesc *Desc
gcLastTimeDesc *Desc gcLastTimeDesc *Desc
goInfoDesc *Desc goInfoDesc *Desc
goMaxProcs *Desc
goGogcPercent *Desc
goMemLimit *Desc
} }
func newBaseGoCollector() baseGoCollector { func newBaseGoCollector() baseGoCollector {
@ -235,6 +239,18 @@ func newBaseGoCollector() baseGoCollector {
"go_info", "go_info",
"Information about the Go environment.", "Information about the Go environment.",
nil, Labels{"version": runtime.Version()}), nil, Labels{"version": runtime.Version()}),
goMaxProcs: NewDesc(
"go_gomaxprocs",
"Value of GOMAXPROCS, i.e number of usable threads.",
nil, nil),
goGogcPercent: NewDesc(
"go_gogc_percent",
"Value of GOGC (percentage).",
nil, nil),
goMemLimit: NewDesc(
"go_gomemlimit",
"Value of GOMEMLIMIT (bytes).",
nil, nil),
} }
} }
@ -245,6 +261,9 @@ func (c *baseGoCollector) Describe(ch chan<- *Desc) {
ch <- c.gcDesc ch <- c.gcDesc
ch <- c.gcLastTimeDesc ch <- c.gcLastTimeDesc
ch <- c.goInfoDesc ch <- c.goInfoDesc
ch <- c.goMaxProcs
ch <- c.goGogcPercent
ch <- c.goMemLimit
} }
// Collect returns the current state of all metrics of the collector. // Collect returns the current state of all metrics of the collector.
@ -266,6 +285,18 @@ func (c *baseGoCollector) Collect(ch chan<- Metric) {
ch <- MustNewConstSummary(c.gcDesc, uint64(stats.NumGC), stats.PauseTotal.Seconds(), quantiles) ch <- MustNewConstSummary(c.gcDesc, uint64(stats.NumGC), stats.PauseTotal.Seconds(), quantiles)
ch <- MustNewConstMetric(c.gcLastTimeDesc, GaugeValue, float64(stats.LastGC.UnixNano())/1e9) ch <- MustNewConstMetric(c.gcLastTimeDesc, GaugeValue, float64(stats.LastGC.UnixNano())/1e9)
ch <- MustNewConstMetric(c.goInfoDesc, GaugeValue, 1) ch <- MustNewConstMetric(c.goInfoDesc, GaugeValue, 1)
ch <- MustNewConstMetric(c.goMaxProcs, GaugeValue, float64(runtime.NumCPU()))
gogcSample := make([]runmetr.Sample, 1)
gogcSample[0].Name = "/gc/gogc:percent"
runmetr.Read(gogcSample)
ch <- MustNewConstMetric(c.goGogcPercent, GaugeValue, float64(gogcSample[0].Value.Uint64()))
memLimitSample := make([]runmetr.Sample, 1)
memLimitSample[0].Name = "/gc/gomemlimit:bytes"
runmetr.Read(memLimitSample)
ch <- MustNewConstMetric(c.goMemLimit, GaugeValue, float64(memLimitSample[0].Value.Uint64()))
} }
func memstatNamespace(s string) string { func memstatNamespace(s string) string {

View File

@ -54,6 +54,9 @@ func expectedBaseMetrics() map[string]struct{} {
b.goroutinesDesc.fqName, b.goroutinesDesc.fqName,
b.gcLastTimeDesc.fqName, b.gcLastTimeDesc.fqName,
b.threadsDesc.fqName, b.threadsDesc.fqName,
b.goMaxProcs.fqName,
b.goGogcPercent.fqName,
b.goMemLimit.fqName,
} { } {
metrics[m] = struct{}{} metrics[m] = struct{}{}
} }