Overview
A subscription consists of:- Query - The SnQL or RPC query to execute
- Resolution - How often to execute (minimum 60 seconds)
- Time Window - The time range to query each execution
- Entity - The data entity to query
- Alert monitoring
- Metric aggregation pipelines
- Scheduled reports
- Real-time dashboards
Create Subscription
Request Body
Project ID to query
SnQL query to execute on each interval
Time window in seconds (60 to 86400). Each execution queries data from
[now - time_window, now]Execution interval in seconds (minimum 60)
Tenant identification
Organization ID
Service identifier
Response
Unique identifier for the subscription in format
{partition}/{uuid}202 Accepted
Delete Subscription
Delete an existing subscription:Path Parameters
Dataset name (e.g.,
events, transactions)Entity name (e.g.,
events, transactions, metrics_counters)Partition ID from subscription_id
UUID from subscription_id
Response
202 Accepted
Subscription Types
Snuba supports two subscription types:SnQL Subscriptions
Standard subscriptions using SnQL queries:RPC Subscriptions
Subscriptions using protobuf-based RPC requests:- TimeSeries queries
- Expression-based aggregations
- Extrapolation modes
Subscription Execution
Subscriptions execute on a schedule managed by the subscription scheduler:Execution Flow
- Scheduler checks for subscriptions due to execute
- Query Builder constructs query with current time window
- Executor runs query through normal query pipeline
- Publisher sends results to Kafka
Time Window Behavior
For a subscription with:resolution: 60(1 minute)time_window: 300(5 minutes)
2024-01-01T12:00:00, the query executes with:
2024-01-01T12:01:00, the window shifts:
Subscription Data Store
Subscriptions are stored in Redis:- Key Pattern:
snuba-subscriptions:{entity}:{partition}:{uuid} - Partitioning: By entity topic partition
- Persistence: Redis provides durable storage
snuba/subscriptions/store.py
Validation
Subscriptions are validated on creation:Time Window Validation
- Minimum: 60 seconds (1 minute)
- Maximum: 86400 seconds (24 hours)
Resolution Validation
- Minimum: 60 seconds
Query Validation
- Query must be valid SnQL/RPC
- Query executes successfully (test run)
- Entity must support subscriptions
RPC-Specific Validation
- Exactly one expression required
- No group by clauses
- Extrapolation mode must be specified
- Single project ID only
snuba/subscriptions/data.py:122
Error Handling
Invalid Subscription Error
400 Bad Request
Invalid Dataset/Entity Combination
Subscription Results
Results are published to Kafka topics for consumption by downstream services.Result Format
Use Cases
Error Rate Monitoring
Error Rate Monitoring
Monitor error rates and alert when thresholds are exceeded:
Performance Metrics
Performance Metrics
Track p95 latency over time:
Volume Tracking
Volume Tracking
Monitor event volume for capacity planning:
Implementation Details
Key source files:snuba/web/views.py:519- Create subscription endpointsnuba/web/views.py:540- Delete subscription endpointsnuba/subscriptions/subscription.py- SubscriptionCreator/Deletersnuba/subscriptions/data.py- SubscriptionData modelssnuba/subscriptions/scheduler.py- Subscription schedulersnuba/subscriptions/executor_consumer.py- Query executor
Related
Query API
Learn about query execution
Python API
Programmatic subscription management