Skip to content

OpenTelemetry Integration

Overview

SignalPick integrates seamlessly with OpenTelemetry. The agent acts as an OTLP receiver and exporter, sitting between your application and your collector.

Your App → OTel SDK → SignalPick Agent → OTel Collector → Vendor

Configuration

Python

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
# Configure tracer
trace.set_tracer_provider(TracerProvider())
# Point to SignalPick agent
exporter = OTLPSpanExporter(
endpoint="signalpick-agent:4317",
insecure=True
)
trace.get_tracer_provider().add_span_processor(
BatchSpanProcessor(exporter)
)

Node.js

const { NodeSDK } = require('@opentelemetry/sdk-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc');
const sdk = new NodeSDK({
traceExporter: new OTLPTraceExporter({
url: 'grpc://signalpick-agent:4317',
}),
});
sdk.start();

Go

import (
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
)
exporter, err := otlptracegrpc.New(ctx,
otlptracegrpc.WithEndpoint("signalpick-agent:4317"),
otlptracegrpc.WithInsecure(),
)

Span Logs

Attach logs to spans instead of sending them separately:

span.add_event("Processing request", {
"user_id": user_id,
"action": "checkout",
})

This enables automatic deduplication — SignalPick will aggregate repeated log patterns.