Overview
@kubiks/otel-upstash-queues provides comprehensive OpenTelemetry instrumentation for Upstash QStash. Capture spans for both message publishing and consumption with detailed operation metadata and delivery tracking.

Visualize your message queue operations with detailed span information including message publishing, callbacks, and delivery tracking—from producer to consumer.
Installation
Quick Start
Publishing Messages
Consuming Messages
What Gets Traced
This instrumentation provides two main functions:instrumentUpstash
Wraps the QStash client to trace message publishing with
SpanKind.CLIENTinstrumentConsumer
Wraps your message handler to trace message consumption with
SpanKind.SERVERConfiguration
With Body Capture
Optionally capture request/response bodies for debugging:Span Attributes
Publisher Spans (instrumentUpstash)
Consumer Spans (instrumentConsumer)
Body/Payload Attributes (Optional)
WhencaptureBody is enabled:
Usage Examples
Basic Message Publishing
Delayed Message Publishing
Message with Callbacks
Retries and Deduplication
Message Consumer
Complete Integration Example
Here’s a complete example of QStash with OpenTelemetry in a Next.js application:Setup
lib/qstash.ts
Publishing Messages
app/actions/tasks.ts
Consuming Messages
app/api/process/image/route.ts
app/api/process/report/route.ts
Callback Handlers
app/api/callbacks/report-success/route.ts
app/api/callbacks/report-failure/route.ts
Best Practices
Always Use Signature Verification
Always Use Signature Verification
Always verify QStash signatures to ensure messages are authentic:
Use Deduplication for Idempotency
Use Deduplication for Idempotency
Use deduplication IDs to prevent duplicate processing:
Configure Appropriate Retries
Configure Appropriate Retries
Set retry counts based on operation criticality:
Use Callbacks for Monitoring
Use Callbacks for Monitoring
Implement callbacks to track message processing:
Handle Errors Gracefully
Handle Errors Gracefully
Always handle errors in consumer handlers:
Advanced Patterns
Batch Processing
Batch Processing
Priority Queues
Priority Queues
Dead Letter Queue
Dead Letter Queue
Troubleshooting
Spans Not Appearing
Spans Not Appearing
Ensure OpenTelemetry is initialized before using QStash:
Signature Verification Failing
Signature Verification Failing
Make sure environment variables are set correctly:
Messages Not Being Processed
Messages Not Being Processed
Check that your endpoint is:
- Publicly accessible
- Returns 2xx status codes
- Responds within timeout (default: 2 minutes)
- Has signature verification enabled
Missing Consumer Spans
Missing Consumer Spans
Ensure
instrumentConsumer is called before verifySignatureAppRouter:Resources
QStash Documentation
Learn more about Upstash QStash
GitHub Repository
View source code and examples
npm Package
View package on npm
Report Issues
Found a bug? Let us know!