Skip to content

Commit 83f3b0a

Browse files
chore(deps): Migrate routing processor to routing connector for metrics collection
Usage of routing connector is feature flagged and will be kept off/false by default. After sufficient notices and release notes, the feature flag to use routing connector in metrics collection will be turned on. Routing processor is currently removed from the otelcol-contrib version upstream, but to handle the migration better, sumo is still keeping routing processor in its version of otel col. Signed-off-by: Dhruv Shah <dhruv.shah@sumologic.com>
1 parent bf22c2d commit 83f3b0a

File tree

13 files changed

+1067
-7
lines changed

13 files changed

+1067
-7
lines changed

.changelog/4025.added.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
chore(deps): Migrate routing processor to routing connector for metrics collection

ci/check_configuration_keys.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
'sumologic.setup.debug',
4848
'metrics-server.image.pullSecrets',
4949
'sumologic.events.sourceCategory',
50+
'sumologic.metrics.useRoutingConnectors',
5051
}
5152

5253
def main(values_path: str, readme_path: str, full_diff=False) -> None:

deploy/helm/sumologic/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ The following table lists the configurable parameters of the Sumo Logic chart an
151151
| `sumologic.metrics.dropHistogramBuckets` | Drop buckets from histogram and summary metrics, leaving only the sum and count components. | `true` |
152152
| `sumologic.metrics.allowHistogramRegex` | Allowlist for Histogram metrics, including the buckets | `"^$"` |
153153
| `sumologic.metrics.sourceType` | The type of the Sumo Logic source being used for metrics ingestion. Can be `http` or `otlp`. | `otlp` |
154+
| `sumologic.metrics.useRoutingConnectors` | Enable to use routing connectors. | `false` |
154155
| `sumologic.traces.enabled` | Set the enabled flag to true to enable tracing ingestion. _Tracing must be enabled for the account first. Please contact your Sumo representative for activation details_ | `true` |
155156
| `sumologic.traces.spans_per_request` | Maximum number of spans sent in single batch | `100` |
156157
| `sumologic.traces.sourceType` | The type of the Sumo Logic source being used for traces ingestion. Can be `http` for [HTTP Source](https://help.sumologic.com/docs/send-data/hosted-collectors/http-source/traces/) or `otlp` for [OTLP/HTTP Source](https://help.sumologic.com/docs/send-data/hosted-collectors/http-source/otlp/). | `otlp` |

deploy/helm/sumologic/conf/metrics/otelcol/config.yaml

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
{{- if and (.Values.sumologic.metrics.useRoutingConnectors) (eq .Values.sumologic.metrics.sourceType "http") }}
2+
connectors:
3+
{{ tpl (.Files.Get "conf/metrics/otelcol/connectors.yaml") . | indent 2 }}
4+
{{- end}}
5+
16
exporters:
27
{{ tpl (.Files.Get "conf/metrics/otelcol/exporters.yaml") . | indent 2 }}
38

@@ -53,6 +58,67 @@ service:
5358
pipelines:
5459
metrics:
5560
{{ tpl (.Files.Get "conf/metrics/otelcol/pipeline.yaml") . | indent 6 }}
61+
{{- if and (.Values.sumologic.metrics.useRoutingConnectors) (eq .Values.sumologic.metrics.sourceType "http") }}
62+
metrics/sumologic/default:
63+
receivers:
64+
- routing/default
65+
exporters:
66+
- sumologic/default
67+
{{- if eq .Values.debug.metrics.metadata.print true }}
68+
metrics/debug:
69+
receivers:
70+
- routing/default
71+
exporters:
72+
- debug
73+
{{- end }}
74+
{{- if eq (include "sumologic-mock.forward-metrics-metadata" .) "true" }}
75+
metrics/sumologic/sumologic-mock-default:
76+
receivers:
77+
- routing/default
78+
exporters:
79+
- sumologic/sumologic-mock-default
80+
metrics/sumologic/sumologic-mock-http:
81+
receivers:
82+
- routing/default
83+
exporters:
84+
- sumologic/sumologic-mock-http
85+
{{- end }}
86+
metrics/apiserver:
87+
receivers:
88+
- routing/default
89+
exporters:
90+
- sumologic/apiserver
91+
metrics/control_plane:
92+
receivers:
93+
- routing/default
94+
exporters:
95+
- sumologic/control_plane
96+
metrics/controller:
97+
receivers:
98+
- routing/default
99+
exporters:
100+
- sumologic/controller
101+
metrics/kubelet:
102+
receivers:
103+
- routing/default
104+
exporters:
105+
- sumologic/kubelet
106+
metrics/node:
107+
receivers:
108+
- routing/default
109+
exporters:
110+
- sumologic/node
111+
metrics/scheduler:
112+
receivers:
113+
- routing/default
114+
exporters:
115+
- sumologic/scheduler
116+
metrics/state:
117+
receivers:
118+
- routing/default
119+
exporters:
120+
- sumologic/state
121+
{{- end }}
56122
telemetry:
57123
logs:
58124
level: {{ .Values.metadata.metrics.logLevel }}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
routing/default:
2+
default_pipelines:
3+
- metrics/sumologic/default
4+
{{- if eq .Values.debug.metrics.metadata.print true }}
5+
- metrics/debug
6+
{{- end }}
7+
{{- if eq (include "sumologic-mock.forward-metrics-metadata" .) "true" }}
8+
- metrics/sumologic/sumologic-mock-default
9+
{{- end }}
10+
table:
11+
- statement: route() where resource.attributes["job"] == "apiserver"
12+
pipelines:
13+
- metrics/apiserver
14+
{{- if eq .Values.debug.metrics.metadata.print true }}
15+
- metrics/debug
16+
{{- end }}
17+
{{- if eq (include "sumologic-mock.forward-metrics-metadata" .) "true" }}
18+
- metrics/sumologic/sumologic-mock-http
19+
{{- end }}
20+
- statement: route() where resource.attributes["job"] == "coredns"
21+
pipelines:
22+
- metrics/control_plane
23+
{{- if eq .Values.debug.metrics.metadata.print true }}
24+
- metrics/debug
25+
{{- end }}
26+
{{- if eq (include "sumologic-mock.forward-metrics-metadata" .) "true" }}
27+
- metrics/sumologic/sumologic-mock-http
28+
{{- end }}
29+
- statement: route() where resource.attributes["job"] == "kube-etcd"
30+
pipelines:
31+
- metrics/control_plane
32+
{{- if eq .Values.debug.metrics.metadata.print true }}
33+
- metrics/debug
34+
{{- end }}
35+
{{- if eq (include "sumologic-mock.forward-metrics-metadata" .) "true" }}
36+
- metrics/sumologic/sumologic-mock-http
37+
{{- end }}
38+
- statement: route() where resource.attributes["job"] == "kube-controller-manager"
39+
pipelines:
40+
- metrics/controller
41+
{{- if eq .Values.debug.metrics.metadata.print true }}
42+
- metrics/debug
43+
{{- end }}
44+
{{- if eq (include "sumologic-mock.forward-metrics-metadata" .) "true" }}
45+
- metrics/sumologic/sumologic-mock-http
46+
{{- end }}
47+
- statement: route() where resource.attributes["job"] == "kubelet"
48+
pipelines:
49+
- metrics/kubelet
50+
{{- if eq .Values.debug.metrics.metadata.print true }}
51+
- metrics/debug
52+
{{- end }}
53+
{{- if eq (include "sumologic-mock.forward-metrics-metadata" .) "true" }}
54+
- metrics/sumologic/sumologic-mock-http
55+
{{- end }}
56+
- statement: route() where resource.attributes["job"] == "node-exporter"
57+
pipelines:
58+
- metrics/node
59+
{{- if eq .Values.debug.metrics.metadata.print true }}
60+
- metrics/debug
61+
{{- end }}
62+
{{- if eq (include "sumologic-mock.forward-metrics-metadata" .) "true" }}
63+
- metrics/sumologic/sumologic-mock-http
64+
{{- end }}
65+
- statement: route() where resource.attributes["job"] == "kube-scheduler"
66+
pipelines:
67+
- metrics/scheduler
68+
{{- if eq .Values.debug.metrics.metadata.print true }}
69+
- metrics/debug
70+
{{- end }}
71+
{{- if eq (include "sumologic-mock.forward-metrics-metadata" .) "true" }}
72+
- metrics/sumologic/sumologic-mock-http
73+
{{- end }}
74+
- statement: route() where resource.attributes["job"] == "kube-state-metrics"
75+
pipelines:
76+
- metrics/state
77+
{{- if eq .Values.debug.metrics.metadata.print true }}
78+
- metrics/debug
79+
{{- end }}
80+
{{- if eq (include "sumologic-mock.forward-metrics-metadata" .) "true" }}
81+
- metrics/sumologic/sumologic-mock-http
82+
{{- end }}

deploy/helm/sumologic/conf/metrics/otelcol/pipeline.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
exporters:
2+
{{- if and (.Values.sumologic.metrics.useRoutingConnectors) (eq .Values.sumologic.metrics.sourceType "http") }}
3+
- routing/default
4+
{{- else }}
25
- sumologic/default
36
{{- if eq .Values.debug.metrics.metadata.print true }}
47
- debug
@@ -18,6 +21,8 @@ exporters:
1821
- sumologic/sumologic-mock-http
1922
{{- end }}
2023
{{- end }}
24+
{{- end }}
25+
2126
processors:
2227
- memory_limiter
2328
- metricstransform
@@ -45,7 +50,7 @@ processors:
4550
- filter/app_metrics
4651
{{- end }}
4752
- batch
48-
{{- if eq .Values.sumologic.metrics.sourceType "http" }}
53+
{{- if and (not (.Values.sumologic.metrics.useRoutingConnectors | default false)) (eq .Values.sumologic.metrics.sourceType "http") }}
4954
- routing
5055
{{- end }}
5156
receivers:

deploy/helm/sumologic/conf/metrics/otelcol/processors.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ resource/remove_k8s_pod_pod_name:
165165
- action: delete
166166
key: k8s.pod.pod_name
167167

168-
{{- if eq .Values.sumologic.metrics.sourceType "http" }}
168+
{{- if and (not (.Values.sumologic.metrics.useRoutingConnectors | default false)) (eq .Values.sumologic.metrics.sourceType "http") }}
169169
routing:
170170
default_exporters:
171171
- sumologic/default

deploy/helm/sumologic/values.yaml

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -462,11 +462,14 @@ sumologic:
462462
fallbackExporters: []
463463
table: []
464464
## -
465-
## ## exporter is name of the exporter
466-
## exporter: sumologic/otlp
467-
## ## statement is an OTTL condition which defines what data should be send to the exporter
468-
## ## see routing processor documentation for more details:
469-
## ## https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/aee4b75100530bce7edbf736fbcf76ac4f6ced6d/processor/routingprocessor/README.md#tech-preview-opentelemetry-transformation-language-statements-as-routing-conditions
465+
## ## exporters is an array of the exporter
466+
## exporters:
467+
## - sumologic/otlp
468+
## ## statement is an OTTL condition which defines what data should be sent to the exporters
469+
## ## see routing connector documentation for more details:
470+
## ## https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/aee4b75100530bce7edbf736fbcf76ac4f6ced6d/connector/routingconnector
471+
## routing connector expects you to define a pipeline, but here the user can just mention the exporter.
472+
## The helm deployment would convert exporters into correct pipelines and configure the connectors.
470473
## statement: ""
471474

472475
## Fields to be created at Sumo Logic to ensure logs are tagged with
@@ -764,6 +767,8 @@ sumologic:
764767
## The type of source we send to in Sumo. The possible values are http and otlp.
765768
## Consult the documentation for more information.
766769
sourceType: otlp
770+
## In order to use routing connectors, please enable this flag.
771+
# useRoutingConnectors: true
767772

768773
### Traces configuration
769774
## Set the enabled flag to false to disable traces from instrumentation ingestion.

tests/helm/metrics_test.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ func TestMetadataSourceTypeOTLP(t *testing.T) {
155155
Rest map[string]interface{} `yaml:",inline"`
156156
}
157157
Processors map[string]interface{}
158+
Connectors map[string]interface{}
158159
Service struct {
159160
Pipelines struct {
160161
Metrics struct {
@@ -179,6 +180,7 @@ sumologic:
179180
assert.Equal(t, otelConfig.Exporters.Default.Endpoint, "${SUMO_ENDPOINT_DEFAULT_OTLP_METRICS_SOURCE}")
180181
assert.Len(t, otelConfig.Exporters.Rest, 0)
181182
assert.NotContains(t, otelConfig.Processors, "routing")
183+
assert.NotContains(t, otelConfig.Connectors, "routing")
182184
assert.NotContains(t, otelConfig.Service.Pipelines.Metrics.Processors, "routing")
183185
assert.Equal(t, otelConfig.Service.Pipelines.Metrics.Exporters, []string{"sumologic/default"})
184186
}
@@ -187,18 +189,32 @@ func TestMetadataSourceTypeHTTP(t *testing.T) {
187189
t.Parallel()
188190
templatePath := "templates/metrics/otelcol/configmap.yaml"
189191

192+
type MetricsPipeline struct {
193+
Receivers []string `yaml:"receivers,omitempty"`
194+
Exporters []string `yaml:"exporters,omitempty"`
195+
}
196+
190197
type OtelConfig struct {
191198
Exporters map[string]struct {
192199
MetricFormat string `yaml:"metric_format"`
193200
Endpoint string
194201
} `yaml:"exporters"`
195202
Processors map[string]interface{}
203+
Connectors map[string]interface{}
196204
Service struct {
197205
Pipelines struct {
198206
Metrics struct {
199207
Processors []string `yaml:"processors"`
200208
Exporters []string `yaml:"exporters"`
201209
}
210+
MetricsApiserver MetricsPipeline `yaml:"metrics/apiserver"`
211+
MetricsControlPlane MetricsPipeline `yaml:"metrics/control_plane"`
212+
MetricsController MetricsPipeline `yaml:"metrics/controller"`
213+
MetricsKubelet MetricsPipeline `yaml:"metrics/kubelet"`
214+
MetricsNode MetricsPipeline `yaml:"metrics/node"`
215+
MetricsScheduler MetricsPipeline `yaml:"metrics/scheduler"`
216+
MetricsState MetricsPipeline `yaml:"metrics/state"`
217+
MetricsSumologicDefault MetricsPipeline `yaml:"metrics/sumologic/default"`
202218
}
203219
}
204220
}
@@ -208,6 +224,7 @@ func TestMetadataSourceTypeHTTP(t *testing.T) {
208224
sumologic:
209225
metrics:
210226
sourceType: http
227+
useRoutingConnectors: true
211228
`
212229
otelConfigYaml := GetOtelConfigYaml(t, valuesYaml, templatePath)
213230
err := yaml.Unmarshal([]byte(otelConfigYaml), &otelConfig)
@@ -217,6 +234,65 @@ sumologic:
217234
defaultExporter := otelConfig.Exporters["sumologic/default"]
218235
assert.Equal(t, "prometheus", defaultExporter.MetricFormat)
219236
assert.Equal(t, "${SUMO_ENDPOINT_DEFAULT_METRICS_SOURCE}", defaultExporter.Endpoint)
237+
assert.Contains(t, otelConfig.Connectors, "routing/default")
238+
assert.NotContains(t, otelConfig.Service.Pipelines.Metrics.Processors, "routing")
239+
assert.Equal(t, otelConfig.Service.Pipelines.Metrics.Exporters, []string{"routing/default"})
240+
assert.Equal(t, otelConfig.Service.Pipelines.MetricsApiserver.Receivers, []string{"routing/default"})
241+
assert.Equal(t, otelConfig.Service.Pipelines.MetricsControlPlane.Receivers, []string{"routing/default"})
242+
assert.Equal(t, otelConfig.Service.Pipelines.MetricsController.Receivers, []string{"routing/default"})
243+
assert.Equal(t, otelConfig.Service.Pipelines.MetricsKubelet.Receivers, []string{"routing/default"})
244+
assert.Equal(t, otelConfig.Service.Pipelines.MetricsNode.Receivers, []string{"routing/default"})
245+
assert.Equal(t, otelConfig.Service.Pipelines.MetricsScheduler.Receivers, []string{"routing/default"})
246+
assert.Equal(t, otelConfig.Service.Pipelines.MetricsState.Receivers, []string{"routing/default"})
247+
assert.Equal(t, otelConfig.Service.Pipelines.MetricsSumologicDefault.Receivers, []string{"routing/default"})
248+
249+
assert.Equal(t, otelConfig.Service.Pipelines.MetricsApiserver.Exporters, []string{"sumologic/apiserver"})
250+
assert.Equal(t, otelConfig.Service.Pipelines.MetricsControlPlane.Exporters, []string{"sumologic/control_plane"})
251+
assert.Equal(t, otelConfig.Service.Pipelines.MetricsController.Exporters, []string{"sumologic/controller"})
252+
assert.Equal(t, otelConfig.Service.Pipelines.MetricsKubelet.Exporters, []string{"sumologic/kubelet"})
253+
assert.Equal(t, otelConfig.Service.Pipelines.MetricsNode.Exporters, []string{"sumologic/node"})
254+
assert.Equal(t, otelConfig.Service.Pipelines.MetricsScheduler.Exporters, []string{"sumologic/scheduler"})
255+
assert.Equal(t, otelConfig.Service.Pipelines.MetricsState.Exporters, []string{"sumologic/state"})
256+
assert.Equal(t, otelConfig.Service.Pipelines.MetricsSumologicDefault.Exporters, []string{"sumologic/default"})
257+
258+
// useRoutingConnectors: false which means routing processor should be used.
259+
valuesYaml = `
260+
sumologic:
261+
metrics:
262+
sourceType: http
263+
useRoutingConnectors: false
264+
`
265+
otelConfigYaml = GetOtelConfigYaml(t, valuesYaml, templatePath)
266+
err = yaml.Unmarshal([]byte(otelConfigYaml), &otelConfig)
267+
require.NoError(t, err)
268+
269+
assert.Contains(t, otelConfig.Processors, "routing")
270+
assert.Contains(t, otelConfig.Service.Pipelines.Metrics.Processors, "routing")
271+
assert.Equal(
272+
t,
273+
[]string{
274+
"sumologic/default",
275+
"sumologic/apiserver",
276+
"sumologic/control_plane",
277+
"sumologic/controller",
278+
"sumologic/kubelet",
279+
"sumologic/node",
280+
"sumologic/scheduler",
281+
"sumologic/state",
282+
},
283+
otelConfig.Service.Pipelines.Metrics.Exporters,
284+
)
285+
286+
// useRoutingConnectors flag not present, which means routing processor should be used.
287+
valuesYaml = `
288+
sumologic:
289+
metrics:
290+
sourceType: http
291+
`
292+
otelConfigYaml = GetOtelConfigYaml(t, valuesYaml, templatePath)
293+
err = yaml.Unmarshal([]byte(otelConfigYaml), &otelConfig)
294+
require.NoError(t, err)
295+
220296
assert.Contains(t, otelConfig.Processors, "routing")
221297
assert.Contains(t, otelConfig.Service.Pipelines.Metrics.Processors, "routing")
222298
assert.Equal(
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
sumologic:
2+
ipv6mode: true
3+
metrics:
4+
sourceType: http
5+
useRoutingConnectors: true
6+
metadata:
7+
metrics:
8+
autoscaling:
9+
enabled: false
10+
debug:
11+
metrics:
12+
metadata:
13+
print: true

0 commit comments

Comments
 (0)