KEDA (Kubernetes Event-Driven Autoscaling) is a CNCF graduated project that extends Kubernetes' Horizontal Pod Autoscaler (HPA) to support event-driven scaling with 70+ built-in scalers. Since v2.12, KEDA can emit its own operational metrics via OpenTelemetry — scaling loop latency, scaler errors, active triggers, and more.
KEDA's OpenTelemetry metrics integration is marked as Experimental. It is stable enough for production monitoring but the metric names or behavior may change in future KEDA releases.
Prerequisites
- KEDA v2.12 or later installed on your Kubernetes cluster (v2.16+ recommended)
- An instance of SigNoz (either Cloud or Self-Hosted)
How KEDA exposes metrics
The keda-operator Deployment runs an OpenTelemetry SDK in-process and pushes metrics to an OTLP endpoint directly, skipping Prometheus scrape jobs and sidecars.
KEDA emits metrics for scaler activity, scale-loop latency, errors, registered resources and triggers, and optional CloudEventSource queue stats. For the full list, see the KEDA OpenTelemetry Integration docs.
Send KEDA Metrics to SigNoz
Step 1. Enable OpenTelemetry metrics on the operator
Configure keda-operator to push metrics to SigNoz.
New installation:
helm repo add kedacore https://kedacore.github.io/charts
helm repo update
helm install keda kedacore/keda \
--namespace keda \
--create-namespace \
--set "opentelemetry.operator.enabled=true" \
--set "opentelemetry.collector.uri=https://ingest.<region>.signoz.cloud:443" \
--set "env[0].name=OTEL_EXPORTER_OTLP_HEADERS" \
--set "env[0].value=signoz-ingestion-key=<your-ingestion-key>"
Existing installation:
helm upgrade keda kedacore/keda \
--namespace keda \
--set "opentelemetry.operator.enabled=true" \
--set "opentelemetry.collector.uri=https://ingest.<region>.signoz.cloud:443" \
--set "env[0].name=OTEL_EXPORTER_OTLP_HEADERS" \
--set "env[0].value=signoz-ingestion-key=<your-ingestion-key>"
Verify these values:
<region>: Your SigNoz Cloud region.<your-ingestion-key>: Your SigNoz ingestion key.
Add the following environment variables and argument to the keda-operator container in your KEDA operator Deployment:
env:
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: "https://ingest.<region>.signoz.cloud:443"
- name: OTEL_EXPORTER_OTLP_HEADERS
value: "signoz-ingestion-key=<your-ingestion-key>"
args:
- --enable-opentelemetry-metrics=true
New installation:
kubectl create namespace keda
kubectl apply -f keda-operator-otel.yaml
Existing installation:
kubectl apply -f keda-operator-otel.yaml
Verify these values:
<region>: Your SigNoz Cloud region.<your-ingestion-key>: Your SigNoz ingestion key.
Step 2. Verify the operator restarts
kubectl get pods -n keda
You should see keda-operator, keda-operator-metrics-apiserver, and keda-admission-webhooks pods in Running state.
Step 3. Validate metrics in SigNoz
After a minute or two, confirm data is flowing in SigNoz:
- Navigate to the Metrics Explorer in SigNoz
- Search for
metric_name contains 'keda.build.info' - You should see a
keda.build.infometric with attributes likeversionandgit_commit, etc.

Visualize with the prebuilt dashboard
SigNoz publishes a prebuilt KEDA dashboard that uses the same metrics this guide validates. It groups scaler activity, scaling loop latency, ScaledObject errors, registered resources and triggers, and CloudEvent metrics into one view, with namespace and ScaledObject filters.
- Dashboard reference page: KEDA Dashboard
- Direct JSON:
keda/keda-otlp-v1.json
To use it, open Dashboards in SigNoz, click New Dashboard, choose Import JSON, and paste the JSON from the link above.
Troubleshooting
No metrics appearing in SigNoz
- Check KEDA version: OpenTelemetry metrics require KEDA v2.12+. Run
kubectl get deployment keda-operator -n keda -o jsonpath='{.spec.template.spec.containers[0].image}'to verify. - Verify OTel is enabled: Check that the operator has the flag and env var set:
kubectl get deployment keda-operator -n keda -o yaml | grep -A 2 'enable-opentelemetry\|OTEL_EXPORTER' - Check endpoint reachability: Ensure the cluster can reach
ingest.<region>.signoz.cloud:443over HTTPS. - Verify ingestion key: Confirm
OTEL_EXPORTER_OTLP_HEADERScontains a validsignoz-ingestion-keyvalue.
Only seeing build.info and registered.count metrics
Scaler-specific metrics (keda.scaler.active, keda.scaler.metrics.value, etc.) only appear when you have at least one active ScaledObject or ScaledJob.
Deprecated metric warnings
KEDA v2.12-v2.15 emits deprecated metrics (keda.scaler.metrics.latency, keda.internal.scale.loop.latency, keda.resource.totals, keda.trigger.totals) alongside their replacements. These were removed in v2.16+. Use the .seconds and .registered.count variants documented in the KEDA OpenTelemetry Integration docs.
Setup OpenTelemetry Collector (Optional)
What is the OpenTelemetry Collector?
The OTel Collector acts as a middleman between KEDA and SigNoz. Instead of sending data directly, KEDA sends metrics to the Collector first, which then forwards them along.
Why use it?
- Cleaning up data — Filter out metrics you don't care about before they leave your cluster.
- Keeping KEDA lightweight — Let the Collector handle batching, retries, and compression instead of the KEDA operator.
- Adding context automatically — The Collector can tag your data with Kubernetes metadata like pod name and namespace.
- Future flexibility — Want to send data to multiple backends later? The Collector makes that easy without changing your KEDA config.
To use a Collector, set OTEL_EXPORTER_OTLP_ENDPOINT to point at your Collector's OTLP HTTP receiver (e.g., http://otel-collector.keda.svc:4318) instead of the SigNoz Cloud endpoint, and remove the OTEL_EXPORTER_OTLP_HEADERS variable.
See Switch from direct export to Collector for step-by-step instructions.
For more details, see Why use the OpenTelemetry Collector? and the Collector configuration guide.
Next Steps
- Set Alerts: Configure alerts to get notified when scaler errors spike or scaling latency increases. Learn more.
- Create Dashboards: Build dashboards to visualize scaling loop latency, active scalers, and error rates across your ScaledObjects.
- Learn more about KEDA: Visit the KEDA OpenTelemetry Integration docs for additional configuration options.
Get Help
If you need help with the steps in this topic, please reach out to us on SigNoz Community Slack.
If you are a SigNoz Cloud user, please use in product chat support located at the bottom right corner of your SigNoz instance or contact us at cloud-support@signoz.io.