open source · AGPL · runs in your Cloudflare account

Realtime logs + alerts with no vendor in between.

Logs, metrics and alerts for the apps you already run on Cloudflare — send OpenTelemetry metrics, or derive them from your logs — every app in one timeline, deployed into your own account on Workers + Durable Objects. If your apps aren't on Cloudflare, this isn't for you, and that's on purpose. Live tail in milliseconds, 30 days of searchable history, alerts to Slack/Discord/Telegram/email/webhook and incidents in PagerDuty/Opsgenie, and an MCP server so your AI agent reads your logs. From $5/mo — the Workers Paid floor — plus your own metered Cloudflare usage, with a meter that shows the deployment's own bill.

⚡Deploy to Cloudflare ★ Star on GitHub one click · provisions everything · or read the quickstart
74ms
log → your screen (p50, warm)
30 days
searchable history
$5/mo
Workers Paid floor + usage
0
servers to run

* $5/mo is the Workers Paid floor. Durable Object, D1, R2 and Queues usage meters on top at Cloudflare's published rates — our built-in meter estimates it, and we're validating that estimate against a full billing cycle before calling it final. Latency is a warm p50 from BENCHMARKS.md (worst observed 148 ms).

What it does

A real observability stack, not a log viewer.

Everything a small team needs to know when production breaks — and to answer the question three weeks later. All of it in one Cloudflare account.

Realtime live tail

74 ms at the median from a log leaving your app to landing on your screen — push-based over hibernating WebSockets. When the buffer prunes ahead of you the stream says so, in the line count, rather than skipping quietly.

Alerts that wake you up

Instant match + rate-threshold rules to Slack, Discord, Telegram, email, webhook, PagerDuty and Opsgenie. Coalesced so a storm is one alert, not a thousand. Test any channel before you rely on it. PagerDuty and Opsgenie incidents open when it fires and close themselves once it goes quiet.

Every app, one timeline

Search across all your apps at once — one filter, one time range, one newest-first list with an app pill per line — over the live buffer and 30 days of history, paging past the first screen to every match. Break any search down by level, service or any attribute, and click a value to filter by it.

Metrics, APM, traces

Point an OpenTelemetry Collector at /v1/metrics — gauges, counters and histograms, JSON or protobuf. Or save a search as a metric (count, rate, error rate, estimated p95 from log-scale buckets) with no extra tokens. Turn on per-request lines for rate / errors / latency per route. Send traces to /v1/traces and open a request as a waterfall — built from the spans your search returned, so it says when a large trace is partial.

Is this new?

Errors grouped by message template with first/last seen, and deploy markers (from CI, a deploy attribute, or Workers Versions) so what started after the last deploy stands out. An exception recorded on a span becomes a searchable error line too, stack trace and all.

30 days of history

Logs archive hourly to your own R2 as portable gzip files — search back through them by text, level and attributes. Charts, filters and group-by cover the live 24-hour buffer, not the archive. Your logs are stored only in your own D1, R2 and Durable Objects; read the segments with zcat if you ever leave.

Agent-native (MCP)

A built-in Model Context Protocol server. Your coding agent asks "what errors did api throw in the last hour?" and reads your real production logs — scoped, revocable tokens, no vendor in the loop.

Ingest from anywhere

Native JSON, OTLP/HTTP (logs and traces, JSON or protobuf), Loki push (JSON) and Vercel drains — gzip welcome. Point the OpenTelemetry Collector, any OTel SDK, Cloudflare Workers Traces, a Vercel drain, or Vector with compression: none at one URL. Promtail and Grafana Alloy send snappy-framed protobuf and aren't supported yet. Or tail any Cloudflare Worker in 2 minutes with zero code changes.

Costs you can see

A built-in meter estimates the deployment's own Cloudflare bill against a ceiling you set, and a one-click kill-switch pauses ingest (HTTP 402) until you resume — you flip it; it does not trip itself yet. No per-GB metering, no seat pricing.

The honest answer

"Why not just use Cloudflare's built-in Workers Logs?"

