Skip to main content

Cross-source log capture and probe-based analysis CLI (Fly.io, Cloudflare, files, stdin).

Project description

paperbark

Configurable cross-source log capture, search, and analysis CLI.

Paperbark captures logs from many sources (Fly.io, Cloudflare, Kubernetes, CloudWatch, plain files, stdin), runs a configurable set of probes over them, and writes a stable run-directory layout that downstream tooling can search across.

Status: latest release on PyPI. The probe, format, source (flyctl, file, stdin, wrangler), iteration, aggregate, cursor-filter, search, dispatcher, and analyse layers are all wired up; paperbark monitor runs end to end on a configurable cadence with a rich.live ticker. See docs/ROADMAP.md for current status.

Install

# pipx (recommended for CLI use)
pipx install paperbark

# or uv
uv tool install paperbark

For local development, see CONTRIBUTING.md.

Quickstart

# write a starter config in the current directory. Run inside a
# directory containing `fly.toml` or `wrangler.{toml,jsonc,json}` and
# the [[sources]] block is pre-filled with the app/worker name —
# `paperbark monitor` is then ready to go without further edits.
# Pass `--no-detect` to opt out and emit the bare template.
paperbark init

# add at least one source — uncomment the [[sources]] block in
# paperbark.toml and point `app` at your Fly app. monitor exits with
# "no sources configured" until you do. (Skip this step if `init`
# auto-detected a manifest above.)

# capture and analyse using config defaults (3s cadence, ~72 minutes)
paperbark monitor

# custom cadence, fixed run id, snapshots every 30s
paperbark monitor --interval 1s --run-id incident-pr349 --analyse-every 30s

# capture forever; press Ctrl+C to write the final report and exit
paperbark monitor --iterations 0

# scope a single run to one or more configured sources (repeatable)
paperbark monitor --source staging --source prod

# search across captured runs
paperbark search --keyword "panic"

# re-run analysis over an existing run
paperbark analyse --run latest

Or skip Fly entirely and pipe pre-captured logs through stdin:

# one-shot run over a piped log; same probes, same run-dir layout
printf '[[sources]]\nname = "pipe"\ntype = "stdin"\n' > paperbark.toml
cat app.log | paperbark monitor --iterations 1

The file source is the on-disk equivalent — set type = "file" and point path at the log file instead of piping.

Configuration

Paperbark reads ./paperbark.toml first, then ~/.config/paperbark/config.toml. Every CLI flag is also expressible as a TOML key; flags override TOML at runtime. See docs/CONFIG.md for the full schema reference.

Sources

Source Status
Fly.io (flyctl logs) implemented
Cloudflare Workers (wrangler tail) implemented
Kubernetes (kubectl logs) stub (interface only, post-v1)
AWS CloudWatch stub (interface only, post-v1)
Plain files implemented
stdin implemented

See docs/SOURCES.md for the Source interface and how to add a new one.

Log payload formats

Today: JSON-keyed payloads only. Per-source format_keys lets you remap the canonical field names (timestamp / level / message / component) to whatever JSON keys your app emits — see docs/CONFIG.md.

Coming in v0.2: regex named-group formats for non-JSON shapes (pipe-delimited, syslog, Apache combined, nginx default, or any custom pattern). The format layer already ships three presets (apache-combined, nginx-default, syslog-rfc5424); they're not yet wired into iteration. Until then, non-JSON sources will trip the format-mismatch warning and probes will produce no findings.

Probes

Severity rollup, panics and fatals, HTTP status, latency (p50/p95/p99), heartbeat gap detection, process health, autoscaler events, database/external errors, Sentry events, plus ad-hoc keyword and regex matches. Each probe is config-toggleable; regex sets are config-overridable. See docs/PROBES.md for the full list, finding shapes, and how to add one.

Licence

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

paperbark-0.1.12.tar.gz (134.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

paperbark-0.1.12-py3-none-any.whl (100.0 kB view details)

Uploaded Python 3

File details

Details for the file paperbark-0.1.12.tar.gz.

File metadata

  • Download URL: paperbark-0.1.12.tar.gz
  • Upload date:
  • Size: 134.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for paperbark-0.1.12.tar.gz
Algorithm Hash digest
SHA256 1d9ba9b1605477ff40aa940095cb5e0a3f7a115b066fd53d719824a58d173e42
MD5 88f18880cd5c2495c739e5d4f3bb7752
BLAKE2b-256 8d54ef09f2b5b312b2aa1212f353bb3c7e0508e1e25f9237745806cbe78f1dec

See more details on using hashes here.

Provenance

The following attestation bundles were made for paperbark-0.1.12.tar.gz:

Publisher: publish.yml on Good-Native/paperbark

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file paperbark-0.1.12-py3-none-any.whl.

File metadata

  • Download URL: paperbark-0.1.12-py3-none-any.whl
  • Upload date:
  • Size: 100.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for paperbark-0.1.12-py3-none-any.whl
Algorithm Hash digest
SHA256 923394398c36dfca346812b8f2d2b239ba2f5f8097afd5ad19968dc6a87d262c
MD5 2a7b90b2ad396fd32edfcdc74e712de9
BLAKE2b-256 ac862c5b0fcf6254d75de77ffb832ba95137dfd0a4efedb42101def347391eb7

See more details on using hashes here.

Provenance

The following attestation bundles were made for paperbark-0.1.12-py3-none-any.whl:

Publisher: publish.yml on Good-Native/paperbark

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page