Skip to content

Commit

Permalink
feat: preare batches before routing
Browse files Browse the repository at this point in the history
Signed-off-by: Dominik Rosiek <[email protected]>
  • Loading branch information
Dominik Rosiek committed Jul 4, 2023
1 parent 6e2b05c commit d373d1c
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 14 deletions.
3 changes: 3 additions & 0 deletions deploy/helm/sumologic/conf/metrics/otelcol/pipeline.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ processors:
- resource/remove_k8s_pod_pod_name
- resource/delete_source_metadata
- sumologic_schema
- transform/set_name
- groupbyattrs/group_by_name
- transform/remove_name
- batch
- transform/prepare_routing
- routing
Expand Down
47 changes: 33 additions & 14 deletions deploy/helm/sumologic/conf/metrics/otelcol/processors.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ groupbyattrs:
- pod
- service

groupbyattrs/group_by_name:
keys:
- __name__
- job

## The Kubernetes sprocessor automatically tags logs, metrics and traces with Kubernetes metadata like pod name, namespace name etc.
k8s_tagger:
extract:
Expand Down Expand Up @@ -110,20 +115,6 @@ resource/remove_k8s_pod_pod_name:
- action: delete
key: k8s.pod.pod_name

transform/prepare_routing:
error_mode: ignore
metric_statements:
- context: metric
statements:
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.apiserver") where resource.attributes["job"] == "apiserver"
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.control-plane.coredns") where resource.attributes["job"] == "coredns"
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.control-plane.kube-etcd") where resource.attributes["job"] == "kube-etcd"
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.controller-manager") where resource.attributes["job"] == "kubelet" and IsMatch(name, "^cloudprovider_.*")
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.kubelet") where resource.attributes["job"] == "kubelet" and not IsMatch(name, "^cloudprovider_.*")
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.node") where resource.attributes["job"] == "node-exporter"
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.scheduler") where resource.attributes["job"] == "kube-scheduler"
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.state") where resource.attributes["job"] == "kube-state-metrics"

## NOTE: below listed rules could be simplified if routingprocessor
## supports regex matching. At this point we could group route entries
## going to the same set of exporters.
Expand Down Expand Up @@ -176,6 +167,34 @@ source:
sumologic_schema:
add_cloud_namespace: false

transform/prepare_routing:
error_mode: ignore
metric_statements:
- context: metric
statements:
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.apiserver") where resource.attributes["job"] == "apiserver"
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.control-plane.coredns") where resource.attributes["job"] == "coredns"
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.control-plane.kube-etcd") where resource.attributes["job"] == "kube-etcd"
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.controller-manager") where resource.attributes["job"] == "kubelet" and IsMatch(name, "^cloudprovider_.*")
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.kubelet") where resource.attributes["job"] == "kubelet" and not IsMatch(name, "^cloudprovider_.*")
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.node") where resource.attributes["job"] == "node-exporter"
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.scheduler") where resource.attributes["job"] == "kube-scheduler"
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.state") where resource.attributes["job"] == "kube-state-metrics"

transform/remove_name:
error_mode: ignore
metric_statements:
- context: resource
statements:
- delete_key(attributes, "__name__")

transform/set_name:
error_mode: ignore
metric_statements:
- context: datapoint
statements:
- set(attributes["__name__"], metric.name) where IsMatch(metric.name, "^cloudprovider_.*")

{{- if .Values.sumologic.metrics.otelcol.extraProcessors }}
{{- range $processor := .Values.sumologic.metrics.otelcol.extraProcessors }}
{{ toYaml $processor }}
Expand Down
3 changes: 3 additions & 0 deletions tests/helm/metrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,9 @@ func TestMetadataMetricsOtelConfigExtraProcessors(t *testing.T) {
"resource/remove_k8s_pod_pod_name",
"resource/delete_source_metadata",
"sumologic_schema",
"transform/set_name",
"groupbyattrs/group_by_name",
"transform/remove_name",
"batch",
"transform/prepare_routing",
"routing",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,10 @@ data:
- namespace
- pod
- service
groupbyattrs/group_by_name:
keys:
- __name__
- job
k8s_tagger:
extract:
delimiter: _
Expand Down Expand Up @@ -241,6 +245,18 @@ data:
where resource.attributes["job"] == "kube-scheduler"
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.state")
where resource.attributes["job"] == "kube-state-metrics"
transform/remove_name:
error_mode: ignore
metric_statements:
- context: resource
statements:
- delete_key(attributes, "__name__")
transform/set_name:
error_mode: ignore
metric_statements:
- context: datapoint
statements:
- set(attributes["__name__"], metric.name) where IsMatch(metric.name, "^cloudprovider_.*")
receivers:
otlp:
protocols:
Expand Down Expand Up @@ -321,6 +337,9 @@ data:
- resource/remove_k8s_pod_pod_name
- resource/delete_source_metadata
- sumologic_schema
- transform/set_name
- groupbyattrs/group_by_name
- transform/remove_name
- batch
- transform/prepare_routing
- routing
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,10 @@ data:
- namespace
- pod
- service
groupbyattrs/group_by_name:
keys:
- __name__
- job
k8s_tagger:
extract:
delimiter: _
Expand Down Expand Up @@ -241,6 +245,18 @@ data:
where resource.attributes["job"] == "kube-scheduler"
- set(resource.attributes["http_listener_v2_path"], "/prometheus.metrics.state")
where resource.attributes["job"] == "kube-state-metrics"
transform/remove_name:
error_mode: ignore
metric_statements:
- context: resource
statements:
- delete_key(attributes, "__name__")
transform/set_name:
error_mode: ignore
metric_statements:
- context: datapoint
statements:
- set(attributes["__name__"], metric.name) where IsMatch(metric.name, "^cloudprovider_.*")
receivers:
otlp:
protocols:
Expand Down Expand Up @@ -319,6 +335,9 @@ data:
- resource/remove_k8s_pod_pod_name
- resource/delete_source_metadata
- sumologic_schema
- transform/set_name
- groupbyattrs/group_by_name
- transform/remove_name
- batch
- transform/prepare_routing
- routing
Expand Down

0 comments on commit d373d1c

Please sign in to comment.