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: 365d

#API reference

Every route lives under /v1. Requests without a valid token return 401.

Method & pathDescription
POST /v1/ingestPush one or more metric points.
GET /v1/queryQuery a series over a time range.
GET /v1/seriesList known series and tags.
DELETE /v1/series/{name}Drop a series.
GET /healthLiveness probe. Returns 200 when ready.

#CLI

The pulse binary is both the server and the client.

CommandDescription
pulse serveStart the server.
pulse query <metric>Query a series.
pulse seriesList series.
pulse statusShow ingest rate and disk usage.