mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
app/vmselect: add round_digits
query arg to /api/v1/query
and /api/v1/query_range
handlers for limiting the number of decimal digits after the point
This commit is contained in:
parent
1f2a7c3863
commit
6b9bba7448
5 changed files with 33 additions and 1 deletions
|
@ -1089,6 +1089,7 @@ func QueryHandler(startTime time.Time, at *auth.Token, w http.ResponseWriter, r
|
||||||
QuotedRemoteAddr: httpserver.GetQuotedRemoteAddr(r),
|
QuotedRemoteAddr: httpserver.GetQuotedRemoteAddr(r),
|
||||||
Deadline: deadline,
|
Deadline: deadline,
|
||||||
LookbackDelta: lookbackDelta,
|
LookbackDelta: lookbackDelta,
|
||||||
|
RoundDigits: getRoundDigits(r),
|
||||||
EnforcedTagFilters: etf,
|
EnforcedTagFilters: etf,
|
||||||
|
|
||||||
DenyPartialResponse: searchutils.GetDenyPartialResponse(r),
|
DenyPartialResponse: searchutils.GetDenyPartialResponse(r),
|
||||||
|
@ -1196,6 +1197,7 @@ func queryRangeHandler(startTime time.Time, at *auth.Token, w http.ResponseWrite
|
||||||
Deadline: deadline,
|
Deadline: deadline,
|
||||||
MayCache: mayCache,
|
MayCache: mayCache,
|
||||||
LookbackDelta: lookbackDelta,
|
LookbackDelta: lookbackDelta,
|
||||||
|
RoundDigits: getRoundDigits(r),
|
||||||
EnforcedTagFilters: etf,
|
EnforcedTagFilters: etf,
|
||||||
|
|
||||||
DenyPartialResponse: searchutils.GetDenyPartialResponse(r),
|
DenyPartialResponse: searchutils.GetDenyPartialResponse(r),
|
||||||
|
@ -1374,6 +1376,18 @@ func getMatchesFromRequest(r *http.Request) []string {
|
||||||
return matches
|
return matches
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getRoundDigits(r *http.Request) int {
|
||||||
|
s := r.FormValue("round_digits")
|
||||||
|
if len(s) == 0 {
|
||||||
|
return 100
|
||||||
|
}
|
||||||
|
n, err := strconv.Atoi(s)
|
||||||
|
if err != nil {
|
||||||
|
return 100
|
||||||
|
}
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
func getLatencyOffsetMilliseconds() int64 {
|
func getLatencyOffsetMilliseconds() int64 {
|
||||||
d := latencyOffset.Milliseconds()
|
d := latencyOffset.Milliseconds()
|
||||||
if d <= 1000 {
|
if d <= 1000 {
|
||||||
|
|
|
@ -100,9 +100,13 @@ type EvalConfig struct {
|
||||||
// LookbackDelta is analog to `-query.lookback-delta` from Prometheus.
|
// LookbackDelta is analog to `-query.lookback-delta` from Prometheus.
|
||||||
LookbackDelta int64
|
LookbackDelta int64
|
||||||
|
|
||||||
|
// How many decimal digits after the point to leave in response.
|
||||||
|
RoundDigits int
|
||||||
|
|
||||||
// EnforcedTagFilters used for apply additional label filters to query.
|
// EnforcedTagFilters used for apply additional label filters to query.
|
||||||
EnforcedTagFilters []storage.TagFilter
|
EnforcedTagFilters []storage.TagFilter
|
||||||
|
|
||||||
|
// Whether to deny partial response.
|
||||||
DenyPartialResponse bool
|
DenyPartialResponse bool
|
||||||
|
|
||||||
// IsPartialResponse is set during query execution and can be used by Exec caller after query execution.
|
// IsPartialResponse is set during query execution and can be used by Exec caller after query execution.
|
||||||
|
@ -122,6 +126,7 @@ func newEvalConfig(src *EvalConfig) *EvalConfig {
|
||||||
ec.Deadline = src.Deadline
|
ec.Deadline = src.Deadline
|
||||||
ec.MayCache = src.MayCache
|
ec.MayCache = src.MayCache
|
||||||
ec.LookbackDelta = src.LookbackDelta
|
ec.LookbackDelta = src.LookbackDelta
|
||||||
|
ec.RoundDigits = src.RoundDigits
|
||||||
ec.EnforcedTagFilters = src.EnforcedTagFilters
|
ec.EnforcedTagFilters = src.EnforcedTagFilters
|
||||||
ec.DenyPartialResponse = src.DenyPartialResponse
|
ec.DenyPartialResponse = src.DenyPartialResponse
|
||||||
ec.IsPartialResponse = src.IsPartialResponse
|
ec.IsPartialResponse = src.IsPartialResponse
|
||||||
|
|
|
@ -12,6 +12,7 @@ import (
|
||||||
|
|
||||||
"github.com/VictoriaMetrics/VictoriaMetrics/app/vmselect/netstorage"
|
"github.com/VictoriaMetrics/VictoriaMetrics/app/vmselect/netstorage"
|
||||||
"github.com/VictoriaMetrics/VictoriaMetrics/app/vmselect/querystats"
|
"github.com/VictoriaMetrics/VictoriaMetrics/app/vmselect/querystats"
|
||||||
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/decimal"
|
||||||
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
|
||||||
"github.com/VictoriaMetrics/metrics"
|
"github.com/VictoriaMetrics/metrics"
|
||||||
"github.com/VictoriaMetrics/metricsql"
|
"github.com/VictoriaMetrics/metricsql"
|
||||||
|
@ -73,6 +74,14 @@ func Exec(ec *EvalConfig, q string, isFirstPointOnly bool) ([]netstorage.Result,
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if n := ec.RoundDigits; n < 100 {
|
||||||
|
for i := range result {
|
||||||
|
values := result[i].Values
|
||||||
|
for j, v := range values {
|
||||||
|
values[j] = decimal.RoundToDecimalDigits(v, n)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
* FATURE: vmagent: accept `scrape_offset` option at `scrape_config`. This option may be useful when scrapes must start at the specified offset of every scrape interval. See [these docs](https://victoriametrics.github.io/vmagent.html#troubleshooting) for details.
|
* FATURE: vmagent: accept `scrape_offset` option at `scrape_config`. This option may be useful when scrapes must start at the specified offset of every scrape interval. See [these docs](https://victoriametrics.github.io/vmagent.html#troubleshooting) for details.
|
||||||
* FEATURE: vmagent: support `proxy_tls_config`, `proxy_basic_auth`, `proxy_bearer_token` and `proxy_bearer_token_file` options at `scrape_config` section for configuring proxies specified via `proxy_url`. See [these docs](https://victoriametrics.github.io/vmagent.html#scraping-targets-via-a-proxy).
|
* FEATURE: vmagent: support `proxy_tls_config`, `proxy_basic_auth`, `proxy_bearer_token` and `proxy_bearer_token_file` options at `scrape_config` section for configuring proxies specified via `proxy_url`. See [these docs](https://victoriametrics.github.io/vmagent.html#scraping-targets-via-a-proxy).
|
||||||
* FEATURE: vmauth: allow using regexp paths in `url_map`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1112) for details.
|
* FEATURE: vmauth: allow using regexp paths in `url_map`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1112) for details.
|
||||||
|
* FEATURE: accept `round_digits` query arg at `/api/v1/query` and `/api/v1/query_range` handlers. This option can be set at Prometheus datasource in Grafana for limiting the number of digits after the decimal point in response values.
|
||||||
|
|
||||||
* BUGFIX: vmagent: prevent from high CPU usage bug during failing scrapes with small `scrape_timeout` (less than a few seconds).
|
* BUGFIX: vmagent: prevent from high CPU usage bug during failing scrapes with small `scrape_timeout` (less than a few seconds).
|
||||||
* BUGFIX: vmagent: reduce memory usage when Kubernetes service discovery is used in big number of distinct scrape config jobs by sharing Kubernetes object cache. See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1113
|
* BUGFIX: vmagent: reduce memory usage when Kubernetes service discovery is used in big number of distinct scrape config jobs by sharing Kubernetes object cache. See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1113
|
||||||
|
|
|
@ -562,14 +562,17 @@ in front of VictoriaMetrics. [Contact us](mailto:sales@victoriametrics.com) if y
|
||||||
VictoriaMetrics accepts relative times in `time`, `start` and `end` query args additionally to unix timestamps and [RFC3339](https://www.ietf.org/rfc/rfc3339.txt).
|
VictoriaMetrics accepts relative times in `time`, `start` and `end` query args additionally to unix timestamps and [RFC3339](https://www.ietf.org/rfc/rfc3339.txt).
|
||||||
For example, the following query would return data for the last 30 minutes: `/api/v1/query_range?start=-30m&query=...`.
|
For example, the following query would return data for the last 30 minutes: `/api/v1/query_range?start=-30m&query=...`.
|
||||||
|
|
||||||
|
VictoriaMetrics accepts `round_digits` query arg for `/api/v1/query` and `/api/v1/query_range` handlers. It can be used for rounding response values to the given number of digits after the decimal point. For example, `/api/v1/query?query=avg_over_time(temperature[1h])&round_digits=2` would round response values to up to two digits after the decimal point.
|
||||||
|
|
||||||
By default, VictoriaMetrics returns time series for the last 5 minutes from `/api/v1/series`, while the Prometheus API defaults to all time. Use `start` and `end` to select a different time range.
|
By default, VictoriaMetrics returns time series for the last 5 minutes from `/api/v1/series`, while the Prometheus API defaults to all time. Use `start` and `end` to select a different time range.
|
||||||
|
|
||||||
VictoriaMetrics accepts additional args for `/api/v1/labels` and `/api/v1/label/.../values` handlers.
|
VictoriaMetrics accepts additional args for `/api/v1/labels` and `/api/v1/label/.../values` handlers.
|
||||||
See [this feature request](https://github.com/prometheus/prometheus/issues/6178) for details:
|
|
||||||
|
|
||||||
* Any number [time series selectors](https://prometheus.io/docs/prometheus/latest/querying/basics/#time-series-selectors) via `match[]` query arg.
|
* Any number [time series selectors](https://prometheus.io/docs/prometheus/latest/querying/basics/#time-series-selectors) via `match[]` query arg.
|
||||||
* Optional `start` and `end` query args for limiting the time range for the selected labels or label values.
|
* Optional `start` and `end` query args for limiting the time range for the selected labels or label values.
|
||||||
|
|
||||||
|
See [this feature request](https://github.com/prometheus/prometheus/issues/6178) for details.
|
||||||
|
|
||||||
Additionally VictoriaMetrics provides the following handlers:
|
Additionally VictoriaMetrics provides the following handlers:
|
||||||
|
|
||||||
* `/api/v1/series/count` - returns the total number of time series in the database. Some notes:
|
* `/api/v1/series/count` - returns the total number of time series in the database. Some notes:
|
||||||
|
|
Loading…
Reference in a new issue