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.
All sources are independently enabled, all flow into the same batch + processor pipeline.
CPU, memory, disk, network via sysinfo. Per-disk and per-NIC labels. Configurable poll interval. Works on Linux, macOS, Windows.
Container log streaming via the Docker API. com.pulseboard.* labels carried as metric labels. Auto-discovery of new containers.
Pod log scraping with namespace and label-selector filters. CRI log format (universal across COS, Ubuntu, Windows containers). Field selectors for noisy namespaces.
systemd journal tailing on Linux. Per-unit filtering, priority mapping, native binary cursor for resumption.
Application, System and Security channels. XPath filter expressions supported. Auto-installs an event-log subscription.
Arbitrary /metrics endpoints with configurable interval and per-target labels. TLS skip-verify available for self-signed dev targets.
Loopback OTLP/HTTP receiver on 4318. Your application emits traces locally; PulseAgent forwards them to the edge over your single bearer token.
Tail arbitrary log files with glob patterns. Persistent inode-based cursor. Configurable rotation handling.
Time + size triggers, with per-source overrides. Keeps your edge from drowning in 1-event-per-call traffic.
Add, drop or rename labels with regex match + replacement. Same model as Prometheus' relabel rules.
Regex-based PII scrubbing before bytes leave the host. Defaults catch JWTs, card numbers, email addresses; extend with custom patterns.
Drop series exceeding a configurable per-label-value cap. Pairs with the edge-side cardinality killer for defence in depth.
Arithmetic transforms on metric values — unit conversion, percentage normalisation, smoothing.
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"
curl -sSfL https://pulseboard.dev/install.sh | sh
sudo systemctl enable --now pulseagent
sudo journalctl -u pulseagent -f
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
iwr -useb https://pulseboard.dev/install.ps1 | iex
Start-Service pulseagent
Get-Content C:\ProgramData\pulseagent\log -Tail 20 -Wait
aws lambda update-function-configuration \
--function-name my-fn \
--layers $PULSE_EXTENSION_LAYER_ARN \
--environment "Variables={PULSE_URL=...,PULSE_KEY=...}"