signoz-otlp-verify is a small Kubernetes-focused CLI for proving whether a self-hosted SigNoz deployment can receive OTLP traces.
It is designed for the gap after installation: the SigNoz pods may be healthy, but users still need to verify whether OTLP traffic reaches the collector and whether the trace becomes queryable in SigNoz.
SigNoz documents a broad self-hosted Kubernetes surface and separate ingestion troubleshooting steps. Their Trace API is documented at POST /api/v5/query_range, while OTLP ingestion commonly uses 4317 for gRPC and 4318 for HTTP.
This tool automates the first support checks:
- Discover SigNoz services, pods, endpoints, and OTLP ports in a namespace.
- Port-forward the collector service and send a synthetic OTLP/HTTP trace.
- Optionally run an OTLP/gRPC send check through
telemetrygenwhen installed. - Query SigNoz for the synthetic
run.idwhenSIGNOZ_API_KEYis provided. - Emit JSON or Markdown reports with concrete remediation hints.
Watch the full verification sequence in action:
python -m venv .venv
source .venv/bin/activate
pip install -e .
signoz-otlp-verify run --namespace platform --execution-mode local --format markdownFor API verification:
export SIGNOZ_API_KEY="..."
signoz-otlp-verify run --namespace platform --execution-mode local --format markdownTo save reports:
signoz-otlp-verify run --namespace platform --execution-mode local --format json --output report.json
signoz-otlp-verify run --namespace platform --execution-mode local --format markdown --output report.mdTo verify from inside the cluster:
docker build -t signoz-otlp-verify:latest .
kubectl apply -f deploy/job.yaml
kubectl logs -n platform job/signoz-otlp-verifysignoz-otlp-verify discover --namespace <namespace>
signoz-otlp-verify send --namespace <namespace>
signoz-otlp-verify check --namespace <namespace> --run-id <run-id>
signoz-otlp-verify run --namespace <namespace>- Python 3.10+
- Kubernetes Python client
kubectlconfigured for the target cluster- Access to the namespace where SigNoz is installed
- Optional:
SIGNOZ_API_KEYfor API-level trace visibility checks - Optional:
telemetrygenfor an actual OTLP/gRPC send test on4317
Without SIGNOZ_API_KEY, the tool still validates Kubernetes discovery, service endpoints, OTLP port exposure, and OTLP/HTTP collector acceptance.
--execution-mode local: loads local kubeconfig and uses port-forwarding for OTLP/API checks.--execution-mode in-cluster: loads the pod service account and talks to*.svc.cluster.localdirectly.--execution-mode auto: tries in-cluster first, then local kubeconfig, thenkubectlfallback.
In-cluster mode is useful when you need to isolate SigNoZ internal networking from ingress, load balancer, or local port-forwarding issues.
Version 0.1.0 verifies traces first because traces provide the clearest end-to-end path:
- Generate a unique
run.id. - Send one synthetic trace to the collector.
- Query SigNoz for that
run.idwhen credentials are available. - Explain where the path fails.
Metrics and logs can be added after the first public proof.
The verifier sends one diagnostic trace with explicit tags:
service.name=signoz-diagnostic-toolrun.id=<unique-run-id>is_synthetic=truetool.name=signoz-otlp-verifytool.version=0.1.0
Use these filters in SigNoz to find or exclude the diagnostic trace.
# SigNoz OTLP Verification Report
- Run ID: signoz-verify-20260510-104501-a1b2c3d4
- Namespace: platform
| Severity | Check | Result | Remediation |
| --- | --- | --- | --- |
| info | service.discovery | Found collector service signoz-otel-collector | none |
| pass | otlp.http.send | Collector accepted OTLP/HTTP trace on 4318 | none |
| warning | otlp.grpc.send | telemetrygen not found; only TCP reachability checked | install telemetrygen for full gRPC validation |
| pass | signoz.trace.query | Trace found through /api/v5/query_range | none |