Dash0 acquires Polar Signals
The OpenTelemetry Collector streamlines telemetry data collection, processing, and export across diverse systems for enhanced visibility.
The OpenTelemetry Collector is a vendor-agnostic observability pipeline component that collects, processes, and exports telemetry data. As an official CNCF project, it provides open-source tools to enhance monitoring and observability capabilities. Dash0’s native integration with OpenTelemetry enables seamless telemetry data handling and insight generation to improve operational efficiency.
Empower your observability with the Dash0 integration for OpenTelemetry, enabling value-driven insights and streamlined telemetry workflows:
1. Create a namespace First, create the namespace where you want to deploy the Collector. In this example, we use opentelemetry:
kubectl create namespace opentelemetry2. Create the Dash0 Authorization Secret Next, create a Kubernetes secret containing your Dash0 authorization token. The token can be found in the organization settings: "Auth Tokens".
kubectl create secret generic dash0-secrets --from-literal=dash0-authorization-token={{token}} --namespace opentelemetry3. Configure the helm chart It is recommended to deploy the OpenTelemetry Collector in two modes:
daemonset: For node-level telemetry (e.g., logs, kubelet metrics)deployment: For cluster-wide telemetryNode-level Collector (daemonset)
Copy the configuration below into a file called: daemonset-values.yaml
mode: daemonset
image:
repository: otel/opentelemetry-collector-k8s
resources:
limits:
memory: 512Mi
requests:
memory: 256Mi
extraEnvs:
- name: DASH0_AUTHORIZATION_TOKEN
valueFrom:
secretKeyRef:
name: dash0-secrets
key: dash0-authorization-token
clusterRole:
create: true
rules:
- apiGroups: [""]
resources: ["nodes/proxy"]
verbs: ["get"]
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "list"]
presets:
logsCollection:
enabled: true
kubernetesAttributes:
enabled: true
extractAllPodLabels: true
extractAllPodAnnotations: true
kubeletMetrics:
enabled: true
hostMetrics:
enabled: true
config:
receivers:
kubeletstats:
insecure_skip_verify: true # For testing purposes. Remove for production.
metrics:
container.cpu.utilization:
enabled: false
k8s.node.cpu.utilization:
enabled: false
k8s.pod.cpu.utilization:
enabled: false
container.cpu.usage:
enabled: true
k8s.node.cpu.usage:
enabled: true
k8s.pod.cpu.usage:
enabled: true
k8s.pod.cpu_limit_utilization:
enabled: true
k8s.pod.cpu_request_utilization:
enabled: true
k8s.pod.memory_limit_utilization:
enabled: true
k8s.pod.memory_request_utilization:
enabled: true
processors:
batch: {}
resourcedetection:
detectors:
# note: later detectors override attributes provided by earlier detectors
- system
- ec2
- eks
- ecs
- gcp
- azure
- aks
- k8snode
timeout: 2s
system:
resource_attributes:
host.name:
# Do not collect host.name via system resource detector, as this would result in the podname being set as the
# hostname, see https://kubernetes.io/docs/concepts/containers/container-environment/#container-information.
enabled: false
exporters:
otlp/dash0:
auth:
authenticator: bearertokenauth/dash0
endpoint: {{endpoint_otlp_grpc_hostname}}:{{endpoint_otlp_grpc_port}}
headers:
Dash0-Dataset: default
extensions:
bearertokenauth/dash0:
scheme: Bearer
token: ${env:DASH0_AUTHORIZATION_TOKEN}
service:
extensions:
- bearertokenauth/dash0
- health_check
pipelines:
logs:
processors: [resourcedetection, batch]
exporters: [otlp/dash0]
metrics:
processors: [resourcedetection, batch]
exporters: [otlp/dash0]
traces:
processors: [resourcedetection, batch]
exporters: [otlp/dash0]To see the fully rendered configuration for the node-level collector visually, go to:
Cluster-wide Collector (deployment)
Save the following configuration into a file named deployment-values.yaml:
mode: deployment
replicaCount: 1
image:
repository: otel/opentelemetry-collector-k8s
resources:
limits:
memory: 512Mi
requests:
memory: 256Mi
extraEnvs:
- name: DASH0_AUTHORIZATION_TOKEN
valueFrom:
secretKeyRef:
name: dash0-secrets
key: dash0-authorization-token
presets:
clusterMetrics:
enabled: true
kubernetesEvents:
enabled: true
config:
exporters:
otlp/dash0:
auth:
authenticator: bearertokenauth/dash0
endpoint: {{endpoint_otlp_grpc_hostname}}:{{endpoint_otlp_grpc_port}}
headers:
Dash0-Dataset: default
extensions:
bearertokenauth/dash0:
scheme: Bearer
token: ${env:DASH0_AUTHORIZATION_TOKEN}
service:
extensions:
- bearertokenauth/dash0
- health_check
pipelines:
logs:
exporters:
- otlp/dash0
metrics:
exporters:
- otlp/dash0
traces:
exporters:
- otlp/dash0To see the fully rendered configuration for the cluster-wide collector visually, go to:
For additional configuration options, see the default values.yaml file.
4. Install the OpenTelemetry Collectors Use the following commands to install both OpenTelemetry Collectors into your cluster:
helm upgrade --install otel-collector-ds open-telemetry/opentelemetry-collector --namespace opentelemetry -f daemonset-values.yaml
helm upgrade --install otel-collector open-telemetry/opentelemetry-collector --namespace opentelemetry -f deployment-values.yamlTo preview the resources that will be created before applying them, use (for the deployment configuration change the values to match the above):
helm install otel-collector-ds open-telemetry/opentelemetry-collector --namespace opentelemetry -f daemonset-values.yaml --dry-runThis will output all Kubernetes resources, including the full OpenTelemetry Collector configuration.
To configure the OpenTelemetry Collector to output its own logs in JSON format, use the following configuration:
service:
telemetry:
logs:
encoding: jsonFor more information, see the docs at https://opentelemetry.io/docs/collector/configuration/#telemetry.
By default, telemetry data is sent to the default dataset in Dash0. To route data to a different dataset, modify the Dash0-Dataset header in the exporter configuration:
exporters:
otlp/dash0:
auth:
authenticator: bearertokenauth/dash0
endpoint: {{endpoint_otlp_grpc_hostname}}:{{endpoint_otlp_grpc_port}}
headers:
Dash0-Dataset: your-dataset-nameOpenTelemetry Collector export operations are failing
Monitors OpenTelemetry Collector metric export failure rate over 5 minutes. This alert fires when the rate of failed metric exports exceeds the threshold:
rate({otel_metric_name="otelcol_exporter_send_failed_metric_points_total"}[5m]) > $__thresholdOpenTelemetry Collector memory usage is high
Monitors OpenTelemetry Collector memory usage in MB. This alert fires when the collector's RSS memory exceeds the threshold:
{otel_metric_name="otelcol_process_memory_rss_bytes"} / 1024 / 1024 > $__thresholdOpenTelemetry Collector log export operations are failing
Alert triggers when log export failures exceed 10/sec.
rate({otel_metric_name="otelcol_exporter_send_failed_log_records_total"}[5m]) > $__thresholdOpenTelemetry Collector export queue is nearly full
Alert triggers when export queue utilization exceeds 80%.
({otel_metric_name="otelcol_exporter_queue_size"} / {otel_metric_name="otelcol_exporter_queue_capacity"}) * 100 > $__thresholdOpenTelemetry Collector receiver operations are failing
Alert triggers when receiver refusals exceed 10/sec.
rate({otel_metric_name="otelcol_receiver_refused_metric_points_total"}[5m]) > $__thresholdOpenTelemetry Collector span export operations are failing
Alert triggers when span export failures exceed 10/sec.
rate({otel_metric_name="otelcol_exporter_send_failed_spans_total"}[5m]) > $__threshold