From 7ccefde166f922c4e9e5d07db4e8ff20a5e0d1eb Mon Sep 17 00:00:00 2001 From: Srikanth Chekuri Date: Thu, 6 Jul 2023 13:59:18 +0530 Subject: [PATCH] Skip service port for scraper receivers (#1866) * Skip service port for scraper receivers * Update list * Add map for lookups * Update pkg/collector/parser/receiver.go * Add CHANGELOG entry * fix lint --- .chloggen/service-ports.yaml | 16 ++++++++++ pkg/collector/parser/receiver.go | 45 +++++++++++++++++++++++---- pkg/collector/parser/receiver_test.go | 11 +++++++ 3 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 .chloggen/service-ports.yaml diff --git a/.chloggen/service-ports.yaml b/.chloggen/service-ports.yaml new file mode 100644 index 0000000000..50a42d64a4 --- /dev/null +++ b/.chloggen/service-ports.yaml @@ -0,0 +1,16 @@ +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: bug_fix + +# The name of the component, or a single word describing the area of concern, (e.g. operator, target allocator, github action) +component: receivers + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Skip service port for scraper receivers + +# One or more tracking issues related to the change +issues: [1866] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: diff --git a/pkg/collector/parser/receiver.go b/pkg/collector/parser/receiver.go index a1823658b8..e5b4a3ae4f 100644 --- a/pkg/collector/parser/receiver.go +++ b/pkg/collector/parser/receiver.go @@ -77,8 +77,45 @@ func IsRegistered(name string) bool { var ( endpointKey = "endpoint" listenAddressKey = "listen_address" + scraperReceivers = map[string]struct{}{ + "prometheus": {}, + "kubeletstats": {}, + "sshcheck": {}, + "cloudfoundry": {}, + "vcenter": {}, + "oracledb": {}, + "snmp": {}, + "googlecloudpubsub": {}, + "chrony": {}, + "jmx": {}, + "podman_stats": {}, + "pulsar": {}, + "docker_stats": {}, + "aerospike": {}, + "zookeeper": {}, + "prometheus_simple": {}, + "saphana": {}, + "riak": {}, + "redis": {}, + "rabbitmq": {}, + "purefb": {}, + "postgresql": {}, + "nsxt": {}, + "nginx": {}, + "mysql": {}, + "memcached": {}, + "httpcheck": {}, + "haproxy": {}, + "flinkmetrics": {}, + "couchdb": {}, + } ) +func isScraperReceiver(name string) bool { + _, exists := scraperReceivers[name] + return exists +} + func singlePortFromConfigEndpoint(logger logr.Logger, name string, config map[interface{}]interface{}) *v1.ServicePort { var endpoint interface{} switch { @@ -101,14 +138,10 @@ func singlePortFromConfigEndpoint(logger logr.Logger, name string, config map[in case name == "tcplog" || name == "udplog": endpoint = getAddressFromConfig(logger, name, listenAddressKey, config) - // ignore kubeletstats receiver as it holds the field key endpoint, and it + // ignore the receiver as it holds the field key endpoint, and it // is a scraper, we only expose endpoint through k8s service objects for // receivers that aren't scrapers. - case name == "kubeletstats": - return nil - - // ignore prometheus receiver as it has no listening endpoint - case name == "prometheus": + case isScraperReceiver(name): return nil default: diff --git a/pkg/collector/parser/receiver_test.go b/pkg/collector/parser/receiver_test.go index 2566f7a7be..66c9bf083e 100644 --- a/pkg/collector/parser/receiver_test.go +++ b/pkg/collector/parser/receiver_test.go @@ -147,3 +147,14 @@ func (m *mockParser) Ports() ([]corev1.ServicePort, error) { func (m *mockParser) ParserName() string { return "__mock" } + +func TestSkipPortsForScrapers(t *testing.T) { + for receiver := range scraperReceivers { + builder := NewGenericReceiverParser(logger, receiver, map[interface{}]interface{}{ + "endpoint": "0.0.0.0:42069", + }) + ports, err := builder.Ports() + assert.NoError(t, err) + assert.Len(t, ports, 0) + } +}