mirror of
https://github.com/hanzoai/metrics.git
synced 2026-10-30 20:03:39 +00:00
This feature allows to track query requests by metric names. Tracker
state is stored in-memory, capped by 1/100 of allocated memory to the
storage. If cap exceeds, tracker rejects any new items add and instead
registers query requests for already observed metric names.
This feature is disable by default and new flag:
`-storage.trackMetricNamesStats` enables it.
New API added to the select component:
* /api/v1/status/metric_names_stats - which returns a JSON
object
with usage statistics.
* /admin/api/v1/status/metric_names_stats/reset - which resets internal
state of the tracker and reset tsid/cache.
New metrics were added for this feature:
* vm_cache_size_bytes{type="storage/metricNamesUsageTracker"}
* vm_cache_size{type="storage/metricNamesUsageTracker"}
* vm_cache_size_max_bytes{type="storage/metricNamesUsageTracker"}
Related issue:
https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4458
---------
Signed-off-by: f41gh7 <[email protected]>
Co-authored-by: Roman Khavronenko <[email protected]>
118 lines
4.9 KiB
Go
118 lines
4.9 KiB
Go
// Code generated by qtc from "metric_names_usage_response.qtpl". DO NOT EDIT.
|
|
// See https://github.com/valyala/quicktemplate for details.
|
|
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:1
|
|
package stats
|
|
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:1
|
|
import (
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/querytracer"
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/storage"
|
|
)
|
|
|
|
// MetricNamesStatsResponse generates response for /api/v1/status/metric_names_stats .
|
|
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:8
|
|
import (
|
|
qtio422016 "io"
|
|
|
|
qt422016 "github.com/valyala/quicktemplate"
|
|
)
|
|
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:8
|
|
var (
|
|
_ = qtio422016.Copy
|
|
_ = qt422016.AcquireByteBuffer
|
|
)
|
|
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:8
|
|
func StreamMetricNamesStatsResponse(qw422016 *qt422016.Writer, stats *storage.MetricNamesStatsResponse, qt *querytracer.Tracer) {
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:8
|
|
qw422016.N().S(`{"status":"success","statsCollectedSince":`)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:11
|
|
qw422016.N().DUL(stats.CollectedSinceTs)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:11
|
|
qw422016.N().S(`,"statsCollectedRecordsTotal":`)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:12
|
|
qw422016.N().DUL(stats.TotalRecords)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:12
|
|
qw422016.N().S(`,"trackerMemoryMaxSizeBytes":`)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:13
|
|
qw422016.N().DUL(stats.MaxSizeBytes)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:13
|
|
qw422016.N().S(`,"trackerCurrentMemoryUsageBytes":`)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:14
|
|
qw422016.N().DUL(stats.CurrentSizeBytes)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:14
|
|
qw422016.N().S(`,"records":[`)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:17
|
|
for i, r := range stats.Records {
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:17
|
|
qw422016.N().S(`{"metricName":`)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:19
|
|
qw422016.N().Q(r.MetricName)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:19
|
|
qw422016.N().S(`,"queryRequestsCount":`)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:20
|
|
qw422016.N().DUL(r.RequestsCount)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:20
|
|
qw422016.N().S(`,"lastQueryRequestTimestamp":`)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:21
|
|
qw422016.N().DUL(r.LastRequestTs)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:21
|
|
qw422016.N().S(`}`)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:23
|
|
if i+1 < len(stats.Records) {
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:23
|
|
qw422016.N().S(`,`)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:23
|
|
}
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:24
|
|
}
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:24
|
|
qw422016.N().S(`]`)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:26
|
|
qt.Done()
|
|
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:27
|
|
traceJSON := qt.ToJSON()
|
|
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:28
|
|
if traceJSON != "" {
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:28
|
|
qw422016.N().S(`,"trace":`)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:28
|
|
qw422016.N().S(traceJSON)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:28
|
|
}
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:28
|
|
qw422016.N().S(`}`)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:31
|
|
}
|
|
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:31
|
|
func WriteMetricNamesStatsResponse(qq422016 qtio422016.Writer, stats *storage.MetricNamesStatsResponse, qt *querytracer.Tracer) {
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:31
|
|
qw422016 := qt422016.AcquireWriter(qq422016)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:31
|
|
StreamMetricNamesStatsResponse(qw422016, stats, qt)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:31
|
|
qt422016.ReleaseWriter(qw422016)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:31
|
|
}
|
|
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:31
|
|
func MetricNamesStatsResponse(stats *storage.MetricNamesStatsResponse, qt *querytracer.Tracer) string {
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:31
|
|
qb422016 := qt422016.AcquireByteBuffer()
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:31
|
|
WriteMetricNamesStatsResponse(qb422016, stats, qt)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:31
|
|
qs422016 := string(qb422016.B)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:31
|
|
qt422016.ReleaseByteBuffer(qb422016)
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:31
|
|
return qs422016
|
|
//line app/vmselect/stats/metric_names_usage_response.qtpl:31
|
|
}
|