lib/{osinfo,appmetrics}: Move vm_os_info metric code to lib/appmetrics package (#10776)

Follow-up commit for
211fb08028

Address @f41gh7 review comments:
- Move code from `lib/osinfo` to `lib/appmetrics`.
- Make the logic private.
- Use metrics.WriteGaugeUint64 func.
- Remove registration logic from `app/xxx/main.go`.
- Remove `lib/osinfo` package.
This commit is contained in:
Max Kotliar
2026-04-09 18:32:47 +03:00
committed by GitHub
parent 70b0115ea6
commit 0a31eacb3d
18 changed files with 94 additions and 96 deletions

View File

@@ -19,7 +19,6 @@ import (
"github.com/VictoriaMetrics/VictoriaMetrics/lib/flagutil"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/httpserver"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/osinfo"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/procutil"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promscrape"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/pushmetrics"
@@ -65,8 +64,6 @@ func main() {
buildinfo.Init()
logger.Init()
osinfo.ExposeAsMetric()
if promscrape.IsDryRun() {
*dryRun = true
}

View File

@@ -41,7 +41,6 @@ import (
opentsdbserver "github.com/VictoriaMetrics/VictoriaMetrics/lib/ingestserver/opentsdb"
opentsdbhttpserver "github.com/VictoriaMetrics/VictoriaMetrics/lib/ingestserver/opentsdbhttp"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/osinfo"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/procutil"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promscrape"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/protoparser/opentelemetry/firehose"
@@ -117,7 +116,6 @@ func main() {
buildinfo.Init()
logger.Init()
timeserieslimits.Init(*maxLabelsPerTimeseries, *maxLabelNameLen, *maxLabelValueLen)
osinfo.ExposeAsMetric()
if promscrape.IsDryRun() {
if err := promscrape.CheckConfig(); err != nil {

View File

@@ -26,7 +26,6 @@ import (
"github.com/VictoriaMetrics/VictoriaMetrics/lib/flagutil"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/httpserver"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/osinfo"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/procutil"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/pushmetrics"
)
@@ -95,7 +94,6 @@ func main() {
notifier.InitSecretFlags()
buildinfo.Init()
logger.Init()
osinfo.ExposeAsMetric()
var err error
extURL, err = getExternalURL(*externalURL)

View File

@@ -28,7 +28,6 @@ import (
"github.com/VictoriaMetrics/VictoriaMetrics/lib/ioutil"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/netutil"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/osinfo"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/procutil"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promauth"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/pushmetrics"
@@ -100,7 +99,6 @@ func main() {
envflag.Parse()
buildinfo.Init()
logger.Init()
osinfo.ExposeAsMetric()
if *dryRun {
if len(*authConfigPath) == 0 {

View File

@@ -19,7 +19,6 @@ import (
"github.com/VictoriaMetrics/VictoriaMetrics/lib/flagutil"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/httpserver"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/osinfo"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/procutil"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/pushmetrics"
@@ -53,7 +52,6 @@ func main() {
envflag.Parse()
buildinfo.Init()
logger.Init()
osinfo.ExposeAsMetric()
ctx, cancel := context.WithCancel(context.Background())
go func() {

View File

@@ -37,7 +37,6 @@ import (
influxserver "github.com/VictoriaMetrics/VictoriaMetrics/lib/ingestserver/influx"
opentsdbserver "github.com/VictoriaMetrics/VictoriaMetrics/lib/ingestserver/opentsdb"
opentsdbhttpserver "github.com/VictoriaMetrics/VictoriaMetrics/lib/ingestserver/opentsdbhttp"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/osinfo"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/procutil"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/prompb"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promscrape"
@@ -107,7 +106,6 @@ func Init() {
prompush.Push(wr)
})
timeserieslimits.Init(*maxLabelsPerTimeseries, *maxLabelNameLen, *maxLabelValueLen)
osinfo.ExposeAsMetric()
}
// Stop stops vminsert.

View File

@@ -15,7 +15,6 @@ import (
"github.com/VictoriaMetrics/VictoriaMetrics/lib/flagutil"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/httpserver"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/osinfo"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/procutil"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/pushmetrics"
)
@@ -41,7 +40,6 @@ func main() {
envflag.Parse()
buildinfo.Init()
logger.Init()
osinfo.ExposeAsMetric()
listenAddrs := []string{*httpListenAddr}
go httpserver.Serve(listenAddrs, nil, httpserver.ServeOptions{})

View File

@@ -27,7 +27,6 @@ import (
"github.com/VictoriaMetrics/VictoriaMetrics/lib/httpserver"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/httputil"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/osinfo"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promscrape"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/querytracer"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/timerpool"
@@ -70,7 +69,6 @@ func Init() {
concurrencyLimitCh = make(chan struct{}, *maxConcurrentRequests)
initVMUIConfig()
initVMAlertProxy()
osinfo.ExposeAsMetric()
}
// Stop stops vmselect

View File

@@ -21,7 +21,6 @@ import (
"github.com/VictoriaMetrics/VictoriaMetrics/lib/httpserver"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/mergeset"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/osinfo"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/querytracer"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/storage"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/storage/metricnamestats"
@@ -173,7 +172,6 @@ func Init(resetCacheIfNeeded func(mrs []storage.MetricRow)) {
writeStorageMetrics(w, strg)
})
metrics.RegisterSet(storageMetrics)
osinfo.ExposeAsMetric()
}
var storageMetrics *metrics.Set

View File

@@ -36,6 +36,7 @@ func WritePrometheusMetrics(w io.Writer) {
if currentTime.Sub(metricsCacheLastUpdateTime) > time.Second {
var bb bytesutil.ByteBuffer
writePrometheusMetrics(&bb)
writeOSMetrics(&bb)
metricsCache.Store(&bb)
metricsCacheLastUpdateTime = currentTime
}

View File

@@ -0,0 +1,25 @@
package appmetrics
import (
"fmt"
"io"
"sync"
"github.com/VictoriaMetrics/metrics"
)
type osInfo struct {
name string
release string
}
var os osInfo
var initOSOnce sync.Once
func writeOSMetrics(w io.Writer) {
initOSOnce.Do(initOS)
if os.name != "" {
metrics.WriteGaugeUint64(w, fmt.Sprintf(`vm_os_info{os=%q, release=%q}`, os.name, os.release), 1)
}
}

View File

@@ -0,0 +1,20 @@
package appmetrics
import (
"os/exec"
"strings"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
)
func initOS() {
os = osInfo{name: "darwin"}
out, err := exec.Command("sysctl", "-n", "kern.osrelease").Output()
if err != nil {
logger.Warnf("vm_os_info metric will miss release info since exec 'sysctl -n \"kern.osrelease\"' call failed: %s", err)
return
}
os.release = strings.TrimSpace(string(out))
}

View File

@@ -0,0 +1,26 @@
package appmetrics
import (
"syscall"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
)
func initOS() {
os = osInfo{name: "linux"}
var uname syscall.Utsname
if err := syscall.Uname(&uname); err != nil {
logger.Warnf("vm_os_info metric will miss release info since syscall.Uname failed: %s", err)
return
}
ur := make([]byte, 0, len(uname.Release))
for _, v := range uname.Release {
if v == 0 {
break
}
ur = append(ur, byte(v))
}
os.release = string(ur)
}

View File

@@ -1,5 +1,6 @@
//go:build !linux && !windows && !darwin
package osinfo
package appmetrics
func ExposeAsMetric() {}
func initOS() {
}

View File

@@ -0,0 +1,19 @@
package appmetrics
import (
"fmt"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
"golang.org/x/sys/windows"
)
func initOS() {
os = osInfo{name: "windows"}
ver := windows.RtlGetVersion()
if ver == nil {
logger.Warnf("vm_os_info metric will miss release info since windows.RtlGetVersion returned nil version")
return
}
os.release = fmt.Sprintf("%d.%d.%d", ver.MajorVersion, ver.MinorVersion, ver.BuildNumber)
}

View File

@@ -1,24 +0,0 @@
package osinfo
import (
"fmt"
"os/exec"
"strings"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
"github.com/VictoriaMetrics/metrics"
)
var darwinRelease string
func ExposeAsMetric() {
out, err := exec.Command("sysctl", "-n", "kern.osrelease").Output()
if err != nil {
logger.Warnf("os info wont be exposed as vm_os_info metric; exec 'sysctl -n \"kern.osrelease\"' failed: %s", err)
return
}
darwinRelease = strings.TrimSpace(string(out))
_ = metrics.GetOrCreateGauge(fmt.Sprintf(`vm_os_info{os="darwin", release=%q}`, darwinRelease), func() float64 { return 1 })
}

View File

@@ -1,30 +0,0 @@
package osinfo
import (
"fmt"
"syscall"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
"github.com/VictoriaMetrics/metrics"
)
var linuxRelease string
func ExposeAsMetric() {
var uname syscall.Utsname
if err := syscall.Uname(&uname); err != nil {
logger.Warnf("os info wont be exposed as vm_os_info metric; failed to call syscall.Uname: %s", err)
return
}
release := make([]byte, 0, len(uname.Release))
for _, v := range uname.Release {
if v == 0 {
break
}
release = append(release, byte(v))
}
linuxRelease = string(release)
_ = metrics.GetOrCreateGauge(fmt.Sprintf(`vm_os_info{os="linux", release=%q}`, linuxRelease), func() float64 { return 1 })
}

View File

@@ -1,21 +0,0 @@
package osinfo
import (
"fmt"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
"github.com/VictoriaMetrics/metrics"
"golang.org/x/sys/windows"
)
var windowsRelease string
func ExposeAsMetric() {
ver := windows.RtlGetVersion()
if ver == nil {
logger.Warnf("os info wont be exposed as vm_os_info metric; windows.RtlGetVersion returned nil version")
return
}
windowsRelease = fmt.Sprintf("%d.%d.%d", ver.MajorVersion, ver.MinorVersion, ver.BuildNumber)
_ = metrics.GetOrCreateGauge(fmt.Sprintf(`vm_os_info{os="windows", release=%q}`, windowsRelease), func() float64 { return 1 })
}