Documentation
Pulse
Compact time-series storage for application metrics.
Pulse ingests metric points over HTTP and stores them in a compact columnar format. Recent points stay at full resolution while older ranges are downsampled automatically, so long retention doesn't blow up disk.
Metrics are identified by a name and tags. Range queries select by name, tag, and time window, and return points at a resolution that matches the window.
#Installation
Pulse ships as one static binary. Place it on your host and start it:
# download and start $ curl -sSL get.qjtesla.duckdns.org/install | sh $ pulse serve --data /var/lib/pulse → listening on :8400 · api ready
By default Pulse binds to 127.0.0.1:8400. Put it behind your own reverse proxy to expose it over TLS.
#Quickstart
# push a metric point $ curl -X POST :8400/v1/ingest \ -d 'cpu,host=web 0.42' → ok # query a range $ curl ':8400/v1/query?m=cpu&since=1h' {"points":[[169..,0.42]]}
#Configuration
Configure with flags, environment variables, or a small YAML file. Flags take precedence.
# pulse.yaml
data: /var/lib/pulse
listen: 127.0.0.1:8400
log: info
retention:
raw: 7d
rollup: 365ddata— directory where series data is stored.listen— address the HTTP interface binds to.retention.raw— how long full-resolution points are kept.
#API reference
Every route lives under /v1. Requests without a valid token return 401.
| Method & path | Description |
|---|---|
POST /v1/ingest | Push one or more metric points. |
GET /v1/query | Query a series over a time range. |
GET /v1/series | List known series and tags. |
DELETE /v1/series/{name} | Drop a series. |
GET /health | Liveness probe. Returns 200 when ready. |
#CLI
The pulse binary is both the server and the client.
| Command | Description |
|---|---|
pulse serve | Start the server. |
pulse query <metric> | Query a series. |
pulse series | List series. |
pulse status | Show ingest rate and disk usage. |