You should — for last week's debugging. Workers Logs is genuinely good: zero setup, a free tier, live tail one flag away. We use it too. Here's what it doesn't do, and still doesn't do in 2026:

  • ✕It can't wake you up. There's no alerting anywhere in Workers Observability — none. Buddyflare is that missing piece, productized: Slack, Discord, Telegram, email, webhook, PagerDuty and Opsgenie rules out of the box.
  • ✕It forgets after 7 days. Seven days is a hard maximum you can't pay past. "Did this error happen before the deploy three weeks ago?" is unanswerable. We keep 30 days in your R2.
  • ✕The bill is open-ended. Past the included events it's uncapped. One chatty Worker can quietly run into the hundreds. We start at the $5 Workers Paid floor and meter on top of it at Cloudflare's published rates — with a built-in estimate of that bill and a kill-switch you flip to stop ingest.
  • ✕The live tail is best-effort. Under load it samples and drops messages, and persists nothing. Ours is push-based, persisted, and fast.
  • ✕Only Workers. Your Vercel app, Node backend, cron scripts, anything that speaks OTLP/HTTP (JSON or protobuf), Loki push JSON, or Vercel drains — built-in can't see them. We ingest all of it into one place.

And what built-in does better, in fairness: a query builder with percentiles over invocation fields, Workers Traces (automatic spans, metered per span from Oct 2026), OpenTelemetry export to any vendor, and Cloudflare's own MCP server for Workers observability. Buddyflare doesn't replace those — it adds the alerting, the 30-day memory, and the non-Worker sources they leave out. Distributed traces are not shipped here yet; we capture trace_id and pivot your logs by it.

Workers Logs is for last week's debugging. Buddyflare is for the alert at 3am and the question from three weeks ago — in the same Cloudflare account, on the same bill.

Who it's for

Two audiences, one deployment.

A · Cloudflare-native devs

Tail any Worker in 2 minutes.

Attach a tiny tail worker to any Worker you already run — zero code changes to the observed app — and watch its logs stream, alert on errors, and keep 30 days. The gaps built-in observability leaves, filled.

B · Everyone else

Your app runs anywhere.

The deployment lives on Cloudflare, but the apps it watches don't have to. Any backend that can POST JSON — or already speaks OTLP/HTTP, Loki push JSON, or Vercel drains — lands its logs in your own Cloudflare account. The only bill is Cloudflare's, at published rates, and there's no Buddyflare plan, tier or vendor between you and your logs.

Get started

One command. Your account. Your logs.

Deploy to your own Cloudflare account, then send your first log. No cluster, no agent, no VM — it's serverless the whole way down.

# deploy into your own account
git clone https://github.com/Dinesh-3018/buddyflare && cd buddyflare
pnpm install

# create the resources wrangler.jsonc binds, then deploy
npx wrangler d1 create buddyflare
npx wrangler r2 bucket create buddyflare-history
pnpm run deploy

# send your first log
curl -X POST https://your-worker.workers.dev/ingest \
  -H 'Authorization: Bearer <INGEST_TOKEN>' \
  -d '{"level":"error","message":"it broke"}'

# …and watch it stream in the dashboard, live.
01

Deploy

Clone, create your D1 and R2, then one command — or use the Deploy-to-Cloudflare button. Migrations apply themselves.

02

Point your logs at it

curl, the JS or Python SDK, or your existing OTLP / Loki-JSON / Vercel exporter — or tail any Worker in 2 minutes, zero code changes.

03

Watch & alert

Live tail, search 30 days, set alert rules. Connect your AI agent over MCP.

No surprises

Honest about the edges.

A sharp tool with clear boundaries beats a vague one that claims everything. Here's exactly what you get — and what you don't.

What it is

  • ✓ Realtime logs + alerting, done well
  • ✓ 30-day searchable history in your R2
  • ✓ OTLP logs, metrics and traces + tail-any-Worker
  • ✓ AI-agent readable over MCP
  • ✓ AGPL, serverless, $5/mo Workers Paid floor + usage

What it isn't (yet)

  • — No span store — traces are log lines you pivot by trace_id
  • — No full-text index — search is a bounded scan that reports its own limits
  • — Not multi-tenant SaaS — one deploy, one admin
  • — No proprietary query language — filters & click-to-query
  • — No users or roles yet — one admin token, one viewer token
  • — No per-seat billing, ever
  • — No "coming soon" — if it's on this page, it ships

Own your observability.

Deploy it, run it, keep it — in the Cloudflare account you already have. Open source means there's no hosted service to deprecate, reprice, or shut down.