Open-source monitoring for Celery

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.

Get started
docker compose up
Redis or RabbitMQ · Docker Compose, Helm or plain manifests · Apache-2.0
TypeError ×17send_welcome_email→ Slack
The Feloxi overview: throughput, failure rate, runtime and backlog readouts, tasks per minute by outcome, failures grouped by exception, and queue depths.
0
agents to install
3
lines of Celery config
2 GB
is enough to start
10
alert conditions
Apache-2.0
license
01How it works

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.

  1. 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
  2. 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
  3. 03

    Watch

    Tasks show up within seconds. History goes to ClickHouse on your disk, kept as long as your retention policy says.

Your network
Celery workersyour code, unchanged
Redis or RabbitMQthe broker you run
FeloxiRust API · WebSocket
ClickHousetask history
Postgresusers
Redislive worker state
Vendor cloud: not involved
02Search and failures

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.

Retry from the UIRevoke through the broker
state isFailed
Failing nowgrouped by fingerprint
  • TypeErrorNew
    setup_billing() missing 1 required positional argument: 'plan'tasks.email.send_welcome_email
    17
  • ValueError
    Payment declined for order order_id: insufficient fundstasks.payments.process_payment
    42
  • OSError
    Failed to fetch image: urltasks.media.resize_image
    15
  • RuntimeError
    Transcoding failed for url: codec errortasks.media.transcode_video
    8
03Alerting
# ops-alerts2 messages from one incident
Feloxi09:33
FiringWelcome emails failing
Failure rate of tasks.email.send_welcome_email is 12.5% over 5m (threshold 10%).Likely cause: TypeError setup_billing() missing 1 required positional argument, 3 events.
Nothing in between. No repeats while it keeps firing.
Feloxi09:47
ResolvedWelcome emails failing
Back under threshold at 1.8%. Fired for 14m 06s.

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.

  1. 01Failure rate
  2. 02Slow tasks
  3. 03Worker offline
  4. 04Queue depth
  5. 05Throughput anomaly
  6. 06Latency anomaly
  7. 07Error spike
  8. 08Beat missed
  9. 09No events
  10. 10Task failed
  • Slack
  • Discord
  • PagerDuty
  • Email
  • Webhook

Silences for maintenance windows. Severity floors per channel, so warnings go to Slack and only critical pages wake someone up.

04And the rest of the queue
Workflows

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.

import_csv · sales2.6 s
import_csv · inventory3.6 s
import_csv · customers2.4 s
aggregate_report_dataskipped
Workers

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
Schedules

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
05Self-hosted

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.

ScaleTasks/dayWorkersClickHouse
Small< 100K< 101 CPU, 1 GB
Medium100K–1M10–1002 CPU, 4 GB
Large1M–10M100–5004 CPU, 16 GB
From the sizing guide, which also covers the API, Redis and Postgres.
Docker Compose
docker compose up -d
A laptop or a 2 GB VM. Boots the whole stack with a seeded demo.
Helm
helm install feloxi oci://ghcr.io/thesaadmirza/charts/feloxi
Kubernetes, with bundled Postgres, ClickHouse and Redis, or point it at managed ones.
Manifests
kubectl apply -f deploy/k8s/
Plain Kubernetes manifests for GitOps with Argo CD or Flux.
06Compare

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.

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
07Roadmap

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

Shipped
  • 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
Building
  • End-to-end alert encryption
Next
  • 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.