doc/user/content/manage/monitor/self-managed/prometheus.md
{{< warning >}} The metrics scraped are unstable and may change across releases. {{< /warning >}}
This guide walks you through the steps required to monitor the performance and overall health of your Materialize instance using Prometheus and Grafana.
Ensure you have:
observability.enabled=true, observability.podMetrics.enabled=true, and prometheus.scrapeAnnotations.enabled=true{{< important >}} This guide assumes you have administrative access to your Kubernetes cluster and the necessary permissions to install Prometheus. {{< /important >}}
prometheus.yml)Download the Prometheus scrape configurations that we'll use to configure Prometheus to collect metrics from Materialize: {{% self-managed/step-download-prometheus-scrape-configs %}}
{{< note >}} This guide uses the prometheus-community Helm chart to install Prometheus. {{< /note >}}
Download the prometheus-community default chart values (values.yaml):
curl -O https://raw.githubusercontent.com/prometheus-community/helm-charts/refs/heads/main/charts/prometheus/values.yaml
Within values.yaml, replace serverFiles > prometheus.yml > scrape_configs with our scrape configurations (prometheus_scrape_configs.yml).
Install the operator with the updated values.yaml:
kubectl create namespace prometheus
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install --namespace prometheus prometheus prometheus-community/prometheus \
--values values.yaml
Install the Grafana helm chart following this guide.
Set up port forwarding to access the Grafana UI:
MZ_POD_GRAFANA=$(kubectl get pods -n monitoring -l app.kubernetes.io/name=grafana -o custom-columns="NAME:.metadata.name" --no-headers)
kubectl port-forward pod/$MZ_POD_GRAFANA 3000:3000 -n monitoring
{{< warning >}} The port forwarding method is for testing purposes only. For production environments, configure an ingress controller to securely expose the Grafana UI. {{< /warning >}}
Open the Grafana UI on http://localhost:3000 in a browser.
Add a Prometheus data source. In the Grafana UI, under Connection > Data sources,
http://<prometheus server name>.<namespace>.svc.cluster.local:<port>(e.g. http://prometheus-server.prometheus.svc.cluster.local:80).Download the following dashboards:
An overview of the state of different objects in your environment.
# environment_overview_dashboard.json
curl -O https://raw.githubusercontent.com/MaterializeInc/materialize/refs/heads/self-managed-docs/v25.2/doc/user/data/monitoring/grafana_dashboards/environment_overview_dashboard.json
An overview of how out of date objects in your environment are.
# freshness_overview_dashboard.json
curl -O https://raw.githubusercontent.com/MaterializeInc/materialize/refs/heads/self-managed-docs/v25.2/doc/user/data/monitoring/grafana_dashboards/freshness_overview_dashboard.json