mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2026-05-17 00:26:36 +03:00
app/vmctl: respect time filter when exploring time series for influxdb (#8371)
https://github.com/VictoriaMetrics/VictoriaMetrics/issues/8259 https://docs.influxdata.com/influxdb/v1/query_language/explore-schema/#run-a-show-series-query-limited-by-time ### Checklist The following checks are **mandatory**: - [ ] My change adheres [VictoriaMetrics contributing guidelines](https://docs.victoriametrics.com/contributing/). --------- Signed-off-by: hagen1778 <roman@victoriametrics.com>
This commit is contained in:
committed by
GitHub
parent
cddccfde57
commit
788c740d62
@@ -344,7 +344,7 @@ var (
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: influxSkipDatabaseLabel,
|
||||
Usage: "Wether to skip adding the label 'db' to timeseries.",
|
||||
Usage: "Whether to skip adding the label 'db' to timeseries.",
|
||||
Value: false,
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
|
||||
@@ -144,9 +144,9 @@ func timeFilter(start, end string) string {
|
||||
// by checking available (non-empty) tags, fields and measurements
|
||||
// which unique combination represents all possible
|
||||
// time series existing in database.
|
||||
// The explore required to reduce the load on influx
|
||||
// Explore is required to reduce the load on influx
|
||||
// by querying field of the exact time series at once,
|
||||
// instead of fetching all of the values over and over.
|
||||
// instead of fetching all the values over and over.
|
||||
//
|
||||
// May contain non-existing time series.
|
||||
func (c *Client) Explore() ([]*Series, error) {
|
||||
@@ -340,10 +340,7 @@ func (c *Client) fieldsByMeasurement() (map[string][]string, error) {
|
||||
}
|
||||
|
||||
func (c *Client) getSeries() ([]*Series, error) {
|
||||
com := "show series"
|
||||
if c.filterSeries != "" {
|
||||
com = fmt.Sprintf("%s %s", com, c.filterSeries)
|
||||
}
|
||||
com := c.getSeriesCommand()
|
||||
q := influx.Query{
|
||||
Command: com,
|
||||
Database: c.database,
|
||||
@@ -389,6 +386,21 @@ func (c *Client) getSeries() ([]*Series, error) {
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (c *Client) getSeriesCommand() string {
|
||||
com := "show series"
|
||||
if c.filterSeries != "" {
|
||||
com = fmt.Sprintf("%s %s", com, c.filterSeries)
|
||||
}
|
||||
if c.filterTime != "" {
|
||||
joinStatement := " where "
|
||||
if strings.Contains(strings.ToLower(com), joinStatement) {
|
||||
joinStatement = " AND "
|
||||
}
|
||||
com = fmt.Sprintf("%s%s%s", com, joinStatement, c.filterTime)
|
||||
}
|
||||
return com
|
||||
}
|
||||
|
||||
// getMeasurementTags get the tags for each measurement.
|
||||
// tags are placed in a map without values (similar to a set) for quick lookups:
|
||||
// {"measurement1": {"tag1", "tag2"}, "measurement2": {"tag3", "tag4"}}
|
||||
|
||||
@@ -103,3 +103,26 @@ func TestTimeFilter(t *testing.T) {
|
||||
// both start and end filters
|
||||
f("2020-01-01T20:07:00Z", "2020-01-01T21:07:00Z", "time >= '2020-01-01T20:07:00Z' and time <= '2020-01-01T21:07:00Z'")
|
||||
}
|
||||
|
||||
func TestGetSeriesCommand(t *testing.T) {
|
||||
f := func(filterSeries, filterTime, expCommand string) {
|
||||
t.Helper()
|
||||
|
||||
c := &Client{
|
||||
filterTime: filterTime,
|
||||
filterSeries: filterSeries,
|
||||
}
|
||||
gotCommand := c.getSeriesCommand()
|
||||
if gotCommand != expCommand {
|
||||
t.Fatalf("unexpected command\ngot\n%s\nwant\n%s", gotCommand, expCommand)
|
||||
}
|
||||
}
|
||||
|
||||
f("", "", "show series")
|
||||
f("from cpu", "", "show series from cpu")
|
||||
f("from cpu where arch='x86'", "", "show series from cpu where arch='x86'")
|
||||
f("", "time >= '2020-01-01T20:07:00Z'", "show series where time >= '2020-01-01T20:07:00Z'")
|
||||
f("from cpu", "time >= '2020-01-01T20:07:00Z'", "show series from cpu where time >= '2020-01-01T20:07:00Z'")
|
||||
f("from cpu where arch='x86'", "time >= '2020-01-01T20:07:00Z'", "show series from cpu where arch='x86' AND time >= '2020-01-01T20:07:00Z'")
|
||||
f("from cpu where arch='x86' AND hostname='host_2753'", "time >= '2020-01-01T20:07:00Z'", "show series from cpu where arch='x86' AND hostname='host_2753' AND time >= '2020-01-01T20:07:00Z'")
|
||||
}
|
||||
|
||||
@@ -25,6 +25,8 @@ See also [LTS releases](https://docs.victoriametrics.com/lts-releases/).
|
||||
* FEATURE: [dashboards/single](https://grafana.com/grafana/dashboards/10229) and [dashboards/cluster](https://grafana.com/grafana/dashboards/11176): show number of parts in the last partition on `LSM parts max by type` panel. Before, the resulting graph could be skewed by the max number of parts across all partitions. Displaying parts for the latest partition is the correct way to show if storage is currently impacted by merge delays.
|
||||
* FEATURE: [dashboards/cluster](https://grafana.com/grafana/dashboards/11176): add panel `Partial query results` that shows the number of served [partial responses](https://docs.victoriametrics.com/cluster-victoriametrics/#cluster-availability) by vmselects.
|
||||
|
||||
* BUGFIX: [vmctl](https://docs.victoriametrics.com/vmctl/): respect time filter when exploring time series for [influxdb mode](https://docs.victoriametrics.com/vmctl/#migrating-data-from-influxdb-1x). See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/8259) for details.
|
||||
|
||||
## [v1.112.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.112.0)
|
||||
|
||||
Released at 2025-02-21
|
||||
|
||||
@@ -1191,7 +1191,7 @@ Flags available only for the `opentsdb` command:
|
||||
--influx-measurement-field-separator value
|
||||
The {separator} symbol used to concatenate {measurement} and {field} names into series name {measurement}{separator}{field}. (default: "_")
|
||||
--influx-skip-database-label
|
||||
Wether to skip adding the label 'db' to timeseries. (default: false)
|
||||
Whether to skip adding the label 'db' to timeseries. (default: false)
|
||||
--influx-prometheus-mode
|
||||
Whether to restore the original timeseries name previously written from Prometheus to InfluxDB v1 via remote_write. (default: false)
|
||||
--influx-cert-file value
|
||||
|
||||
Reference in New Issue
Block a user