See every task.
Keep every byte.
Feloxi turns the events your Celery workers already emit into live dashboards, searchable history and alerts that fire. It runs on your servers. No agent, no SDK, and nothing leaves your network.
docker compose up
- 0
- agents to install Reads the broker events Celery already sends
- 3
- lines of Celery config worker_send_task_events and two friends
- 2 GB
- is enough to start Rust API, ClickHouse storage
- 10
- alert conditions failure rate to missed Beat schedules
- Apache-2.0
- license no telemetry, no open-core catch
Your broker already knows. Feloxi just listens.
Celery publishes an event every time a task is sent, starts, retries, succeeds or fails. Feloxi subscribes to those events on the broker you already run, so there is nothing to install next to your code.
- 01
Turn on events
Three settings, then restart workers with
--events. Your task code stays as it is.# celeryconfig.py worker_send_task_events = True task_send_sent_event = True task_track_started = True
- 02
Point Feloxi at your broker
Add a Redis or RabbitMQ URL under Brokers and test the connection. Add staging and production side by side.
redis://redis.internal:6379/0Connected - 03
Watch
Tasks show up within seconds. History goes to ClickHouse on your disk, kept as long as your retention policy says.
Find the task that broke.
Search every task by ID, name, arguments, result or exception, then open it for the traceback, runtime, retries and the chain it ran in.
Failures collapse into one row per fingerprint, with IDs and URLs stripped out, so forty-two declined payments read as one problem, not forty-two.
- 17TypeErrorNewsetup_billing() missing 1 required positional argument: 'plan'tasks.email.send_welcome_email
- 42ValueErrorPayment declined for order order_id: insufficient fundstasks.payments.process_payment
- 15OSErrorFailed to fetch image: urltasks.media.resize_image
- 8RuntimeErrorTranscoding failed for url: codec errortasks.media.transcode_video
tasks.email.send_welcome_email is 12.5% over 5m (threshold 10%).Likely cause: TypeError setup_billing() missing 1 required positional argument, 3 events.One page when it breaks. One when it's fixed.
Alerts behave like incidents: a notification when a condition starts firing, a resolved notice with the duration when it clears, and nothing in between. Failed deliveries retry with backoff and land in the delivery log.
- 01Failure rate
- 02Slow tasks
- 03Worker offline
- 04Queue depth
- 05Throughput anomaly
- 06Latency anomaly
- 07Error spike
- 08Beat missed
- 09No events
- 10Task failed
- Slack
- Discord
- PagerDuty
- Webhook
Silences for maintenance windows. Severity floors per channel, so warnings go to Slack and only critical pages wake someone up.
Chains, groups and chords, drawn as they ran.
When step three of a chord fails, you see which branch broke and what was skipped because of it.
Grouped the way you deploy them.
Slots in use, heartbeat gaps, load and throughput per deployment, with remote shutdown when a worker misbehaves.
- worker-payments@prod-1
- worker-payments@prod-2
- worker-media@prod-1
- worker-media@prod-2
Every Beat schedule, and the one that missed.
Last and next run for each periodic task, plus an alert when a schedule stops running on time.
- check-system-healthevery 30s8s ago
- sync-all-inventoriesevery 2m74s ago
- nightly-report0 0 * * *missed
- send-digestsevery 5m3m ago
Nothing crosses the line.
Task arguments, results and tracebacks often hold customer data. Feloxi keeps them in your own ClickHouse, behind your own network rules. No vendor account, no telemetry, no per-seat bill.
| Scale | Tasks/day | Workers | ClickHouse |
|---|---|---|---|
| Small | < 100K | < 10 | 1 CPU, 1 GB |
| Medium | 100K–1M | 10–100 | 2 CPU, 4 GB |
| Large | 1M–10M | 100–500 | 4 CPU, 16 GB |
docker compose up -dhelm install feloxi oci://ghcr.io/thesaadmirza/charts/feloxikubectl apply -f deploy/k8s/As cheap as DIY. As complete as SaaS.
Flower is where most Celery teams start. Hosted APMs cover more ground, and bill for it. Feloxi is the task-queue piece, done properly and kept on your side.
| Feloxi | Flower | Hosted APM | Prometheus + Grafana | |
|---|---|---|---|---|
| Task history | ClickHouse, kept as long as you set | In memory, lost on restart unless persistent mode is on | By plan and price tier | Metrics only, no per-task detail |
| Alerting | 10 conditions, built in | None | Yes | Alertmanager rules you write |
| Chains and chords | Drawn as DAGs | No | Varies | No |
| Where data lives | Your infrastructure | Your infrastructure | Vendor cloud | Your infrastructure |
| In your app | Nothing | Nothing | Agent and SDK | An exporter |
| Price | Free | Free | Per host, seat or event | Free, plus your time |
| License | Apache-2.0 | BSD-3-Clause | Proprietary | Apache-2.0, AGPL |
- Task history
- ClickHouse, kept as long as you set
- Flower: In memory, lost on restart unless persistent mode is on · Hosted APM: By plan and price tier · Prometheus: Metrics only, no per-task detail
- Alerting
- 10 conditions, built in
- Flower: None · Hosted APM: Yes · Prometheus: Alertmanager rules you write
- Chains and chords
- Drawn as DAGs
- Flower: No · Hosted APM: Varies · Prometheus: No
- Where data lives
- Your infrastructure
- Flower: Your infrastructure · Hosted APM: Vendor cloud · Prometheus: Your infrastructure
- In your app
- Nothing
- Flower: Nothing · Hosted APM: Agent and SDK · Prometheus: An exporter
- Price
- Free
- Flower: Free · Hosted APM: Per host, seat or event · Prometheus: Free, plus your time
- License
- Apache-2.0
- Flower: BSD-3-Clause · Hosted APM: Proprietary · Prometheus: Apache-2.0, AGPL
Task queues first. Then the rest of the stack.
The same self-hosted core grows into logs, access control and dashboards, without a hosted tier that gets the features first. Request a feature
- Redis and RabbitMQ brokers
- Workflow DAGs
- Celery Beat tracking
- Alert incidents, silences and severity routing
- Slack and Discord in one click
- Google sign-in and magic links
- Scoped API keys
- Prometheus /metrics
- Helm chart
- End-to-end alert encryption
- Log search, joined to tasks
- SAML and OIDC single sign-on
- Audit log
- Custom dashboards
- SLA tracking
- Distributed tracing
Clone it, run it,
watch your queues.
One docker compose up boots the whole stack with a seeded demo. Free, with the source on GitHub.