Dash0 acquires Polar Signals
Gain full visibility into your Linkerd deployments with this collection of Linkerd dashboards. Monitor performance and health easily.
Linkerd is an open-source service mesh designed for Kubernetes and cloud-native environments.
It provides security, observability, and reliability by seamlessly adding features like zero-config mutual TLS, dynamic request routing, and real-time telemetry.
This Dash0 integration enables users to visualize Linkerd’s telemetry data within their organization, providing insights into service health, traffic patterns, and latency without modifying their existing Linkerd deployment.
For more information, visit the Linkerd website.
Gain real-time visibility into your Linkerd-powered Kubernetes deployments with this integration:
Linkerd provides built-in telemetry and observability features, capturing metrics for service-to-service communication, proxy behavior, and control plane operations. Starting with Linkerd 2.19, native distributed tracing support is built into the proxy, allowing you to collect traces without additional extensions. This integration enables you to forward Linkerd metrics and traces to Dash0 using the OpenTelemetry Collector.
For more details, refer to the Linkerd documentation:
Before setting up Linkerd monitoring, ensure:
You'll need an OpenTelemetry Collector deployed. Consider using:
Helm Chart for The OpenTelemetry Collector
The OpenTelemetry Collector uses the Prometheus receiver to scrape Linkerd metrics. Add the following scrape configuration to your collector:
receivers:
prometheus:
config:
global:
scrape_interval: 10s
scrape_timeout: 10s
evaluation_interval: 10s
scrape_configs:
- job_name: "linkerd-controller"
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- "linkerd"
relabel_configs:
- source_labels:
- __meta_kubernetes_pod_container_port_name
action: keep
regex: admin-http
- source_labels: [__meta_kubernetes_pod_container_name]
action: replace
target_label: component
- job_name: "linkerd-service-mirror"
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels:
- __meta_kubernetes_pod_label_component
- __meta_kubernetes_pod_container_port_name
action: keep
regex: linkerd-service-mirror;admin-http$
- source_labels: [__meta_kubernetes_pod_container_name]
action: replace
target_label: component
- job_name: "linkerd-proxy"
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels:
- __meta_kubernetes_pod_container_name
- __meta_kubernetes_pod_container_port_name
- __meta_kubernetes_pod_label_linkerd_io_control_plane_ns
action: keep
regex: ^linkerd-proxy;linkerd-admin;linkerd$
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: namespace
- source_labels: [__meta_kubernetes_pod_name]
action: replace
target_label: pod
- source_labels: [__meta_kubernetes_pod_label_linkerd_io_proxy_job]
action: replace
target_label: k8s_job
- action: labeldrop
regex: __meta_kubernetes_pod_label_linkerd_io_proxy_job
- action: labelmap
regex: __meta_kubernetes_pod_label_linkerd_io_proxy_(.+)
- action: labeldrop
regex: __meta_kubernetes_pod_label_linkerd_io_proxy_(.+)
- action: labelmap
regex: __meta_kubernetes_pod_label_linkerd_io_(.+)
- action: labelmap
regex: __meta_kubernetes_pod_label_(.+)
replacement: __tmp_pod_label_$1
- action: labelmap
regex: __tmp_pod_label_linkerd_io_(.+)
replacement: __tmp_pod_label_$1
- action: labeldrop
regex: __tmp_pod_label_linkerd_io_(.+)
- action: labelmap
regex: __tmp_pod_label_(.+)This configuration follows the official Linkerd Prometheus scrape settings and collects:
request_total, response_total, or route_*Starting with Linkerd 2.19, the Linkerd-Jaeger extension is deprecated. Tracing can now be configured directly in the Linkerd control plane installation. Linkerd exports traces using the OpenTelemetry protocol, allowing you to forward trace data to any OpenTelemetry-compatible collector.
If you are currently using the Linkerd-Jaeger extension, refer to the migration guide for instructions on transitioning to the new approach.
If you installed Linkerd using Helm, add the following values to your Linkerd control plane configuration:
proxy:
tracing:
enabled: true
collector:
endpoint: <collector-service>.<namespace>:4317
meshIdentity:
serviceAccountName: <collector-service-account>
namespace: <collector-namespace>Then upgrade your Linkerd installation:
helm upgrade linkerd-control-plane linkerd/linkerd-control-plane \
--namespace linkerd \
-f values.yamlIf you installed Linkerd using the CLI, use the upgrade command with tracing parameters:
linkerd upgrade \
--set proxy.tracing.enabled=true \
--set proxy.tracing.collector.endpoint=<collector-service>.<namespace>:4317 \
--set proxy.tracing.collector.meshIdentity.serviceAccountName=<collector-service-account> \
--set proxy.tracing.collector.meshIdentity.namespace=<collector-namespace> \
| kubectl apply -f -The meshIdentity stanza is mandatory: Linkerd can only export traces to a collector within the mesh. Ensure your
OpenTelemetry Collector namespace has the linkerd.io/inject: enabled annotation so that the collector pods are part
of the Linkerd mesh.
After updating the Linkerd configuration, restart all meshed pods to apply the new tracing settings:
kubectl rollout restart deployment -n <namespace> <your-deployment>After completing these steps, you should start seeing Linkerd traces in Dash0.
For more details, refer to the Linkerd Distributed Tracing Documentation.
Linkerd error rate is over 10% for a deployment, statefulset, or daemonset
Linkerd error rate for {{ $labels.deployment | $labels.statefulset | $labels.daemonset }} is over 10%.
sum(rate(request_errors_total[1m])) by (deployment, statefulset, daemonset) / sum(rate(request_total[1m])) by (deployment, statefulset, daemonset) * 100 > $__threshold