PulseAgent

One Rust binary. Every collection source.

PulseAgent runs as a systemd unit, a Windows service, a Helm DaemonSet, a Lambda extension layer, a Cloud Run sidecar — and ships metrics, logs and traces over a single bearer token. Sources and processors are configured in plain TOML. ~6 MiB static binary, ~30 MiB RSS, <1% CPU on a typical host.

Install & configure → GitHub

Sources

All sources are independently enabled, all flow into the same batch + processor pipeline.

host_metrics

CPU, memory, disk, network via sysinfo. Per-disk and per-NIC labels. Configurable poll interval. Works on Linux, macOS, Windows.

docker

Container log streaming via the Docker API. com.pulseboard.* labels carried as metric labels. Auto-discovery of new containers.

kubernetes_pods

Pod log scraping with namespace and label-selector filters. CRI log format (universal across COS, Ubuntu, Windows containers). Field selectors for noisy namespaces.

journald

systemd journal tailing on Linux. Per-unit filtering, priority mapping, native binary cursor for resumption.

windows_event_log

Application, System and Security channels. XPath filter expressions supported. Auto-installs an event-log subscription.

prom_scrape

Arbitrary /metrics endpoints with configurable interval and per-target labels. TLS skip-verify available for self-signed dev targets.

otlp_receiver

Loopback OTLP/HTTP receiver on 4318. Your application emits traces locally; PulseAgent forwards them to the edge over your single bearer token.

file_logs

Tail arbitrary log files with glob patterns. Persistent inode-based cursor. Configurable rotation handling.

Processors

batch

Time + size triggers, with per-source overrides. Keeps your edge from drowning in 1-event-per-call traffic.

relabel

Add, drop or rename labels with regex match + replacement. Same model as Prometheus' relabel rules.

redact_pii

Regex-based PII scrubbing before bytes leave the host. Defaults catch JWTs, card numbers, email addresses; extend with custom patterns.

cardinality_guard

Drop series exceeding a configurable per-label-value cap. Pairs with the edge-side cardinality killer for defence in depth.

transform

Arithmetic transforms on metric values — unit conversion, percentage normalisation, smoothing.

Targets

PulseAgent supports any number of [[target]] entries. Useful for shipping the same telemetry to staging-and-prod, or for splitting metrics to PulseBoard and traces to a separate sink.

# /etc/pulseagent/agent.toml
[sources.host_metrics]

[sources.docker]
collect_logs = true

[sources.kubernetes_pods]
namespaces = ["default", "payments", "checkout"]

[sources.otlp_receiver]
listen = "127.0.0.1:4318"
forward_traces = true

[processors.redact_pii]
patterns = ["JWT", "CARD16", "EMAIL"]

[processors.cardinality_guard]
max_values_per_label = 1000

[[target]]
url = "https://your-edge"
token_env = "PULSE_TOKEN"

Install

Linux (systemd)

curl -sSfL https://pulseboard.dev/install.sh | sh
sudo systemctl enable --now pulseagent
sudo journalctl -u pulseagent -f

Kubernetes (Helm)

helm repo add pulseboard https://charts.pulseboard.dev
helm install pulseagent pulseboard/pulseagent \
  --set target.url=https://your-edge \
  --set target.token=$PB_KEY \
  --set sources.kubernetes_pods.enabled=true

Windows

iwr -useb https://pulseboard.dev/install.ps1 | iex
Start-Service pulseagent
Get-Content C:\ProgramData\pulseagent\log -Tail 20 -Wait

AWS Lambda (extension layer)

aws lambda update-function-configuration \
  --function-name my-fn \
  --layers $PULSE_EXTENSION_LAYER_ARN \
  --environment "Variables={PULSE_URL=...,PULSE_KEY=...}"