Skip to content

Commit

Permalink
Fix usage of modules in Blackbox integration (grafana#2421)
Browse files Browse the repository at this point in the history
  • Loading branch information
marctc committed Oct 25, 2022
1 parent 76958c2 commit 86c80d7
Show file tree
Hide file tree
Showing 5 changed files with 121 additions and 6 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ Main (unreleased)

- Fix identifier on target creation for SNMP v2 integration. (@marctc)

- Fix bug when specifying Blackbox's modules when using Blackbox integration. (@marctc)

v0.28.0 (2022-09-29)
--------------------

Expand Down
3 changes: 3 additions & 0 deletions pkg/integrations/blackbox_exporter/blackbox_exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,9 @@ func (i *Integration) ScrapeConfigs() []config.ScrapeConfig {
for _, target := range i.cfg.BlackboxTargets {
queryParams := url.Values{}
queryParams.Add("target", target.Target)
if target.Module != "" {
queryParams.Add("module", target.Module)
}
res = append(res, config.ScrapeConfig{
JobName: i.cfg.Name() + "/" + target.Name,
MetricsPath: "/metrics",
Expand Down
54 changes: 54 additions & 0 deletions pkg/integrations/blackbox_exporter/blackbox_exporter_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package blackbox_exporter

import (
"net/url"
"testing"

integrations "github.com/grafana/agent/pkg/integrations/config"
"github.com/stretchr/testify/require"
"gopkg.in/yaml.v2"
)

func TestBlackboxConfig(t *testing.T) {
t.Run("scrape configs", func(t *testing.T) {
var config Config
strConfig := `---
blackbox_targets:
- name: icmp_cloudflare
address: 1.1.1.1
module: icmp_ipv4
- name: http_cloudflare
address: https://www.cloudflare.com
module: http_2xx_ipv4
blackbox_config:
modules:
http_2xx_ipv4:
prober: http
timeout: 5s
http:
preferred_ip_protocol: "ip4"
icmp_ipv4:
prober: "icmp"
timeout: 5s
icmp:
preferred_ip_protocol: "ip4"
`
require.NoError(t, yaml.UnmarshalStrict([]byte(strConfig), &config), "unmarshal config")

integration, err := New(nil, &config)
require.NoError(t, err)
expectedScrapeConfigs := []integrations.ScrapeConfig{
{
JobName: "blackbox/icmp_cloudflare",
MetricsPath: "/metrics",
QueryParams: url.Values{"target": []string{"1.1.1.1"}, "module": []string{"icmp_ipv4"}},
},
{
JobName: "blackbox/http_cloudflare",
MetricsPath: "/metrics",
QueryParams: url.Values{"target": []string{"https://www.cloudflare.com"}, "module": []string{"http_2xx_ipv4"}},
},
}
require.Equal(t, integration.ScrapeConfigs(), expectedScrapeConfigs)
})
}
8 changes: 2 additions & 6 deletions pkg/integrations/v2/blackbox_exporter/blackbox.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,17 +90,13 @@ func (bbh *blackboxHandler) Handler(prefix string) (http.Handler, error) {
func (bbh *blackboxHandler) createHandler(targets []blackbox_exporter.BlackboxTarget) http.HandlerFunc {
blackboxTargets := make(map[string]blackbox_exporter.BlackboxTarget)
for _, target := range targets {
blackboxTargets[target.Name] = target
blackboxTargets[target.Target] = target
}
return func(w http.ResponseWriter, r *http.Request) {
params := r.URL.Query()

targetName := params.Get("target")
t, ok := blackboxTargets[targetName]
if ok {
params.Set("target", t.Target)
}

t := blackboxTargets[targetName]
moduleName := params.Get("module")
if moduleName == "" {
params.Set("module", t.Module)
Expand Down
60 changes: 60 additions & 0 deletions pkg/integrations/v2/blackbox_exporter/blackbox_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package blackbox_exporter_v2

import (
"testing"

"github.com/grafana/agent/pkg/integrations/blackbox_exporter"
"github.com/grafana/agent/pkg/integrations/v2"
integrations_v2 "github.com/grafana/agent/pkg/integrations/v2"
autoscrape "github.com/grafana/agent/pkg/integrations/v2/autoscrape"
"github.com/grafana/agent/pkg/integrations/v2/common"
"github.com/prometheus/common/model"
"github.com/prometheus/prometheus/discovery/targetgroup"
"github.com/stretchr/testify/require"
)

func TestBlackbox(t *testing.T) {
t.Run("targets", func(t *testing.T) {
key := "blackbox-test"
aEnabled := true

c := Config{
ProbeTimeoutOffset: 0.5,
Common: common.MetricsConfig{
InstanceKey: &key,
Autoscrape: autoscrape.Config{
Enable: &aEnabled,
},
},
BlackboxTargets: []blackbox_exporter.BlackboxTarget{{
Name: "icmp_cloudflare",
Target: "1.1.1.1",
Module: "icmp_ipv4",
}},
}
integation, err := c.NewIntegration(nil, integrations_v2.Globals{})
require.NoError(t, err)

i := integation.(integrations.MetricsIntegration)
actual := i.Targets(integrations.Endpoint{Host: "test", Prefix: "/test/"})
expect := []*targetgroup.Group{{
Source: "blackbox/blackbox",
Labels: model.LabelSet{
"instance": "blackbox-test",
"job": "integrations/blackbox",
"agent_hostname": "",

"__meta_agent_integration_name": "blackbox",
"__meta_agent_integration_instance": "blackbox",
"__meta_agent_integration_autoscrape": "1",
},
Targets: []model.LabelSet{{
model.AddressLabel: "test",
model.MetricsPathLabel: "/test/metrics",
"blackbox_target": "1.1.1.1",
"__param_target": "1.1.1.1",
}},
}}
require.Equal(t, expect, actual)
})
}

0 comments on commit 86c80d7

Please sign in to comment.