Skip to main content
Your cluster’s Pinot metrics are available in Grafana, through the Prometheus data source. This page explains how those metric names are constructed — so you can find the one you need rather than guess — and lists the metrics that matter most, grouped by what you would be investigating.
A metric that has never been recorded does not exist. If no value has been published — a table that has never been queried, a task type that has never run — the metric is absent rather than present with a zero. An empty chart can mean “nothing happened,” not “the metric is wrong.”

Naming convention

Metric names follow a consistent shape:
So a real-time ingestion delay gauge on a server becomes pinot_server_realtimeIngestionDelayMs_Value, and a broker query counter becomes pinot_broker_queries_Count. A few metrics do not follow the pattern. RocksDB metrics, used by off-heap upsert, appear as pinot_server_rocksdb_ticker_<name> and pinot_server_rocksdb_histogram_<name>_<stat>. JVM metrics such as jvm_gc_collection_seconds_sum and jvm_threads_state keep their standard JVM names and carry a component label instead of a pinot_ prefix.

Suffixes

Not every statistic is available for every metric. If a suffix such as _Mean or _FifteenMinuteRate returns nothing, use one from the table above instead — _50thPercentile for a typical value, or a rate over _Count for throughput. Confirm what a metric actually offers by running the bare name in Explore and reading the series that come back.

Labels

Metrics are labelled so you can slice them without name explosion: Some metrics also carry pod-level labels such as pod or kubernetes_pod_name. These identify the component instance rather than a table, so resource questions (“which server is hot?”) are answered by grouping on those, and workload questions (“which table is slow?”) by grouping on table.
The table label always carries the type suffix. table="orders_REALTIME" and table="orders_OFFLINE" are separate series for a hybrid table, so a per-table chart of a hybrid table needs both, or a table=~"orders_.*" matcher.

Metrics worth watching

These are the metrics behind the Grafana dashboards. They are the ones to reach for first; they are not the complete set.

Real-time ingestion

Queries

For per-query rather than aggregate analysis, use system_query_log — metrics tell you the shape of the problem, the query log tells you which query.

Upserts and dedup

Minion tasks and batch ingestion

Cluster, storage, and capacity

Finding a metric that is not listed here

The lists above are curated, not exhaustive — Pinot exports far more than this. To find something specific:
1

Browse in Grafana Explore

Open Grafana, choose Explore, and select the Prometheus data source. Type pinot_server_ in the metric field and the metric browser will complete against everything currently present in your cluster. This is the fastest way to check whether a metric exists at all.
2

Search by fragment

Metric names are camelCase inside a snake_case wrapper, so search on a distinctive fragment — Upsert, Ingestion, Segment — rather than a whole name. Prometheus’s metric browser matches on substring.
3

Check the labels before charting

Run the bare metric name first and look at the label set on the returned series. Whether a metric is per-table, per-partition, or per-pod determines whether you need sum by (table) or avg by (pod) — and getting this wrong is the most common cause of a chart that looks alarming and means nothing.
4

Copy from an existing panel

Every panel on the built-in dashboards exposes its query. Open the panel menu, choose Explore, and you get a working query with the right labels and aggregation to modify.