From 664db964ca82d407ea2b9056f1d2a426f3140e44 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Tue, 16 May 2023 11:35:43 -0700 Subject: [PATCH] vendor: update github.com/VictoriaMetrics/metrics from v1.23.1 to v1.24.0 This change adds process_* metrics to VictoriaMetrics components under Windows OS See https://github.com/VictoriaMetrics/metrics/pull/47 --- docs/CHANGELOG.md | 1 + go.mod | 2 +- go.sum | 4 +- .../metrics/process_metrics_other.go | 4 +- .../metrics/process_metrics_windows.go | 85 +++++++++++++++++++ vendor/modules.txt | 4 +- 6 files changed, 93 insertions(+), 7 deletions(-) create mode 100644 vendor/github.com/VictoriaMetrics/metrics/process_metrics_windows.go diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 4b5b8bd42..aafa6e34a 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -30,6 +30,7 @@ The following tip changes can be tested by building VictoriaMetrics components f * FEATURE: deprecate `-bigMergeConcurrency` command-line flag, since improper configuration for this flag frequently led to uncontrolled growth of unmerged parts, which, in turn, could lead to queries slowdown and increased CPU usage. The concurrency for [background merges](https://docs.victoriametrics.com/#storage) can be controlled via `-smallMergeConcurrency` command-line flag, though it isn't recommended to change this flag in general case. * FEATURE: do not execute the incoming request if it has been canceled by the client before the execution start. See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/4223). * FEATURE: support time formats with timezones. For example, `2024-01-02+02:00` means `January 2, 2024` at `+02:00` time zone. See [these docs](https://docs.victoriametrics.com/#timestamp-formats). +* FEATURE: expose `process_*` metrics at `/metrics` page of all the VictoriaMetrics components under Windows OS. See [this pull request](https://github.com/VictoriaMetrics/metrics/pull/47). * FEATURE: upgrade base docker image (alpine) from 3.17.3 to 3.18.0. See [alpine 3.18.0 release notes](https://www.alpinelinux.org/posts/Alpine-3.18.0-released.html). * FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent.html): support the ability to filter [consul_sd_configs](https://docs.victoriametrics.com/sd_configs.html#consul_sd_configs) targets in more optimal way via new `filter` option. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4183). * FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent.html): add support for [consulagent_sd_configs](https://docs.victoriametrics.com/sd_configs.html#consulagent_sd_configs). See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3953). diff --git a/go.mod b/go.mod index 7279689d4..7c4f3024f 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( // Do not use the original github.com/valyala/fasthttp because of issues // like https://github.com/valyala/fasthttp/commit/996610f021ff45fdc98c2ce7884d5fa4e7f9199b github.com/VictoriaMetrics/fasthttp v1.2.0 - github.com/VictoriaMetrics/metrics v1.23.1 + github.com/VictoriaMetrics/metrics v1.24.0 github.com/VictoriaMetrics/metricsql v0.56.2 github.com/aws/aws-sdk-go-v2 v1.18.0 github.com/aws/aws-sdk-go-v2/config v1.18.25 diff --git a/go.sum b/go.sum index d95b206db..d4ba0de52 100644 --- a/go.sum +++ b/go.sum @@ -67,8 +67,8 @@ github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWk github.com/VictoriaMetrics/fasthttp v1.2.0 h1:nd9Wng4DlNtaI27WlYh5mGXCJOmee/2c2blTJwfyU9I= github.com/VictoriaMetrics/fasthttp v1.2.0/go.mod h1:zv5YSmasAoSyv8sBVexfArzFDIGGTN4TfCKAtAw7IfE= github.com/VictoriaMetrics/metrics v1.18.1/go.mod h1:ArjwVz7WpgpegX/JpB0zpNF2h2232kErkEnzH1sxMmA= -github.com/VictoriaMetrics/metrics v1.23.1 h1:/j8DzeJBxSpL2qSIdqnRFLvQQhbJyJbbEi22yMm7oL0= -github.com/VictoriaMetrics/metrics v1.23.1/go.mod h1:rAr/llLpEnAdTehiNlUxKgnjcOuROSzpw0GvjpEbvFc= +github.com/VictoriaMetrics/metrics v1.24.0 h1:ILavebReOjYctAGY5QU2F9X0MYvkcrG3aEn2RKa1Zkw= +github.com/VictoriaMetrics/metrics v1.24.0/go.mod h1:eFT25kvsTidQFHb6U0oa0rTrDRdz4xTYjpL8+UPohys= github.com/VictoriaMetrics/metricsql v0.56.2 h1:quBAbYOlWMhmdgzFSCr1yjtVcdZYZrVQJ7nR9zor7ZM= github.com/VictoriaMetrics/metricsql v0.56.2/go.mod h1:6pP1ZeLVJHqJrHlF6Ij3gmpQIznSsgktEcZgsAWYel0= github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= diff --git a/vendor/github.com/VictoriaMetrics/metrics/process_metrics_other.go b/vendor/github.com/VictoriaMetrics/metrics/process_metrics_other.go index ca7167f80..4c1c766d7 100644 --- a/vendor/github.com/VictoriaMetrics/metrics/process_metrics_other.go +++ b/vendor/github.com/VictoriaMetrics/metrics/process_metrics_other.go @@ -1,5 +1,5 @@ -//go:build !linux -// +build !linux +//go:build !linux && !windows +// +build !linux,!windows package metrics diff --git a/vendor/github.com/VictoriaMetrics/metrics/process_metrics_windows.go b/vendor/github.com/VictoriaMetrics/metrics/process_metrics_windows.go new file mode 100644 index 000000000..e824ada94 --- /dev/null +++ b/vendor/github.com/VictoriaMetrics/metrics/process_metrics_windows.go @@ -0,0 +1,85 @@ +//go:build windows +// +build windows + +package metrics + +import ( + "fmt" + "io" + "log" + "syscall" + "unsafe" + + "golang.org/x/sys/windows" +) + +var ( + modpsapi = syscall.NewLazyDLL("psapi.dll") + modkernel32 = syscall.NewLazyDLL("kernel32.dll") + + // https://learn.microsoft.com/en-us/windows/win32/api/psapi/nf-psapi-getprocessmemoryinfo + procGetProcessMemoryInfo = modpsapi.NewProc("GetProcessMemoryInfo") + procGetProcessHandleCount = modkernel32.NewProc("GetProcessHandleCount") +) + +// https://learn.microsoft.com/en-us/windows/win32/api/psapi/ns-psapi-process_memory_counters_ex +type processMemoryCounters struct { + _ uint32 + PageFaultCount uint32 + PeakWorkingSetSize uintptr + WorkingSetSize uintptr + QuotaPeakPagedPoolUsage uintptr + QuotaPagedPoolUsage uintptr + QuotaPeakNonPagedPoolUsage uintptr + QuotaNonPagedPoolUsage uintptr + PagefileUsage uintptr + PeakPagefileUsage uintptr + PrivateUsage uintptr +} + +func writeProcessMetrics(w io.Writer) { + h := windows.CurrentProcess() + var startTime, exitTime, stime, utime windows.Filetime + err := windows.GetProcessTimes(h, &startTime, &exitTime, &stime, &utime) + if err != nil { + log.Printf("ERROR: metrics: cannot read process times: %s", err) + return + } + var mc processMemoryCounters + r1, _, err := procGetProcessMemoryInfo.Call( + uintptr(h), + uintptr(unsafe.Pointer(&mc)), + unsafe.Sizeof(mc), + ) + if r1 != 1 { + log.Printf("ERROR: metrics: cannot read process memory information: %s", err) + return + } + stimeSeconds := (uint64(stime.HighDateTime)<<32 + uint64(stime.LowDateTime)) / 1e7 + utimeSeconds := (uint64(utime.HighDateTime)<<32 + uint64(utime.LowDateTime)) / 1e7 + fmt.Fprintf(w, "process_cpu_seconds_system_total %d\n", stimeSeconds) + fmt.Fprintf(w, "process_cpu_seconds_total %d\n", stimeSeconds+utimeSeconds) + fmt.Fprintf(w, "process_cpu_seconds_user_total %d\n", stimeSeconds) + fmt.Fprintf(w, "process_pagefaults_total %d\n", mc.PageFaultCount) + fmt.Fprintf(w, "process_start_time_seconds %d\n", startTime.Nanoseconds()/1e9) + fmt.Fprintf(w, "process_virtual_memory_bytes %d\n", mc.PrivateUsage) + fmt.Fprintf(w, "process_resident_memory_peak_bytes %d\n", mc.PeakWorkingSetSize) + fmt.Fprintf(w, "process_resident_memory_bytes %d\n", mc.WorkingSetSize) +} + +func writeFDMetrics(w io.Writer) { + h := windows.CurrentProcess() + var count uint32 + r1, _, err := procGetProcessHandleCount.Call( + uintptr(h), + uintptr(unsafe.Pointer(&count)), + ) + if r1 != 1 { + log.Printf("ERROR: metrics: cannot determine open file descriptors count: %s", err) + return + } + // it seems to be hard-coded limit for 64-bit systems + // https://learn.microsoft.com/en-us/archive/blogs/markrussinovich/pushing-the-limits-of-windows-handles#maximum-number-of-handles + fmt.Fprintf(w, "process_max_fds %d\n", 16777216) + fmt.Fprintf(w, "process_open_fds %d\n", count) +} diff --git a/vendor/modules.txt b/vendor/modules.txt index 8d7976f60..38402eb08 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -70,8 +70,8 @@ github.com/VictoriaMetrics/fastcache github.com/VictoriaMetrics/fasthttp github.com/VictoriaMetrics/fasthttp/fasthttputil github.com/VictoriaMetrics/fasthttp/stackless -# github.com/VictoriaMetrics/metrics v1.23.1 -## explicit; go 1.15 +# github.com/VictoriaMetrics/metrics v1.24.0 +## explicit; go 1.20 github.com/VictoriaMetrics/metrics # github.com/VictoriaMetrics/metricsql v0.56.2 ## explicit; go 1.13