Skip to content
Keenpix docs
How it works

Analytics

Every request is logged — here's what you get for free.

Analytics is built in, not bolted on. Every request to /img/* writes a log row (timestamp, project, source host, path, width, format, status, cache hit/miss, latency, bytes in/out) and increments an hourly Postgres rollup. Live Logs read the raw rows; dashboard analytics aggregate the rollups in Postgres, so even a 90-day range returns a handful of pre-summed rows and stays fast.

The Overview and Analytics pages serve the last view instantly and revalidate in the background (stale-while-revalidate): changing the range or scope keeps the previous numbers on screen with a small Refreshing… indicator while fresh data loads, and a skeleton shows only on the very first load. Both default to a 24h range, so origin figures line up with the edge data described below.

What you get

  • KPIs — total requests, bandwidth saved, cache hit-rate, and p95 latency, each with a real trend versus the previous window.
  • Requests over time — cache hits vs live-optimized, with a range toggle (24h–90d).
  • Format distribution — how much traffic each output format receives.
  • Response latency — a p50/p75/p90/p95/p99 breakdown and a histogram.
  • Latency over time — p50/p95/p99 per time bucket, so you can spot slow windows.
  • Top images — the heaviest paths, rankable by request count or delivered bytes.
  • Traffic by country — requests grouped by requester country (from the edge CF-IPCountry header).
  • Requests by status — 2xx / 3xx / 4xx / 5xx over time, so 304s read as cache, not errors.
  • Bandwidth saved over time — per-bucket and cumulative optimizer savings.
  • Per-project / per-domain breakdown — an org-wide project table at All-projects scope, or a per-source-domain table when one project is selected.
  • Live logs — every request, newest first, with faceted filters (format, status, cache, and source domain when a single project is selected).
  • Optional Cloudflare edge analytics — edge hit-rate, edge requests, bytes served from Cloudflare, and an hourly edge hit/miss split for /img/*, shown as source-split cards (Cloudflare edge vs Keenpix origin). Edge is persisted by Keenpix, so it reconciles across any range — 24h, 7d, 30d, 90d — not just a fixed 24h window.

Scope: all projects or one

The switcher at the top of the sidebar sets the scope. All projects shows org-wide totals plus a per-project breakdown; pick a single project to scope every chart, the logs, and the KPIs to it.

Origin-shield analytics are aggregated from the hourly Postgres rollups, with raw logs kept for live/debug views. Edge hits are served before the origin and never reach the Keenpix server, so edge analytics are pulled separately from Cloudflare's adaptive Analytics API — and persisted by Keenpix so they survive Cloudflare's 24h window and build up history for wider ranges over time.

On this page