5a558eb09e
TypeScript SDK Compatibility V1.x E2E Tests / Select Node version matrix (push) Has been cancelled
TypeScript SDK Compatibility V1.x E2E Tests / TypeScript SDK Compatibility V1.x E2E Tests Node ${{matrix.node_version}} (push) Has been cancelled
TypeScript SDK E2E Tests / TypeScript SDK E2E Tests Node ${{matrix.node_version}} (push) Has been cancelled
Opik Optimizer - E2E Tests / build-opik (push) Has been cancelled
TypeScript SDK Compatibility V1.x E2E Tests / build-opik (push) Has been cancelled
Python SDK E2E Tests / Select Python version matrix (push) Has been cancelled
Python SDK E2E Tests / Python SDK E2E Tests ${{matrix.python_version}} (push) Has been cancelled
Python SDK E2E Tests / build-opik (push) Has been cancelled
Python SDK Compatibility V1.x E2E Tests / Select Python version matrix (push) Has been cancelled
Python SDK Compatibility V1.x E2E Tests / Python SDK Compatibility V1.x E2E Tests ${{matrix.python_version}} (push) Has been cancelled
Python SDK Compatibility V1.x E2E Tests / build-opik (push) Has been cancelled
TypeScript SDK E2E Tests / Select Node version matrix (push) Has been cancelled
TypeScript SDK E2E Tests / build-opik (push) Has been cancelled
Opik Optimizer - E2E Tests / Opik Optimizer E2E Tests Python ${{matrix.python_version}} (push) Has been cancelled
Opik Optimizer - E2E Tests / Opik Optimizer Integration Smoke Tests (push) Has been cancelled
🐙 Code Quality / detect (push) Has been cancelled
🐙 Code Quality / lint (${{ matrix.leg.name }}) (push) Has been cancelled
🐙 Code Quality / summary (push) Has been cancelled
TypeScript SDK Library Integration Tests / Check Secrets (push) Has been cancelled
TypeScript SDK Library Integration Tests / opik-vercel (Vercel AI SDK / eve) (push) Has been cancelled
SDK Library Integration Tests Runner / Check Secrets (push) Has been cancelled
SDK Library Integration Tests Runner / Missed OpenAI API Key Warning (push) Has been cancelled
SDK Library Integration Tests Runner / Build (push) Has been cancelled
SDK Library Integration Tests Runner / openai_tests (push) Has been cancelled
SDK Library Integration Tests Runner / langchain_tests (push) Has been cancelled
SDK Library Integration Tests Runner / langchain_legacy_tests (push) Has been cancelled
SDK Library Integration Tests Runner / llama_index_tests (push) Has been cancelled
SDK Library Integration Tests Runner / anthropic_tests (push) Has been cancelled
SDK Library Integration Tests Runner / mistral_tests (push) Has been cancelled
SDK Library Integration Tests Runner / groq_tests (push) Has been cancelled
SDK Library Integration Tests Runner / aisuite_tests (push) Has been cancelled
SDK Library Integration Tests Runner / haystack_tests (push) Has been cancelled
SDK Library Integration Tests Runner / dspy_tests (push) Has been cancelled
SDK Library Integration Tests Runner / crewai_v0_tests (push) Has been cancelled
SDK Library Integration Tests Runner / crewai_v1_tests (push) Has been cancelled
SDK Library Integration Tests Runner / genai_tests (push) Has been cancelled
SDK Library Integration Tests Runner / adk_tests (push) Has been cancelled
SDK Library Integration Tests Runner / adk_legacy_1_3_0_tests (push) Has been cancelled
SDK Library Integration Tests Runner / evaluation_metrics_tests (push) Has been cancelled
SDK Library Integration Tests Runner / bedrock_tests (push) Has been cancelled
SDK Library Integration Tests Runner / litellm_tests (push) Has been cancelled
SDK Library Integration Tests Runner / harbor_tests (push) Has been cancelled
SDK Library Integration Tests Runner / Slack Notification (push) Has been cancelled
Lint Opik Helm Chart / render-equality (push) Has been cancelled
Opik Optimizer - Unit Tests / Opik Optimizer Unit Tests Python ${{matrix.python_version}} (push) Has been cancelled
Python BE E2E Tests / Python BE E2E (push) Has been cancelled
Python Backend Tests / run-python-backend-tests (push) Has been cancelled
Python SDK Unit Tests / Python SDK Unit Tests ${{matrix.python_version}} (push) Has been cancelled
Release Drafter / update_release_draft (push) Has been cancelled
SDK E2E Libraries Integration Tests / Check Secrets (push) Has been cancelled
SDK E2E Libraries Integration Tests / Missed OpenAI API Key Warning (push) Has been cancelled
SDK E2E Libraries Integration Tests / build-opik (push) Has been cancelled
SDK E2E Libraries Integration Tests / E2E Lib Integration Python ${{matrix.python_version}} (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-gemini) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-langchain) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-openai) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-otel) (push) Has been cancelled
TypeScript SDK Integration Build & Publish / build-and-publish (opik-vercel) (push) Has been cancelled
TypeScript SDK Build & Publish / build-and-publish (push) Has been cancelled
TypeScript SDK Unit Tests / Test on Node ${{ matrix.node-version }} (push) Has been cancelled
Backend Tests / discover-tests (push) Has been cancelled
Backend Tests / ${{ matrix.name }} (push) Has been cancelled
Build and Publish SDK / build-and-publish (push) Has been cancelled
Build Opik Docker Images / set-version (push) Has been cancelled
Build Opik Docker Images / build-backend (push) Has been cancelled
Build Opik Docker Images / build-sandbox-executor-python (push) Has been cancelled
Build Opik Docker Images / build-python-backend (push) Has been cancelled
Build Opik Docker Images / build-frontend (push) Has been cancelled
Build Opik Docker Images / create-git-tag (push) Has been cancelled
ClickHouse Migration Cluster Check / validate-clickhouse-migrations (push) Has been cancelled
Docs - Publish / run (push) Has been cancelled
E2E Tests - Post Merge (v2) / 🧪 E2E v2 Tests (${{ github.event.inputs.tier || 't1' }}) (push) Has been cancelled
E2E Tests - Post Merge (v2) / 📢 Slack Notification (push) Has been cancelled
Frontend Unit Tests / Test on Node 20 (push) Has been cancelled
Guardrails E2E Tests / Select Python version matrix (push) Has been cancelled
Guardrails E2E Tests / Guardrails E2E Tests ${{matrix.python_version}} (push) Has been cancelled
Guardrails E2E Tests / 📢 Slack Notification (push) Has been cancelled
Guardrails Backend Unit Tests / Guardrails Backend Unit Tests (push) Has been cancelled
Guardrails Backend Unit Tests / 📢 Slack Notification (push) Has been cancelled
Lint Opik Helm Chart / lint-helm-chart (Helm v3.21.0) (push) Has been cancelled
Lint Opik Helm Chart / lint-helm-chart (Helm v4.2.0) (push) Has been cancelled
Lint Opik Helm Chart / unittest-helm-chart (push) Has been cancelled
219 lines
7.8 KiB
Plaintext
219 lines
7.8 KiB
Plaintext
---
|
||
headline: Scaling Opik | Opik Documentation
|
||
og:description: Learn best practices and configurations for running Opik in production,
|
||
ensuring resilience and scalability for mission-critical workloads.
|
||
og:site_name: Opik Documentation
|
||
og:title: Scaling Opik for High-Volume Deployments
|
||
subtitle: Comprehensive guide for scaling Opik in production environments
|
||
title: Scaling Opik
|
||
canonical-url: https://www.comet.com/docs/opik/self-host/scaling
|
||
---
|
||
|
||
Opik is built to power mission-critical workloads at scale. Whether you're running a small proof of concept or a high-volume enterprise deployment, Opik adapts seamlessly to your needs. Its stateless architecture and powerful ClickHouse backed storage make it highly resilient, horizontally scalable, and future-proof for your data growth.
|
||
|
||
This guide outlines recommended configurations and best practices for running Opik in production.
|
||
|
||
## Reference Deployment: Live Production Environment
|
||
|
||
The following is based on an active, high-volume Opik deployment serving real users in production. Use it as a reference when planning your own infrastructure.
|
||
|
||
### Workload Profile
|
||
|
||
| Metric | Value |
|
||
|--------|-------|
|
||
| Active users (daily) | ~600 |
|
||
| Traces ingested per day | 4–6 million |
|
||
| Weekly data ingestion | ~100 GB |
|
||
| Total traces stored | 40 million (400 GB) |
|
||
| Total spans stored | 250 million (3.1 TB) |
|
||
| Total data on disk | 5 TB |
|
||
| Select queries per second | ~80 |
|
||
| Insert queries per second | ~20 |
|
||
| Rows inserted per minute | Up to 75K |
|
||
|
||
### Infrastructure
|
||
|
||
**Opik Backend** — 10 pods
|
||
- 3 CPU cores, 5 GB memory per pod
|
||
|
||
**Opik Python Backend** — 12 pods
|
||
- 1.5 CPU cores, 2 GB memory per pod
|
||
|
||
**Opik Frontend** — 3 pods
|
||
- Lightweight reverse proxy, minimal CPU and memory requirements
|
||
|
||
**ClickHouse** — 2 replicas, 1 shard
|
||
- 30 CPU cores, 230 GB memory per replica
|
||
- 15 TB gp3 SSD storage per replica (3000 IOPS, 250 MiB/s throughput)
|
||
|
||
### Key Configuration
|
||
|
||
| Setting | Value |
|
||
|---------|-------|
|
||
| Async ClickHouse inserts | Enabled |
|
||
| Rate limiting | 10,000 events per 60 seconds per client |
|
||
| Max query execution time | 60 seconds |
|
||
| Max memory per query | 10 GB |
|
||
| Ingestion method | Batch endpoints (up to 1,000 items/request) |
|
||
|
||
This deployment runs comfortably at 10–20% average CPU utilization on ClickHouse, with headroom for traffic spikes up to 40–50%.
|
||
|
||
## Built for Growth
|
||
|
||
Opik is designed with flexibility at its core. As your data grows and query volumes increase, Opik grows with you.
|
||
|
||
- **Horizontal scaling** - add more replicas of services to instantly handle more traffic
|
||
- **Vertical scaling** - increase CPU, memory, or storage to handle denser workloads
|
||
- **Seamless elasticity** - scale out during peak usage and scale back during quieter periods
|
||
|
||
For larger workloads, ClickHouse can be scaled to support enterprise-level deployments. A common configuration includes:
|
||
|
||
- 62 CPU cores
|
||
- 256 GB RAM
|
||
- 25 TB disk space
|
||
|
||
ClickHouse's read path can also scale horizontally by increasing replicas, ensuring Opik continues to deliver high performance as usage grows.
|
||
|
||
## Resilient Services Cluster
|
||
|
||
Opik services are stateless and fault-tolerant, ensuring high availability across environments. Recommended resources:
|
||
|
||
| Environment | CPU (vCPU) | RAM (GB) |
|
||
|-------------|------------|----------|
|
||
| Development | 4 | 8 |
|
||
| Production | 13 | 32 |
|
||
|
||
### Instance Guidance
|
||
|
||
| Deployment | Instance | vCPUs | Memory (GiB) |
|
||
|------------|----------|-------|--------------|
|
||
| Dev (small) | c7i.large | 2 | 4 |
|
||
| Dev | c7i.xlarge | 4 | 8 |
|
||
| Prod (small) | c7i.2xlarge | 8 | 16 |
|
||
| Prod | c7i.4xlarge | 16 | 32 |
|
||
|
||
### Backend Service (Scales to Demand)
|
||
|
||
| Metric | Dev | Prod Small | Prod Large |
|
||
|--------|-----|------------|------------|
|
||
| Replicas | 2 | 5 | 7 |
|
||
| CPU cores | 1 | 2 | 2 |
|
||
| Memory (GiB) | 2 | 9 | 12 |
|
||
|
||
### Frontend Service (Always Responsive)
|
||
|
||
| Metric | Dev | Prod Small | Prod Large |
|
||
|--------|-----|------------|------------|
|
||
| Replicas | 2 | 3 | 5 |
|
||
| CPU (millicores) | 5 | 50 | 50 |
|
||
| Memory (MiB) | 16 | 32 | 64 |
|
||
|
||
## ClickHouse: High-Performance Storage
|
||
|
||
At the heart of Opik's scalability is ClickHouse, a proven, high-performance analytical database designed for large-scale workloads. Opik leverages ClickHouse for storing traces and spans, ensuring fast queries, robust ingestion, and uncompromising reliability.
|
||
|
||
### Instance Types
|
||
|
||
Memory-optimized instances are recommended, with a minimum 4:1 memory-to-CPU ratio:
|
||
|
||
| Deployment | Instance |
|
||
|------------|----------|
|
||
| Small | m7i.2xlarge |
|
||
| Medium | m7i.4xlarge |
|
||
| Large | m7i.8xlarge |
|
||
|
||
### Replication Strategy
|
||
|
||
- **Development**: 1 replica
|
||
- **Production**: 2 replicas
|
||
|
||
Always scale vertically before adding more replicas for efficiency.
|
||
|
||
### CPU & Memory Guidance
|
||
|
||
Target 10–20% CPU utilization, with safe spikes up to 40–50%.
|
||
|
||
Maintain at least a 4:1 memory-to-CPU ratio (extend to 8:1 for very large environments).
|
||
|
||
| Deployment | CPU cores | Memory (GiB) |
|
||
|------------|-----------|--------------|
|
||
| Minimum | 2 | 8 |
|
||
| Development | 4 | 16 |
|
||
| Production (small) | 6 | 24 |
|
||
| Production | 32 | 128 |
|
||
|
||
### Disk Recommendations
|
||
|
||
To ensure reliable performance under heavy load:
|
||
|
||
| Volume | Value |
|
||
|--------|-------|
|
||
| Family | SSD |
|
||
| Type | gp3 |
|
||
| Size | 8–16 TiB (workload dependent) |
|
||
| IOPS | 3000 |
|
||
| Throughput | 250 MiB/s |
|
||
|
||
Opik's ClickHouse layer is resilient even under sustained, large-scale ingestion, ensuring queries stay fast.
|
||
|
||
## Ingestion Best Practices
|
||
|
||
How you send data to Opik matters more than how much hardware you run. Optimizing your ingestion pattern is the single most impactful thing you can do for performance.
|
||
|
||
### Use Batch Endpoints
|
||
|
||
Opik provides batch ingestion endpoints that accept up to **1,000 items per request**:
|
||
|
||
- `POST /v1/private/traces/batch`
|
||
- `POST /v1/private/spans/batch`
|
||
|
||
Instead of sending 1,000 individual HTTP requests (each triggering a separate database insert), a single batch request handles them all at once. This dramatically reduces connection overhead and ClickHouse insert pressure.
|
||
|
||
<Tip>
|
||
The **Opik Python SDK batches automatically** — no code changes needed. This guidance applies primarily to direct API integrations or custom SDK implementations.
|
||
</Tip>
|
||
|
||
### Enable Async Inserts
|
||
|
||
For production deployments, enable async ClickHouse inserts. This allows Opik to buffer writes and flush them in larger, more efficient batches rather than committing each insert individually.
|
||
|
||
### Set Query Limits
|
||
|
||
Protect your ClickHouse cluster from runaway queries:
|
||
|
||
| Setting | Recommended Value |
|
||
|---------|-------------------|
|
||
| Max execution time | 60 seconds |
|
||
| Max memory per query | 10 GB |
|
||
| Max concurrent queries per user | 2–4 |
|
||
|
||
These limits prevent a single expensive query from impacting ingestion performance or other users.
|
||
|
||
### Monitor What Matters
|
||
|
||
Key metrics to watch for a healthy deployment:
|
||
|
||
- **ClickHouse CPU utilization** — target 10–20% average, safe spikes up to 40–50%
|
||
- **Insert rate** — rows inserted per minute, should be steady without drops
|
||
- **Query duration** — p95 and p99 query times; investigate if consistently above 10 seconds
|
||
- **Pod restarts** — frequent restarts may indicate health check timeouts under load
|
||
|
||
## Managing System Tables
|
||
|
||
System tables (e.g., `system.opentelemetry_span_log`) can grow quickly. To keep storage lean:
|
||
|
||
- Configure TTL settings in ClickHouse, or
|
||
- Perform periodic manual pruning
|
||
|
||
## Why Opik Scales with Confidence
|
||
|
||
- **Enterprise-ready** — built to support multi-terabyte data volumes
|
||
- **Elastic & flexible** — easily adjust resources to match workload demands
|
||
- **Robust & reliable** — designed for high availability and long-term stability
|
||
- **Future-proof** — proven to support growing usage without redesign
|
||
|
||
With Opik, you can start small and scale confidently, knowing your observability platform won't hold you back.
|
||
|
||
## References
|
||
|
||
- [ClickHouse sizing & hardware recommendations](https://clickhouse.com/docs/guides/sizing-and-hardware-recommendations) |