mAPIng
MONITORED API · NG
Sign in Start free →
ZERO-CONFIG · GO-SPECIALIZED

RED metrics for every Go endpoint in the time it takes to set one env var.

Rate, errors, and latency percentiles on a hosted dashboard — no Prometheus, no Grafana, no YAML. One middleware call, and your service reports.

Get your ingest key → See the 3 lines

Free tier · no card · absent key = no-op, safe to ship

main.go
// 1 · import the client + Gin adapter
maping "github.com/arhuman/maping/client"
mgin   "github.com/arhuman/maping/client/gin"

// 2 · record + mount the middleware
rec := maping.NewRecorder(maping.WithService("my-api"))
r.Use(mgin.MiddlewareWithRecorder(rec))
3 · THE ONLY REQUIRED INPUT
export MAPING_KEY=mk_live_…
live · flush ~10s
5m 1h 24h
TOTAL TRAFFIC
12.4k req/s
REQUESTS (1H)
44.6M
ERROR RATE
0.42%
WORST p99
210 ms
SERVICERATEERR%p99
checkout-api 3.1k 0.18% 88 ms
payments-api 2.4k 2.10% 142 ms
catalog-api 4.9k 0.05% 61 ms
auth-api 1.6k 5.30% 640 ms

mAPI-ng targets the onboarding and operational cost of the OTel + Prometheus + Grafana stack — not its flexibility. It gives you the three signals that matter for every HTTP endpoint, and nothing to operate.

TWO PILLARS

Built on simplicity and performance

Simplicity

One required input: MAPING_KEY. Service name is inferred from the binary, instance from the hostname, flush timing and sketch params from defaults. An absent key makes the middleware a no-op — adding mAPI-ng is always safe, and activation is decoupled from the code change.

3 lines to instrument no YAML no agents

Performance

The client aggregates per-endpoint metrics in-process into a DDSketch before sending. The server stores compact Summaries in ClickHouse and rolls them up through 1-minute, 1-hour and 1-day tiers. More data ingested per second, less disk used, faster queries than raw-event pipelines.

DDSketch latency ClickHouse rollups ~77× less disk
QUICKSTART

From zero to RED metrics in three steps

1
Install
go get github.com/arhuman/maping/client
go get github.com/arhuman/maping/client/gin

Core client has no web-framework deps. The Gin adapter is a separate module, so it never leaks into your binary unless you use it.

2
Instrument
rec := maping.NewRecorder(
  maping.WithService("my-api"))
r.Use(mgin.MiddlewareWithRecorder(rec))

Mount it above gin.Recovery(). Service and instance are inferred — no further wiring.

3
Set the key
export MAPING_KEY=mk_live_…

The only required input. It carries both the secret and the collector endpoint. Absent = no-op.

Start free — get your ingest key →