diff --git a/app/vmctl/flags.go b/app/vmctl/flags.go index 4d72e18678..da88ba3f1c 100644 --- a/app/vmctl/flags.go +++ b/app/vmctl/flags.go @@ -477,6 +477,7 @@ const ( remoteReadHTTPTimeout = "remote-read-http-timeout" remoteReadHeaders = "remote-read-headers" remoteReadInsecureSkipVerify = "remote-read-insecure-skip-verify" + remoteReadDisablePathAppend = "remote-read-disable-path-append" ) var ( @@ -553,6 +554,11 @@ var ( Usage: "Whether to skip TLS certificate verification when connecting to the remote read address", Value: false, }, + &cli.BoolFlag{ + Name: remoteReadDisablePathAppend, + Usage: "Whether to disable automatic appending of the path to the remote storage.", + Value: true, + }, } ) diff --git a/app/vmctl/main.go b/app/vmctl/main.go index ba6c570b66..383869d002 100644 --- a/app/vmctl/main.go +++ b/app/vmctl/main.go @@ -133,6 +133,7 @@ func main() { LabelName: c.String(remoteReadFilterLabel), LabelValue: c.String(remoteReadFilterLabelValue), InsecureSkipVerify: c.Bool(remoteReadInsecureSkipVerify), + DisablePathAppend: c.Bool(remoteReadDisablePathAppend), }) if err != nil { return fmt.Errorf("error create remote read client: %s", err) diff --git a/app/vmctl/remoteread/remoteread.go b/app/vmctl/remoteread/remoteread.go index fe458f0184..5752ac08a4 100644 --- a/app/vmctl/remoteread/remoteread.go +++ b/app/vmctl/remoteread/remoteread.go @@ -7,6 +7,7 @@ import ( "fmt" "io" "net/http" + "net/url" "strings" "time" @@ -31,19 +32,22 @@ type StreamCallback func(series *vm.TimeSeries) error // Client is an HTTP client for reading // time series via remote read protocol. type Client struct { - addr string - c *http.Client - user string - password string - useStream bool - headers []keyValue - matchers []*prompb.LabelMatcher + addr string + disablePathAppend bool + c *http.Client + user string + password string + useStream bool + headers []keyValue + matchers []*prompb.LabelMatcher } // Config is config for remote read. type Config struct { // Addr of remote storage Addr string + // DisablePathAppend disable automatic appending of the remote read path + DisablePathAppend bool // Timeout defines timeout for HTTP requests // made by remote read client Timeout time.Duration @@ -104,13 +108,15 @@ func NewClient(cfg Config) (*Client, error) { Timeout: cfg.Timeout, Transport: utils.Transport(cfg.Addr, cfg.InsecureSkipVerify), }, - addr: strings.TrimSuffix(cfg.Addr, "/"), - user: cfg.Username, - password: cfg.Password, - useStream: cfg.UseStream, - headers: headers, - matchers: []*prompb.LabelMatcher{m}, + addr: strings.TrimSuffix(cfg.Addr, "/"), + disablePathAppend: cfg.DisablePathAppend, + user: cfg.Username, + password: cfg.Password, + useStream: cfg.UseStream, + headers: headers, + matchers: []*prompb.LabelMatcher{m}, } + return c, nil } @@ -155,8 +161,16 @@ func (c *Client) do(req *http.Request) (*http.Response, error) { func (c *Client) fetch(ctx context.Context, data []byte, streamCb StreamCallback) error { r := bytes.NewReader(data) - url := c.addr + remoteReadPath - req, err := http.NewRequest(http.MethodPost, url, r) + // by default, we are using a common remote read path + u, err := url.JoinPath(c.addr, remoteReadPath) + if err != nil { + return fmt.Errorf("error create url from addr %s and default remote read path %s", c.addr, remoteReadPath) + } + // we should use full address from the remote-read-src-addr flag + if c.disablePathAppend { + u = c.addr + } + req, err := http.NewRequest(http.MethodPost, u, r) if err != nil { return fmt.Errorf("failed to create new HTTP request: %w", err) } diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index ec1db9cca3..71a6b4caa6 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -29,9 +29,10 @@ The following `tip` changes can be tested by building VictoriaMetrics components * FEATURE: [vmalert](https://docs.victoriametrics.com/vmalert.html): remove support of deprecated web links of `/api/v1///status` form in favour of `/api/v1/alerts?group_id=<>&alert_id=<>` links. Links of `/api/v1///status` form were deprecated in v1.79.0. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2825) for details. * FEATURE: [vmctl](https://docs.victoriametrics.com/vmctl.html): allow disabling binary export API protocol via `-vm-native-disable-binary-protocol` cmd-line flag when [migrating data from VictoriaMetrics](https://docs.victoriametrics.com/vmctl.html#migrating-data-from-victoriametrics). Disabling binary protocol can be useful for deduplication of the exported data before ingestion. For this, deduplication need [to be configured](https://docs.victoriametrics.com/#deduplication) at `-vm-native-src-addr` side and `-vm-native-disable-binary-protocol` should be set on vmctl side. * FEATURE: [vmctl](https://docs.victoriametrics.com/vmctl.html): add support of `week` step for [time-based chunking migration](https://docs.victoriametrics.com/vmctl.html#using-time-based-chunking-of-migration). See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4738). +* FEATURE: [vmctl](https://docs.victoriametrics.com/vmctl.html): do not add `/api/v1/read` suffix to remote read storage address defined by `--remote-read-src-addr` if a `--remote-read-disable-path-append` command-line flag is set. It allows an overriding path for remote-read API via `--remote-read-src-addr`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4655). -* BUGFIX: [vmbackupmanager](https://docs.victoriametrics.com/vmbackupmanager.html): fix panic when creating a backup to a local filesystem on Windows. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4704). * BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent.html): use local scrape timestamps for the scraped metrics unless `honor_timestamps: true` option is explicitly set at [scrape_config](https://docs.victoriametrics.com/sd_configs.html#scrape_configs). This fixes gaps for metrics collected from [cadvisor](https://github.com/google/cadvisor) or similar exporters, which export metrics with invalid timestamps. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4697) and [this comment](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4697#issuecomment-1654614799) for details. The issue has been introduced in [v1.68.0](#v1680). +* BUGFIX: [vmbackupmanager](https://docs.victoriametrics.com/vmbackupmanager.html): fix panic when creating a backup to a local filesystem on Windows. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4704). ## [v1.92.1](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.92.1)