---
title: Overview
description: The services and stores that make up OpenPerf.
---

OpenPerf is six services and four stores. Each service runs and is configured on its own.

## Services

| Service         | Port | Role                                                |
| --------------- | ---- | --------------------------------------------------- |
| `web`           | 3000 | Dashboard. The browser calls `api` directly.        |
| `api`           | 4000 | Dashboard API and auth.                             |
| `api-ingest`    | 4100 | OTLP intake. Writes logs and spans to ClickHouse.   |
| `worker-jobs`   | 4200 | Background jobs: alerts, webhooks, emails, cleanup. |
| `worker-errors` | 4400 | Symbolicates and groups errors.                     |
| `mcp`           | 4500 | MCP server for AI assistants.                       |

Worker ports serve only health checks.

## Stores

| Store         | Holds                                                         |
| ------------- | ------------------------------------------------------------- |
| PostgreSQL    | Accounts, projects, error groups, alert rules and job queues. |
| ClickHouse    | Logs, spans, error events and their hourly rollups. 26.8+.    |
| Redis (state) | Ingest queues and rate limits. Run it with `noeviction`.      |
| Redis (cache) | Query cache. Safe to evict.                                   |
| S3-compatible | Source maps and logos.                                        |

ClickHouse 26.6 and later needs AVX2 on x86 hosts.

## Data flow

1. An SDK sends OTLP to `api-ingest`, which queues it in Redis.
2. `api-ingest` drains logs and spans into ClickHouse. While ClickHouse is down, they wait in Redis.
3. `worker-errors` groups errors in PostgreSQL and writes events to ClickHouse.
4. `worker-jobs` evaluates alert rules and sends notifications.

## License

[Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
