diff --git a/app/vmagent/remotewrite/client.go b/app/vmagent/remotewrite/client.go index 77c92ebf6..b33c20f60 100644 --- a/app/vmagent/remotewrite/client.go +++ b/app/vmagent/remotewrite/client.go @@ -220,28 +220,33 @@ again: goto again } statusCode := resp.StatusCode - if statusCode/100 != 2 { - metrics.GetOrCreateCounter(fmt.Sprintf(`vmagent_remotewrite_requests_total{url=%q, status_code="%d"}`, c.urlLabelValue, statusCode)).Inc() - retryDuration *= 2 - if retryDuration > time.Minute { - retryDuration = time.Minute - } - body, err := ioutil.ReadAll(resp.Body) - if err != nil { - logger.Errorf("cannot read response body from %q: %s", c.remoteWriteURL, err) - } else { - logger.Errorf("unexpected status code received after sending a block with size %d bytes to %q: %d; response body=%q; re-sending the block in %.3f seconds", - len(block), c.remoteWriteURL, statusCode, body, retryDuration.Seconds()) - } - t := time.NewTimer(retryDuration) - select { - case <-c.stopCh: - t.Stop() - return - case <-t.C: - } - c.retriesCount.Inc() - goto again + if statusCode/100 == 2 { + _ = resp.Body.Close() + c.requestsOKCount.Inc() + return } - c.requestsOKCount.Inc() + + // Unexpected status code returned + metrics.GetOrCreateCounter(fmt.Sprintf(`vmagent_remotewrite_requests_total{url=%q, status_code="%d"}`, c.urlLabelValue, statusCode)).Inc() + retryDuration *= 2 + if retryDuration > time.Minute { + retryDuration = time.Minute + } + body, err := ioutil.ReadAll(resp.Body) + _ = resp.Body.Close() + if err != nil { + logger.Errorf("cannot read response body from %q: %s", c.remoteWriteURL, err) + } else { + logger.Errorf("unexpected status code received after sending a block with size %d bytes to %q: %d; response body=%q; re-sending the block in %.3f seconds", + len(block), c.remoteWriteURL, statusCode, body, retryDuration.Seconds()) + } + t := time.NewTimer(retryDuration) + select { + case <-c.stopCh: + t.Stop() + return + case <-t.C: + } + c.retriesCount.Inc() + goto again }