Starburst is a powerful distributed SQL engine that allows teams to query data across multiple sources. However, when it comes to monitoring Starburst clusters, there are some limitations:

We manage 50+ Starburst clusters running across multiple environments (OpenShift, Kubernetes, Linux).

Manually going into the Starburst UI or CLI to run queries and check metrics was becoming too complex.

That’s why we Come up a solution using:


Why Native Starburst Metrics Are Limited

Out of the box, Starburst exposes basic system metrics:

But for deeper monitoring — you need:

Starburst does not expose all of these metrics directly in the UI or API. This is why we need an additional metrics pipeline.


Solution Architecture

To fully monitor Starburst, we built this architecture:

+---------------------+    JMX Exporter    +---------------+
| Starburst Cluster 1 |  --> Port 8081 -->  | Prometheus    |
+---------------------+                   +---------------+

+---------------------+    JMX Exporter    +---------------+
| Starburst Cluster N |  --> Port 8081 -->  | Prometheus    |
+---------------------+                   +---------------+

                Prometheus --> Grafana --> Dashboards / Alerts

                + Grafana Trino Plugin --> SQL-based dashboards

Components:


Why Use Grafana Trino Plugin?

The Grafana Trino Plugin is extremely useful for Starburst monitoring because:

Without this plugin, you would need to:

With Grafana Trino Plugin:


Grafana Trino Plugin - Overview

The Trino datasource plugin allows you to query and visualize Trino (and Starburst) data inside Grafana.

Installation

Run Grafana with the plugin using Docker:

docker run -d -p 3000:3000 \
  -v "$(pwd):/var/lib/grafana/plugins/trino" \
  -e "GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=trino-datasource" \
  --name=grafana \
  grafana/grafana-oss

Features

Macros Supported

Example Query Using Macros

SELECT
  atimestamp AS time,
  metric_value AS value
FROM starburst_metrics_table
WHERE $__timeFilter(atimestamp) AND cluster_name IN($cluster)
ORDER BY atimestamp ASC

How To Set It Up

1. Enable JMX Exporter in Starburst

Configure JMX agent in your Starburst deployment:

start.args=-javaagent:/opt/starburst/jmx_prometheus_javaagent.jar=8081:/opt/starburst/jmx_exporter_config.yaml

2. Configure Prometheus

Add all your Starburst clusters:

- job_name: 'starburst'
  static_configs:
    - targets: ['starburst-cluster-1:8081', 'starburst-cluster-2:8081']

3. Install Grafana Trino Plugin

4. Build Dashboards

SELECT state, count(*) FROM system.runtime.queries GROUP BY state

Benefits


Limitations and Tips


Conclusion

If you want full Starburst monitoring, this is the best architecture:

  1. Enable JMX Exporter → Prometheus → Grafana
  2. Use Grafana Trino Plugin → SQL dashboards → live queries
  3. Monitor Multiple clusters from one place
  4. Add alerts, trends, historical analysis
  5. Share dashboards with teams

This is now my preferred way of managing Starburst monitoring in large environments.


Final Architecture Summary

Starburst --> JMX Exporter --> Prometheus --> Grafana Panels + Trino Plugin SQL Queries --> Slack / Alerts / Visual Dashboards