Skip to content

Commit

Permalink
Allow autodiscover to monitor unexposed ports (#6727)
Browse files Browse the repository at this point in the history
The metrics hint builder needs a slight change to allow monitoring of endpoints like `${data.host}:9090`. Currently it blocks such cases. For host network containers, there wouldnt be any port on the configuration as well. We would just spin up metricbeat modules, if port is 0 and the host hint has `data.host` on it.
  • Loading branch information
vjsamuel authored and ruflin committed Apr 4, 2018
1 parent 726c9dd commit f0f7af2
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,7 @@ https://github.com/elastic/beats/compare/v6.0.0-beta2...master[Check the HEAD di
- Set `namespace` as default metricset in Aerospike module. {pull}6669[6669]
- Set `service` as default metricset in Windows module. {pull}6675[6675]
- Set all metricsets as default metricsets in uwsgi module. {pull}6688[6688]
- Allow autodiscover to monitor unexposed ports {pull}6727[6727]
- Mark kubernetes.event metricset as beta. {pull}6715[6715]
- Set all metricsets as default metricsets in couchbase module. {pull}6683[6683]
- Mark uwsgi module and metricset as beta. {pull}6717[6717]
Expand Down
4 changes: 3 additions & 1 deletion metricbeat/autodiscover/builder/hints/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,9 @@ func (m *metricHints) getHostsWithPort(hints common.MapStr, port int) []string {
// Only pick hosts that have ${data.port} or the port on current event. This will make
// sure that incorrect meta mapping doesn't happen
for _, h := range thosts {
if strings.Contains(h, "data.port") || strings.Contains(h, fmt.Sprintf(":%d", port)) {
if strings.Contains(h, "data.port") || strings.Contains(h, fmt.Sprintf(":%d", port)) ||
// Use the event that has no port config if there is a ${data.host}:9090 like input
(port == 0 && strings.Contains(h, "data.host")) {
result = append(result, h)
}
}
Expand Down
4 changes: 3 additions & 1 deletion metricbeat/autodiscover/builder/hints/metrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,8 @@ func TestGenerateHints(t *testing.T) {
},
},
{
message: "Module, namespace, host hint should return valid config without port should not return hosts",
message: "Module, namespace, host hint should return valid config with port should return hosts for " +
"docker host network scenario",
event: bus.Event{
"host": "1.2.3.4",
"hints": common.MapStr{
Expand All @@ -128,6 +129,7 @@ func TestGenerateHints(t *testing.T) {
"timeout": "3s",
"period": "1m",
"enabled": true,
"hosts": []interface{}{"1.2.3.4:9090"},
},
},
{
Expand Down
3 changes: 3 additions & 0 deletions metricbeat/docs/autodiscover-kubernetes-config.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,6 @@ metricbeat.autodiscover:
-------------------------------------------------------------------------------------

This configuration launches a `prometheus` module for all containers of pods annotated `prometheus.io.scrape=true`.
There are cases where the PodSpec does not expose a port. In such cases the host can be provided as `${data.host}:9090`
directly. However, the metadata which is used to enrich the metric would not have information regarding the container since
the discovery mechanism would not have information on which container the port maps to.

0 comments on commit f0f7af2

Please sign in to comment.