Configurable cross-source log capture, search, and analysis CLI.
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: v0.1.1 released to PyPI. The probe, format, source (flyctl), iteration, aggregate, cursor-filter, search, dispatcher, and analyse layers are all wired up;
paperbark monitorruns end to end on a configurable cadence with arich.liveticker. 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
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.
# 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
# search across captured runs
paperbark search --keyword "panic"
# re-run analysis over an existing run
paperbark analyse --run latest
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) |
stub (interface only, post-v1) |
Kubernetes (kubectl logs) |
stub (interface only, post-v1) |
| AWS CloudWatch | stub (interface only, post-v1) |
| Plain files | stub (interface only, post-v1) |
| stdin | stub (interface only, post-v1) |
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file paperbark-0.1.5.tar.gz.
File metadata
- Download URL: paperbark-0.1.5.tar.gz
- Upload date:
- Size: 116.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
907d7d3de6aaeedbf23d20aebb2b964a327e46c641a2078454048f95901d3dcb
|
|
| MD5 |
0c81296a33d5111cc49a7fbbe63ec1ee
|
|
| BLAKE2b-256 |
7c9d8e5b3e1e965e7a70751d650ea4a450bc7ee3ca4f3dee2c966d2824b74421
|
Provenance
The following attestation bundles were made for paperbark-0.1.5.tar.gz:
Publisher:
publish.yml on Good-Native/paperbark
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
paperbark-0.1.5.tar.gz -
Subject digest:
907d7d3de6aaeedbf23d20aebb2b964a327e46c641a2078454048f95901d3dcb - Sigstore transparency entry: 1449616230
- Sigstore integration time:
-
Permalink:
Good-Native/paperbark@f067947fb99c418760298000156d7d51e4548334 -
Branch / Tag:
refs/tags/v0.1.5 - Owner: https://github.com/Good-Native
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f067947fb99c418760298000156d7d51e4548334 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file paperbark-0.1.5-py3-none-any.whl.
File metadata
- Download URL: paperbark-0.1.5-py3-none-any.whl
- Upload date:
- Size: 87.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9058bc50bb34d6f66c3ec3cb556df9c174c66ab987a046183768ceb1d49b153
|
|
| MD5 |
b18550d9359d9cda0d8fa4f028b7c9d2
|
|
| BLAKE2b-256 |
f982b858a4573ea52e1cd6023f51550ab1c047168a52e9ae661f14ccd2610dfe
|
Provenance
The following attestation bundles were made for paperbark-0.1.5-py3-none-any.whl:
Publisher:
publish.yml on Good-Native/paperbark
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
paperbark-0.1.5-py3-none-any.whl -
Subject digest:
d9058bc50bb34d6f66c3ec3cb556df9c174c66ab987a046183768ceb1d49b153 - Sigstore transparency entry: 1449616238
- Sigstore integration time:
-
Permalink:
Good-Native/paperbark@f067947fb99c418760298000156d7d51e4548334 -
Branch / Tag:
refs/tags/v0.1.5 - Owner: https://github.com/Good-Native
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f067947fb99c418760298000156d7d51e4548334 -
Trigger Event:
workflow_dispatch
-
Statement type: