Skip to content
Novus Examples
prom299.8 KB

Prometheus Exposition — 2,000-Series Cardinality Explosion (prom)

A single metric family blown up to 2,000 series by two unbounded labels — customer_id and session_id — which is the most common way a metrics bill and a TSDB both fall over. A load fixture for scrape parsing and a worked example for cardinality-limit rules.

Preview — first 50 linesprom
# HELP api_request_duration_seconds_count Request counts labelled per customer and session.
# TYPE api_request_duration_seconds_count counter
# NOTE: this file is a cardinality-explosion fixture — customer_id and session_id are
# unbounded labels, which is exactly the modelling mistake it exists to reproduce.
api_request_duration_seconds_count{service="checkout-api",route="/api/checkout",customer_id="cust-000000",session_id="sess-000000",region="eu-west-1"} 390
api_request_duration_seconds_count{service="checkout-api",route="/api/cart",customer_id="cust-000001",session_id="sess-007919",region="eu-central-1"} 57
api_request_duration_seconds_count{service="checkout-api",route="/api/catalog",customer_id="cust-000002",session_id="sess-015838",region="us-east-1"} 250
api_request_duration_seconds_count{service="checkout-api",route="/api/orders",customer_id="cust-000003",session_id="sess-023757",region="eu-west-1"} 370
api_request_duration_seconds_count{service="checkout-api",route="/healthz",customer_id="cust-000004",session_id="sess-031676",region="eu-central-1"} 28
api_request_duration_seconds_count{service="checkout-api",route="/api/checkout",customer_id="cust-000005",session_id="sess-039595",region="us-east-1"} 297
api_request_duration_seconds_count{service="checkout-api",route="/api/cart",customer_id="cust-000006",session_id="sess-047514",region="eu-west-1"} 62
api_request_duration_seconds_count{service="checkout-api",route="/api/catalog",customer_id="cust-000007",session_id="sess-055433",region="eu-central-1"} 333
api_request_duration_seconds_count{service="checkout-api",route="/api/orders",customer_id="cust-000008",session_id="sess-063352",region="us-east-1"} 275
api_request_duration_seconds_count{service="checkout-api",route="/healthz",customer_id="cust-000009",session_id="sess-071271",region="eu-west-1"} 377
api_request_duration_seconds_count{service="checkout-api",route="/api/checkout",customer_id="cust-000010",session_id="sess-079190",region="eu-central-1"} 305
api_request_duration_seconds_count{service="checkout-api",route="/api/cart",customer_id="cust-000011",session_id="sess-087109",region="us-east-1"} 292
api_request_duration_seconds_count{service="checkout-api",route="/api/catalog",customer_id="cust-000012",session_id="sess-095028",region="eu-west-1"} 284
api_request_duration_seconds_count{service="checkout-api",route="/api/orders",customer_id="cust-000013",session_id="sess-102947",region="eu-central-1"} 237
api_request_duration_seconds_count{service="checkout-api",route="/healthz",customer_id="cust-000014",session_id="sess-110866",region="us-east-1"} 215
api_request_duration_seconds_count{service="checkout-api",route="/api/checkout",customer_id="cust-000015",session_id="sess-118785",region="eu-west-1"} 362
api_request_duration_seconds_count{service="checkout-api",route="/api/cart",customer_id="cust-000016",session_id="sess-126704",region="eu-central-1"} 19
api_request_duration_seconds_count{service="checkout-api",route="/api/catalog",customer_id="cust-000017",session_id="sess-134623",region="us-east-1"} 117
api_request_duration_seconds_count{service="checkout-api",route="/api/orders",customer_id="cust-000018",session_id="sess-142542",region="eu-west-1"} 55
api_request_duration_seconds_count{service="checkout-api",route="/healthz",customer_id="cust-000019",session_id="sess-150461",region="eu-central-1"} 46
api_request_duration_seconds_count{service="checkout-api",route="/api/checkout",customer_id="cust-000020",session_id="sess-158380",region="us-east-1"} 204
api_request_duration_seconds_count{service="checkout-api",route="/api/cart",customer_id="cust-000021",session_id="sess-166299",region="eu-west-1"} 389
api_request_duration_seconds_count{service="checkout-api",route="/api/catalog",customer_id="cust-000022",session_id="sess-174218",region="eu-central-1"} 348
api_request_duration_seconds_count{service="checkout-api",route="/api/orders",customer_id="cust-000023",session_id="sess-182137",region="us-east-1"} 347
api_request_duration_seconds_count{service="checkout-api",route="/healthz",customer_id="cust-000024",session_id="sess-190056",region="eu-west-1"} 34
api_request_duration_seconds_count{service="checkout-api",route="/api/checkout",customer_id="cust-000025",session_id="sess-197975",region="eu-central-1"} 68
api_request_duration_seconds_count{service="checkout-api",route="/api/cart",customer_id="cust-000026",session_id="sess-205894",region="us-east-1"} 181
api_request_duration_seconds_count{service="checkout-api",route="/api/catalog",customer_id="cust-000027",session_id="sess-213813",region="eu-west-1"} 215
api_request_duration_seconds_count{service="checkout-api",route="/api/orders",customer_id="cust-000028",session_id="sess-221732",region="eu-central-1"} 143
api_request_duration_seconds_count{service="checkout-api",route="/healthz",customer_id="cust-000029",session_id="sess-229651",region="us-east-1"} 395
api_request_duration_seconds_count{service="checkout-api",route="/api/checkout",customer_id="cust-000030",session_id="sess-237570",region="eu-west-1"} 14
api_request_duration_seconds_count{service="checkout-api",route="/api/cart",customer_id="cust-000031",session_id="sess-245489",region="eu-central-1"} 4
api_request_duration_seconds_count{service="checkout-api",route="/api/catalog",customer_id="cust-000032",session_id="sess-253408",region="us-east-1"} 59
api_request_duration_seconds_count{service="checkout-api",route="/api/orders",customer_id="cust-000033",session_id="sess-261327",region="eu-west-1"} 8
api_request_duration_seconds_count{service="checkout-api",route="/healthz",customer_id="cust-000034",session_id="sess-269246",region="eu-central-1"} 282
api_request_duration_seconds_count{service="checkout-api",route="/api/checkout",customer_id="cust-000035",session_id="sess-277165",region="us-east-1"} 309
api_request_duration_seconds_count{service="checkout-api",route="/api/cart",customer_id="cust-000036",session_id="sess-285084",region="eu-west-1"} 98
api_request_duration_seconds_count{service="checkout-api",route="/api/catalog",customer_id="cust-000037",session_id="sess-293003",region="eu-central-1"} 41
api_request_duration_seconds_count{service="checkout-api",route="/api/orders",customer_id="cust-000038",session_id="sess-300922",region="us-east-1"} 144
api_request_duration_seconds_count{service="checkout-api",route="/healthz",customer_id="cust-000039",session_id="sess-308841",region="eu-west-1"} 109
api_request_duration_seconds_count{service="checkout-api",route="/api/checkout",customer_id="cust-000040",session_id="sess-316760",region="eu-central-1"} 46
api_request_duration_seconds_count{service="checkout-api",route="/api/cart",customer_id="cust-000041",session_id="sess-324679",region="us-east-1"} 234
api_request_duration_seconds_count{service="checkout-api",route="/api/catalog",customer_id="cust-000042",session_id="sess-332598",region="eu-west-1"} 7
api_request_duration_seconds_count{service="checkout-api",route="/api/orders",customer_id="cust-000043",session_id="sess-340517",region="eu-central-1"} 69
api_request_duration_seconds_count{service="checkout-api",route="/healthz",customer_id="cust-000044",session_id="sess-348436",region="us-east-1"} 78
api_request_duration_seconds_count{service="checkout-api",route="/api/checkout",customer_id="cust-000045",session_id="sess-356355",region="eu-west-1"} 315
430 lines total — download for the full file.

Specifications

Series
2000
Families
1
Unbounded Labels
2
Labels Per Series
5
Distinct Customer Ids
2000
Seed
7301
Modelling Mistake
customer_id and session_id used as labels

Testing contract

Expected to pass
Scenario
Scrape the file through a cardinality limiter or relabelling ruleset.
Expected result
2,000 series are counted from one family, and a limiter configured below that threshold drops or aggregates the excess instead of accepting all of them.

What is a .prom file?

A .prom file holds metrics in the Prometheus text exposition format, the same body a `/metrics` endpoint returns. Each metric family is introduced by `# HELP` and `# TYPE` comments and followed by one sample per line: a metric name, an optional brace-delimited label set, a value, and an optional millisecond timestamp. Counters, gauges, histograms (with `_bucket`, `_sum`, `_count` series and a `+Inf` bucket), and summaries with quantile labels all use this one grammar.

How to use this file

Use an example .prom file to test exposition-format parsers, scrapers, and the node_exporter textfile collector — checking label escaping, histogram bucket ordering and cumulative counts, and the handling of `NaN` and `+Inf` values.

How to use this file for testing

“Prometheus Exposition — 2,000-Series Cardinality Explosion (prom)” is a deterministic Novus Examples fixture for Observability, Time-series data, Performance testing. Structured and plain-text telemetry with known timestamps, levels, request identifiers, and error states for testing log ingestion, correlation, dashboards, and alert pipelines.

Documented properties for this file: seed 7301. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.

Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.

Telemetry fixtures use fixed trace IDs, span IDs, and timestamps so ingestion is reproducible run to run. Point your collector, parser, or query layer at the file and assert the documented span tree, metric families, or severity mix; service and host names are invented.

Generated by generation/observability.py. Free for any use, no attribution required — license.