Skip to content
Interactive concept · Fictional business and sample data · Back to portfolio
Portfolio

Pulsegrid / Platform

Platform

Three parts: an agent that runs on each host, a columnar store, and a query layer that speaks SQL. This page describes what each one does and what it does not.

The agent

A single static binary, about 34MB, no runtime dependencies. It runs as a systemd unit or a DaemonSet and needs read access to /proc and the container socket.

RuntimeAuto-instrumentedMethod
Go 1.21+HTTP, gRPC, database/sqleBPF uprobes, no rebuild
Node 18+HTTP, Express, Fastify, pg, RedisLoader hook, no code change
Python 3.9+Django, Flask, FastAPI, psycopg, requestssitecustomize injection
Java 11+Servlet, Spring, JDBC, KafkaJVM agent, one flag
Ruby 3.0+Rails, Sidekiq, ActiveRecordGem, one require
.NET 6+ASP.NET Core, HttpClient, EF CoreCLR profiler
Anything elseVia OpenTelemetry OTLPPoint your exporter at the agent

Agent overhead measured on our own production fleet is 0.4% to 1.1% CPU and roughly 90MB resident, depending on trace volume.

Storage and retention

SignalResolutionSoloTeamScale
Metrics, raw10 second2 days15 days30 days
Metrics, rolled up1 minute7 days90 days13 months
Traces, sampledFull fidelity7 days30 days90 days
Traces, erroredAlways kept7 days90 days13 months
LogsFull text3 days30 days90 days
Deploy and event markersFull fidelity90 days13 monthsIndefinite

Retention is per signal, not a shared quota, and there is no ingest cap on any tier. Extended retention beyond 13 months is available on Scale at $0.02 per host per day.

Querying

Everything is stored in tables. The console is a SQL editor with autocomplete over your own schema, and the same tables are reachable over the Postgres wire protocol.

-- slowest endpoints in the last hour, p99 by route
SELECT route,
       count(*) AS n,
       quantile(0.99)(duration_ms) AS p99
FROM traces
WHERE service = 'checkout'
  AND ts > now() - interval '1 hour'
GROUP BY route
ORDER BY p99 DESC
LIMIT 20;

ClickHouse SQL. Standard SELECT, JOIN, CTEs, window functions and the ClickHouse aggregate functions including quantile, uniqExact and topK. Writes are not permitted through the query layer.

Yes. Use the ClickHouse datasource with the read-only credentials from Settings, Query access. Metabase, Superset and anything speaking the Postgres wire protocol also work.

No. There is a concurrency limit of 8 queries per organisation on Team and 32 on Scale, and a 60 second statement timeout. Beyond that, query as much as you like.

What Pulsegrid does not do

There is no browser SDK and no session replay. We cover the server side. If you need RUM, run it alongside from another vendor and correlate on trace ID, which we expose in the response headers.

No uptime probes from external locations. Most teams pair us with a cheap dedicated checker. We will accept the results as an event stream if you want them on the same timeline.

We alert, we do not run the on-call rota. Alerts go to PagerDuty, Opsgenie, Slack or a webhook and the rota lives there. We would rather integrate with the rota tool you already pay for.

Retention tops out at 13 months. If you need seven year retention for audit, export to your own object storage in Parquet, which we support on a schedule, and query it there.