diff --git a/charts/opentelemetry-collector/Chart.yaml b/charts/opentelemetry-collector/Chart.yaml index 9fb98d214de..2c0c5314ae4 100644 --- a/charts/opentelemetry-collector/Chart.yaml +++ b/charts/opentelemetry-collector/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v2 name: opentelemetry-collector -version: 0.1.0 +version: 0.2.0 description: OpenTelemetry Collector Helm chart for Kubernetes type: application home: https://opentelemetry.io/ diff --git a/charts/opentelemetry-collector/README.md b/charts/opentelemetry-collector/README.md index 625deb2c362..22c0df471b1 100644 --- a/charts/opentelemetry-collector/README.md +++ b/charts/opentelemetry-collector/README.md @@ -30,6 +30,7 @@ and logging exporter enabled by default. Besides daemonset (agent), it can be al Both modes can be enabled together, in that case metrics and traces will be flowing from agents to standalone collectors. *Example*: Install collector as a standalone deployment, and do not run it as an agent. + ```yaml agentCollector: enabled: false @@ -38,23 +39,27 @@ standaloneCollector: ``` By default collector has the following receivers enabled: + - **metrics**: OTLP and prometheus. Prometheus is configured only for scraping collector's own metrics. - **traces**: OTLP, zipkin and jaeger (thrift and grpc). There are two ways to configure collector pipelines, which can be used together as well. -### Basic top level configuration with `telemetry` property +### Basic top level configuration *Example*: Disable metrics pipeline and send traces to zipkin exporter: + ```yaml -telemetry: - metrics: - enabled: false - traces: - exporter: - type: zipkin - config: - endpoint: zipkin-all-in-one:14250 +config: + exporters: + zipkin: + endpoint: zipkin-all-in-one:14250 + service: + pipelines: + metrics: null + traces: + exporters: + - zipkin ``` ### Configuration with `agentCollector` and `standaloneCollector` properties @@ -66,6 +71,7 @@ and default parameters applied on the k8s pods. configuration that will be merged into the default configuration. *Example*: Enable host metrics receiver on the agents: + ```yaml agentCollector: configOverride: diff --git a/charts/opentelemetry-collector/templates/_config.tpl b/charts/opentelemetry-collector/templates/_config.tpl new file mode 100644 index 00000000000..f2f236d7f47 --- /dev/null +++ b/charts/opentelemetry-collector/templates/_config.tpl @@ -0,0 +1,123 @@ +{{/* +Default memory limiter configuration for OpenTelemetry Collector based on k8s resource limits. +*/}} +{{- define "opentelemetry-collector.memoryLimiter" -}} +processors: + memory_limiter: + # check_interval is the time between measurements of memory usage. + check_interval: 5s + + # By default limit_mib is set to 80% of ".Values.resources.limits.memory" + limit_mib: {{ include "opentelemetry-collector.getMemLimitMib" .Values.resources.limits.memory }} + + # By default spike_limit_mib is set to 25% of ".Values.resources.limits.memory" + spike_limit_mib: {{ include "opentelemetry-collector.getMemSpikeLimitMib" .Values.resources.limits.memory }} + + # By default ballast_size_mib is set to 40% of ".Values.resources.limits.memory" + ballast_size_mib: {{ include "opentelemetry-collector.getMemBallastSizeMib" .Values.resources.limits.memory }} +{{- end }} + +{{/* +Merge user supplied top-level (not particular to standalone or agent) config into memory limiter config. +*/}} +{{- define "opentelemetry-collector.baseConfig" -}} +{{- $config := include "opentelemetry-collector.memoryLimiter" . | fromYaml -}} +{{- .Values.config | mustMergeOverwrite $config | toYaml }} +{{- end }} + +{{/* +Build config file for agent OpenTelemetry Collector +*/}} +{{- define "opentelemetry-collector.agentCollectorConfig" -}} +{{- $values := deepCopy .Values.agentCollector | mustMergeOverwrite (deepCopy .Values) }} +{{- $data := dict "Values" $values | mustMergeOverwrite (deepCopy .) }} +{{- $config := include "opentelemetry-collector.baseConfig" $data | fromYaml }} +{{- $config := include "opentelemetry-collector.agentConfigOverride" $data | fromYaml | mustMergeOverwrite $config }} +{{- .Values.agentCollector.configOverride | mustMergeOverwrite $config | toYaml }} +{{- end }} + +{{/* +Build config file for standalone OpenTelemetry Collector +*/}} +{{- define "opentelemetry-collector.standaloneCollectorConfig" -}} +{{- $values := deepCopy .Values.standaloneCollector | mustMergeOverwrite (deepCopy .Values) }} +{{- $data := dict "Values" $values | mustMergeOverwrite (deepCopy .) }} +{{- $config := include "opentelemetry-collector.baseConfig" $data | fromYaml }} +{{- .Values.standaloneCollector.configOverride | mustMergeOverwrite $config | toYaml }} +{{- end }} + +{{/* +Convert memory value from resources.limit to numeric value in MiB to be used by otel memory_limiter processor. +*/}} +{{- define "opentelemetry-collector.convertMemToMib" -}} +{{- $mem := lower . -}} +{{- if hasSuffix "e" $mem -}} +{{- trimSuffix "e" $mem | atoi | mul 1000 | mul 1000 | mul 1000 | mul 1000 -}} +{{- else if hasSuffix "ei" $mem -}} +{{- trimSuffix "ei" $mem | atoi | mul 1024 | mul 1024 | mul 1024 | mul 1024 -}} +{{- else if hasSuffix "p" $mem -}} +{{- trimSuffix "p" $mem | atoi | mul 1000 | mul 1000 | mul 1000 -}} +{{- else if hasSuffix "pi" $mem -}} +{{- trimSuffix "pi" $mem | atoi | mul 1024 | mul 1024 | mul 1024 -}} +{{- else if hasSuffix "t" $mem -}} +{{- trimSuffix "t" $mem | atoi | mul 1000 | mul 1000 -}} +{{- else if hasSuffix "ti" $mem -}} +{{- trimSuffix "ti" $mem | atoi | mul 1024 | mul 1024 -}} +{{- else if hasSuffix "g" $mem -}} +{{- trimSuffix "g" $mem | atoi | mul 1000 -}} +{{- else if hasSuffix "gi" $mem -}} +{{- trimSuffix "gi" $mem | atoi | mul 1024 -}} +{{- else if hasSuffix "m" $mem -}} +{{- div (trimSuffix "m" $mem | atoi | mul 1000) 1024 -}} +{{- else if hasSuffix "mi" $mem -}} +{{- trimSuffix "mi" $mem | atoi -}} +{{- else if hasSuffix "k" $mem -}} +{{- div (trimSuffix "k" $mem | atoi) 1000 -}} +{{- else if hasSuffix "ki" $mem -}} +{{- div (trimSuffix "ki" $mem | atoi) 1024 -}} +{{- else -}} +{{- div (div ($mem | atoi) 1024) 1024 -}} +{{- end -}} +{{- end -}} + +{{/* +Get otel memory_limiter limit_mib value based on 80% of resources.memory.limit. +*/}} +{{- define "opentelemetry-collector.getMemLimitMib" -}} +{{- div (mul (include "opentelemetry-collector.convertMemToMib" .) 80) 100 }} +{{- end -}} + +{{/* +Get otel memory_limiter spike_limit_mib value based on 25% of resources.memory.limit. +*/}} +{{- define "opentelemetry-collector.getMemSpikeLimitMib" -}} +{{- div (mul (include "opentelemetry-collector.convertMemToMib" .) 25) 100 }} +{{- end -}} + +{{/* +Get otel memory_limiter ballast_size_mib value based on 40% of resources.memory.limit. +*/}} +{{- define "opentelemetry-collector.getMemBallastSizeMib" }} +{{- div (mul (include "opentelemetry-collector.convertMemToMib" .) 40) 100 }} +{{- end -}} + +{{/* +Default config override for agent collector deamonset +*/}} +{{- define "opentelemetry-collector.agentConfigOverride" -}} +exporters: + {{- if .Values.standaloneCollector.enabled }} + otlp: + endpoint: {{ include "opentelemetry-collector.fullname" . }}:55680 + insecure: true + {{- end }} + +service: + pipelines: + {{- if .Values.standaloneCollector.enabled }} + metrics: + exporters: [otlp] + traces: + exporters: [otlp] + {{- end }} +{{- end }} diff --git a/charts/opentelemetry-collector/templates/_helpers.tpl b/charts/opentelemetry-collector/templates/_helpers.tpl index 490372e2122..41beb2b37b9 100644 --- a/charts/opentelemetry-collector/templates/_helpers.tpl +++ b/charts/opentelemetry-collector/templates/_helpers.tpl @@ -61,91 +61,3 @@ Create the name of the service account to use {{- end }} {{- end }} -{{/* -Build base config file with pipelines -*/}} -{{- define "opentelemetry-collector.pipelinesConfig" -}} -{{- $config := include "opentelemetry-collector.baseConfig" . | fromYaml -}} -{{- range $telemetryName, $telemetryParams := .Values.telemetry }} - {{- if index $telemetryParams "enabled" }} - {{- $config := include (printf "opentelemetry-collector.%sPipelineConfig" $telemetryName) $ | fromYaml | mustMergeOverwrite $config }} - {{- end }} -{{- end }} -{{- $config | toYaml }} -{{- end }} - -{{/* -Build config file for agent OpenTelemetry Collector -*/}} -{{- define "opentelemetry-collector.agentCollectorConfig" -}} -{{- $values := deepCopy .Values.agentCollector | mustMergeOverwrite (deepCopy .Values) }} -{{- $data := dict "Values" $values | mustMergeOverwrite (deepCopy .) }} -{{- $config := include "opentelemetry-collector.pipelinesConfig" $data | fromYaml }} -{{- $config := include "opentelemetry-collector.agentConfigOverride" $data | fromYaml | mustMergeOverwrite $config }} -{{- .Values.agentCollector.configOverride | mustMergeOverwrite $config | toYaml }} -{{- end }} - -{{/* -Build config file for standalone OpenTelemetry Collector -*/}} -{{- define "opentelemetry-collector.standaloneCollectorConfig" -}} -{{- $values := deepCopy .Values.standaloneCollector | mustMergeOverwrite (deepCopy .Values) }} -{{- $data := dict "Values" $values | mustMergeOverwrite (deepCopy .) }} -{{- $config := include "opentelemetry-collector.pipelinesConfig" $data | fromYaml }} -{{- .Values.standaloneCollector.configOverride | mustMergeOverwrite $config | toYaml }} -{{- end }} - -{{/* -Convert memory value from resources.limit to numeric value in MiB to be used by otel memory_limiter processor. -*/}} -{{- define "opentelemetry-collector.convertMemToMib" -}} -{{- $mem := lower . -}} -{{- if hasSuffix "e" $mem -}} -{{- trimSuffix "e" $mem | atoi | mul 1000 | mul 1000 | mul 1000 | mul 1000 -}} -{{- else if hasSuffix "ei" $mem -}} -{{- trimSuffix "ei" $mem | atoi | mul 1024 | mul 1024 | mul 1024 | mul 1024 -}} -{{- else if hasSuffix "p" $mem -}} -{{- trimSuffix "p" $mem | atoi | mul 1000 | mul 1000 | mul 1000 -}} -{{- else if hasSuffix "pi" $mem -}} -{{- trimSuffix "pi" $mem | atoi | mul 1024 | mul 1024 | mul 1024 -}} -{{- else if hasSuffix "t" $mem -}} -{{- trimSuffix "t" $mem | atoi | mul 1000 | mul 1000 -}} -{{- else if hasSuffix "ti" $mem -}} -{{- trimSuffix "ti" $mem | atoi | mul 1024 | mul 1024 -}} -{{- else if hasSuffix "g" $mem -}} -{{- trimSuffix "g" $mem | atoi | mul 1000 -}} -{{- else if hasSuffix "gi" $mem -}} -{{- trimSuffix "gi" $mem | atoi | mul 1024 -}} -{{- else if hasSuffix "m" $mem -}} -{{- div (trimSuffix "m" $mem | atoi | mul 1000) 1024 -}} -{{- else if hasSuffix "mi" $mem -}} -{{- trimSuffix "mi" $mem | atoi -}} -{{- else if hasSuffix "k" $mem -}} -{{- div (trimSuffix "k" $mem | atoi) 1000 -}} -{{- else if hasSuffix "ki" $mem -}} -{{- div (trimSuffix "ki" $mem | atoi) 1024 -}} -{{- else -}} -{{- div (div ($mem | atoi) 1024) 1024 -}} -{{- end -}} -{{- end -}} - -{{/* -Get otel memory_limiter limit_mib value based on 80% of resources.memory.limit. -*/}} -{{- define "opentelemetry-collector.getMemLimitMib" -}} -{{- div (mul (include "opentelemetry-collector.convertMemToMib" .) 80) 100 }} -{{- end -}} - -{{/* -Get otel memory_limiter spike_limit_mib value based on 25% of resources.memory.limit. -*/}} -{{- define "opentelemetry-collector.getMemSpikeLimitMib" -}} -{{- div (mul (include "opentelemetry-collector.convertMemToMib" .) 25) 100 }} -{{- end -}} - -{{/* -Get otel memory_limiter ballast_size_mib value based on 40% of resources.memory.limit. -*/}} -{{- define "opentelemetry-collector.getMemBallastSizeMib" }} -{{- div (mul (include "opentelemetry-collector.convertMemToMib" .) 40) 100 }} -{{- end -}} diff --git a/charts/opentelemetry-collector/templates/config/_agent-config-override.tpl b/charts/opentelemetry-collector/templates/config/_agent-config-override.tpl deleted file mode 100644 index ce7cb138e00..00000000000 --- a/charts/opentelemetry-collector/templates/config/_agent-config-override.tpl +++ /dev/null @@ -1,23 +0,0 @@ -{{/* -Default config override for agent collector deamonset -*/}} -{{- define "opentelemetry-collector.agentConfigOverride" -}} -exporters: - {{- if .Values.standaloneCollector.enabled }} - otlp: - endpoint: {{ include "opentelemetry-collector.fullname" . }}:55680 - insecure: true - {{- end }} - -service: - pipelines: - {{- if and .Values.telemetry.metrics.enabled .Values.standaloneCollector.enabled }} - metrics: - exporters: [otlp] - {{- end }} - - {{- if and .Values.telemetry.traces.enabled .Values.standaloneCollector.enabled }} - traces: - exporters: [otlp] - {{- end }} -{{- end }} diff --git a/charts/opentelemetry-collector/templates/config/_base.tpl b/charts/opentelemetry-collector/templates/config/_base.tpl deleted file mode 100644 index e32bf78628f..00000000000 --- a/charts/opentelemetry-collector/templates/config/_base.tpl +++ /dev/null @@ -1,34 +0,0 @@ -{{/* -Base configuration for OpenTelemetry Collector -*/}} -{{- define "opentelemetry-collector.baseConfig" -}} -extensions: - health_check: {} - -receivers: - otlp: - protocols: - grpc: - http: - -processors: - queued_retry: {} - batch: {} - - memory_limiter: - # check_interval is the time between measurements of memory usage. - check_interval: 5s - - # By default limit_mib is set to 80% of ".Values.resources.limits.memory" - limit_mib: {{ include "opentelemetry-collector.getMemLimitMib" .Values.resources.limits.memory }} - - # By default spike_limit_mib is set to 25% of ".Values.resources.limits.memory" - spike_limit_mib: {{ include "opentelemetry-collector.getMemSpikeLimitMib" .Values.resources.limits.memory }} - - # By default ballast_size_mib is set to 40% of ".Values.resources.limits.memory" - ballast_size_mib: {{ include "opentelemetry-collector.getMemBallastSizeMib" .Values.resources.limits.memory }} - -service: - extensions: [health_check] - pipelines: {} -{{- end }} diff --git a/charts/opentelemetry-collector/templates/config/_metrics.tpl b/charts/opentelemetry-collector/templates/config/_metrics.tpl deleted file mode 100644 index b17a8388477..00000000000 --- a/charts/opentelemetry-collector/templates/config/_metrics.tpl +++ /dev/null @@ -1,23 +0,0 @@ -{{/* -Default metrics pipeline config -*/}} -{{- define "opentelemetry-collector.metricsPipelineConfig" -}} -receivers: - # Prometheus receiver scraping the prometheus metrics from the pod itself. - prometheus: - config: - scrape_configs: - - job_name: 'opentelemetry-collector' - scrape_interval: 10s - static_configs: - - targets: ["${MY_POD_IP}:8888"] -exporters: - {{ .Values.telemetry.metrics.exporter.type }}: - {{- .Values.telemetry.metrics.exporter.config | toYaml | nindent 4 }} -service: - pipelines: - metrics: - receivers: [otlp, prometheus] - processors: [memory_limiter, batch, queued_retry] - exporters: [{{ .Values.telemetry.metrics.exporter.type }}] -{{- end }} diff --git a/charts/opentelemetry-collector/templates/config/_traces.tpl b/charts/opentelemetry-collector/templates/config/_traces.tpl deleted file mode 100644 index de9a36320a1..00000000000 --- a/charts/opentelemetry-collector/templates/config/_traces.tpl +++ /dev/null @@ -1,23 +0,0 @@ -{{/* -Default traces pipeline config -*/}} -{{- define "opentelemetry-collector.tracesPipelineConfig" -}} -receivers: - jaeger: - protocols: - thrift_http: - endpoint: 0.0.0.0:14268 - grpc: - endpoint: 0.0.0.0:14250 - zipkin: - endpoint: 0.0.0.0:9411 -exporters: - {{ .Values.telemetry.traces.exporter.type }}: - {{- .Values.telemetry.traces.exporter.config | toYaml | nindent 4 }} -service: - pipelines: - traces: - receivers: [otlp, jaeger, zipkin] - processors: [memory_limiter, batch, queued_retry] - exporters: [{{ .Values.telemetry.traces.exporter.type }}] -{{- end }} diff --git a/charts/opentelemetry-collector/values.schema.json b/charts/opentelemetry-collector/values.schema.json index 7cee435913f..d145457ca19 100644 --- a/charts/opentelemetry-collector/values.schema.json +++ b/charts/opentelemetry-collector/values.schema.json @@ -3,30 +3,6 @@ "type": "object", "title": "Values", "properties": { - "telemetry": { - "description": "Enabled telemetry pipelines", - "type": "object", - "properties": { - "metrics": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - }, - "required": ["enabled"] - }, - "traces": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - }, - "required": ["enabled"] - } - } - }, "standaloneCollector": { "description": "Configuration for standalone OpenTelemetry Collector deployment", "type": "object", diff --git a/charts/opentelemetry-collector/values.yaml b/charts/opentelemetry-collector/values.yaml index b9ab7bf6e80..61ceacef4be 100644 --- a/charts/opentelemetry-collector/values.yaml +++ b/charts/opentelemetry-collector/values.yaml @@ -5,26 +5,62 @@ nameOverride: "" fullnameOverride: "" -# Basic parameters that used to compose default configmaps -telemetry: - metrics: - enabled: true - exporter: - type: logging - config: {} - # logLevel: debug - - traces: - enabled: true - exporter: - type: logging - config: {} - # type: jaeger - # config: - # endpoint: jaeger-all-in-one:14250 - # type: zipkin - # config: - # endpoint: zipkin-all-in-one:14250 +config: + exporters: + logging: {} + extensions: + health_check: {} + processors: + batch: {} + # If set to null, will be overridden with values based on k8s resource limits + memory_limiter: null + queued_retry: {} + receivers: + jaeger: + protocols: + grpc: + endpoint: 0.0.0.0:14250 + thrift_http: + endpoint: 0.0.0.0:14268 + otlp: + protocols: + grpc: null + http: null + prometheus: + config: + scrape_configs: + - job_name: opentelemetry-collector + scrape_interval: 10s + static_configs: + - targets: + - ${MY_POD_IP}:8888 + zipkin: + endpoint: 0.0.0.0:9411 + service: + extensions: + - health_check + pipelines: + metrics: + exporters: + - logging + processors: + - memory_limiter + - batch + - queued_retry + receivers: + - otlp + - prometheus + traces: + exporters: + - logging + processors: + - memory_limiter + - batch + - queued_retry + receivers: + - otlp + - jaeger + - zipkin # Shared params for agentCollector daemonset and standaloneCollector deployment pods. # Can be overridden here or for any component independently using the same keys.