Skip to content

Commit

Permalink
[Metricbeat]Log prometheus errors instead of parsing families (elasti…
Browse files Browse the repository at this point in the history
…c#15712)

* log prometheus errors instead of parsing
  • Loading branch information
Pablo Mercado authored and jsoriano committed Feb 10, 2020
1 parent 60dd883 commit 7f35d77
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 5 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.next.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d
- Fix docker network stats when multiple interfaces are configured. {issue}14586[14586] {pull}14825[14825]
- Fix ListMetrics pagination in aws module. {issue}14926[14926] {pull}14942[14942]
- Fix CPU count in docker/cpu in cases where no `online_cpus` are reported {pull}15070[15070]
- Avoid parsing errors returned from prometheus endpoints. {pull}15712[15712]

*Packetbeat*

Expand Down
14 changes: 13 additions & 1 deletion metricbeat/helper/prometheus/prometheus.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,15 @@ package prometheus
import (
"fmt"
"io"
"io/ioutil"
"net/http"

"github.com/pkg/errors"
dto "github.com/prometheus/client_model/go"
"github.com/prometheus/common/expfmt"

"github.com/elastic/beats/libbeat/common"
"github.com/elastic/beats/libbeat/logp"
"github.com/elastic/beats/metricbeat/helper"
"github.com/elastic/beats/metricbeat/mb"
)
Expand All @@ -43,6 +45,7 @@ type Prometheus interface {

type prometheus struct {
httpfetcher
logger *logp.Logger
}

type httpfetcher interface {
Expand All @@ -52,10 +55,11 @@ type httpfetcher interface {
// NewPrometheusClient creates new prometheus helper
func NewPrometheusClient(base mb.BaseMetricSet) (Prometheus, error) {
http, err := helper.NewHTTP(base)

if err != nil {
return nil, err
}
return &prometheus{http}, nil
return &prometheus{http, base.Logger()}, nil
}

// GetFamilies requests metric families from prometheus endpoint and returns them
Expand All @@ -66,6 +70,14 @@ func (p *prometheus) GetFamilies() ([]*dto.MetricFamily, error) {
}
defer resp.Body.Close()

if resp.StatusCode > 399 {
bodyBytes, err := ioutil.ReadAll(resp.Body)
if err == nil {
p.logger.Debug("error received from prometheus endpoint: ", string(bodyBytes))
}
return nil, fmt.Errorf("unexpected status code %d from server", resp.StatusCode)
}

format := expfmt.ResponseFormat(resp.Header)
if format == "" {
return nil, fmt.Errorf("Invalid format for response of response")
Expand Down
10 changes: 6 additions & 4 deletions metricbeat/helper/prometheus/prometheus_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
"github.com/stretchr/testify/assert"

"github.com/elastic/beats/libbeat/common"
"github.com/elastic/beats/libbeat/logp"
mbtest "github.com/elastic/beats/metricbeat/mb/testing"
)

Expand Down Expand Up @@ -176,14 +177,15 @@ var _ = httpfetcher(&mockFetcher{})
// returns the mockFetcher.Response contents
func (m mockFetcher) FetchResponse() (*http.Response, error) {
return &http.Response{
Header: make(http.Header),
Body: ioutil.NopCloser(bytes.NewReader([]byte(m.response))),
StatusCode: 200,
Header: make(http.Header),
Body: ioutil.NopCloser(bytes.NewReader([]byte(m.response))),
}, nil
}

func TestPrometheus(t *testing.T) {

p := &prometheus{mockFetcher{response: promMetrics}}
p := &prometheus{mockFetcher{response: promMetrics}, logp.NewLogger("test")}

tests := []struct {
mapping *MetricsMapping
Expand Down Expand Up @@ -862,7 +864,7 @@ func TestPrometheusKeyLabels(t *testing.T) {

for _, tc := range testCases {
r := &mbtest.CapturingReporterV2{}
p := &prometheus{mockFetcher{response: tc.prometheusResponse}}
p := &prometheus{mockFetcher{response: tc.prometheusResponse}, logp.NewLogger("test")}
p.ReportProcessedMetrics(tc.mapping, r)
if !assert.Nil(t, r.GetErrors(),
"error reporting/processing metrics, at %q", tc.testName) {
Expand Down

0 comments on commit 7f35d77

Please sign in to comment.