Prometheus and Grafana dashboards and alerting

Pairing Prometheus with Grafana gives operations teams PromQL dashboards and alert routing on infrastructure they control. This page covers the data source setup, the alerting decision, and the points where teams usually stall.

On this page

How Prometheus and Grafana dashboards and alerting fit together

Grafana reads Prometheus through its HTTP query API, using PromQL, so the basic pairing needs no separate connector. The integration has three parts that you should design separately: the data source, the dashboards and the alerting. The data source is the connection record in Grafana that holds the Prometheus server address, authentication and access settings. Dashboards are collections of panels, and each panel runs a PromQL query against that data source. Alerting is where Grafana evaluates rules and sends notifications, and that is a separate decision from the alert rules Prometheus evaluates itself.

Prometheus stores its samples in a local time series database organized into two-hour blocks, and its default retention is 15 days, which you can set by time or size. Local storage is not clustered or replicated, so you should manage it like any other single-node database. This matters for dashboards. A panel showing last quarter's traffic or a yearly capacity trend reads whatever Prometheus still holds, so longer ranges depend on remote storage that receives data through remote write. Decide the retention window your teams need before you build dashboards, and confirm which panels will query beyond it.

Prometheus evaluates alert rules and sends firing alerts to Alertmanager, which handles grouping, inhibition and silences. Grafana can also evaluate rules against Prometheus and send notifications from its own alerting. Choose one path for each alert condition, because two systems notifying for the same condition produce duplicate pages. Grafana's high availability guidance notes that alerting needs additional configuration to avoid duplicate notifications when several Grafana servers run. Alertmanager can run as a cluster for high availability, and Prometheus should list each Alertmanager instance in its configuration so it can reach every one of them directly.

The same dashboards can later point at Thanos or Mimir when storage needs to scale out, which is the main reason to keep queries in standard PromQL. Before you rely on that path, confirm the exact compatibility details with each project and with Grafana's current documentation, including which query endpoints and features each one supports. Plan the Grafana side as well. Grafana stores its configuration in SQLite by default, but its installation guidance says SQLite does not scale for production, so production and high availability need MySQL or PostgreSQL. Provisioning files for data sources and dashboards keep that setup repeatable across environments.

What you need in place before connecting Grafana to Prometheus

Six prerequisites decide whether the Grafana connection is stable, secure and supportable. Pin the Prometheus and Grafana versions, move production configuration into a shared database, and design the network paths and load balancer first. Then secure transport with TLS and limit access through named accounts before you add the data source.

Prometheus and Grafana versions

Choose Prometheus 3.13 LTS, which is supported until July 31, 2027, or the current 3.15.0 line. Non-LTS minor releases generally stop receiving bug fixes six weeks after they ship, so pin one line and schedule its upgrades. For Grafana, select a 13.x release and confirm its patch level on the Grafana releases page before installation, since patch releases arrive often and fix security issues.

Production configuration database

Grafana keeps dashboards, users, data source settings and alert rule definitions in its configuration database. Use MySQL 8.0 or later, or PostgreSQL 12 or later, for production. SQLite is the default, but Grafana's installation documentation says it does not scale for production, and high availability requires a shared database. Provision backups and rehearse a restore before the first Grafana node starts.

Network paths to the Prometheus HTTP port

Grafana queries Prometheus over its HTTP port, so firewall rules and security groups must allow traffic from every Grafana node to that endpoint. Confirm the path across any segmentation, reverse proxies or cloud network controls in between. Also confirm that Prometheus can reach its scrape targets, because a Grafana panel is only as current as the scrapes behind it.

Load balancer for high availability

If you run Grafana in high availability, plan two or more active-active servers behind a load balancer, all sharing one MySQL or PostgreSQL database. Database-backed auth tokens let users reach any node. Decide where TLS terminates, define health checks, and confirm whether any feature needs session stickiness. Alerting needs extra configuration to avoid duplicate notifications, and Grafana Live has limitations in HA, so test both before go-live.

TLS certificates for both services

Prometheus supports TLS and client certificate authentication, with TLS 1.2 as the minimum version, and Grafana should serve its interface over HTTPS. Issue certificates from your internal certificate authority with names that match every hostname users and Grafana nodes will use. Define a renewal process before expiry. Basic authentication without TLS exposes credentials in cleartext, so never enable it over plain HTTP.

Named accounts for administrators and editors

Each administrator and dashboard editor needs a named account, and shared logins should be retired before go-live. Map Grafana roles to your access model. Prometheus admin APIs are disabled by default, so decide who may enable the admin API and lifecycle flags. Prometheus has no built-in single sign-on, so decide whether an authenticating reverse proxy will front its web UI and API. Confirm whether SAML and SCIM are available in your Grafana edition.

How to configure the Prometheus data source and first dashboards in Grafana

This sequence connects a Prometheus server to Grafana, checks each link with a query or a rendered panel, and ends with the data source and dashboard stored as files. The result is a Grafana instance that reads from your Prometheus, shows labeled dashboards, and rebuilds from version-controlled definitions on a fresh install.

  1. Install Prometheus and confirm queries

    The platform team installs Prometheus from release packages or a container image for a release line it intends to support, then writes a configuration file with at least one scrape job. Storage is local and single-node, with a default retention of 15 days, so confirm the retention and disk sizing your metrics volume needs before go-live. Start the server and open its web UI. The step is complete when the query up returns one series per configured target, with the value 1 for each target that is healthy.

  2. Install Grafana with a production database

    Install Grafana from the packages for your distribution, a Docker image, or a Helm chart if you run Kubernetes. Do not leave the default SQLite database in place for production. Create a dedicated database and account in MySQL 8.0 or later, or PostgreSQL 12 or later, then point Grafana at it in its configuration file. The step closes when you can sign in, create a test folder, restart the Grafana service, and find the folder and admin user still present.

  3. Add the Prometheus data source

    A Grafana administrator adds a Prometheus data source and sets its URL to the address of the Prometheus server, reachable from the Grafana network. Choose an authentication method. If you enable HTTP basic authentication, serve it over TLS, because basic authentication without TLS exposes credentials in cleartext. Where Prometheus uses TLS with client certificates, supply the CA and client certificate files and confirm the connection meets the TLS 1.2 minimum that Prometheus enforces. Select Save and test. The step is complete when the test reports that the data source is working.

  4. Run a test query in Explore

    Open Explore, select the new data source, and run up to list every target Prometheus scrapes. Then run a metric from one exporter, such as a node or application metric, and filter it by its job label. Compare the series count and label values with the Targets page in the Prometheus web UI. Differences usually come from a label dropped during relabeling, a target that is down, or Grafana pointing at a different Prometheus than you expect. The step is complete when the series in Explore match the targets and labels you expect.

  5. Build the first dashboard from PromQL

    Create a dashboard and add panels built on PromQL queries. Wrap counters in rate() over a range that suits your scrape interval, and use aggregation operators such as sum by to group series the way your team reads them. Add template variables for labels such as job and instance, populated from the label values of a metric like up, so one dashboard serves many targets. Limit each variable query to the values you plan to show. The step is complete when every panel renders data and changing a variable filters all panels.

  6. Confirm panels survive a Grafana restart

    Restart the Grafana service, then reload the dashboard. Confirm that the data source still tests successfully, the variables still populate, and each panel still renders its series. If a panel is empty after the restart, check that the dashboard references the data source it was built against, since a data source recreated under a different identifier will break saved panels. Record the Grafana and Prometheus versions you tested in your change log so the next upgrade check starts from a known state.

  7. Store data source and dashboard as provisioning files

    Export the dashboard as JSON and write the data source definition in YAML under the provisioning directory that Grafana reads at startup. Keep passwords and certificate contents out of these files and reference them through environment variables, which the provisioning format supports. Confirm the substitution syntax for your Grafana version in its provisioning documentation. Commit both files to version control and deploy them through your normal change process. The step is complete when a change committed to the repository appears after a restart without any manual edit in the UI.

  8. Test provisioning on a fresh install

    Build a clean Grafana instance from the same packages or image and mount the provisioning files without making manual changes. Start it, then confirm the data source appears, tests successfully, and the dashboard loads with its variables working. Check the startup logs for provisioning errors, since a malformed file can stop a resource from loading. The step is complete when the fresh instance reproduces the tested dashboard from files alone and you have a documented way to rebuild it.

How Prometheus labels, Grafana variables and access groups map to each other

This table shows how the objects a team touches in Prometheus and Grafana relate to each other, from scrape labels to dashboard variables to who can edit what. Read each row as a question to settle before building: which object holds the decision, and where it is defined. The main takeaway is that role models depend on the Grafana edition and login method, so confirm group mapping options before designing access.

ObjectWhere it is definedWhat it controlsWhat to confirm before building
Job and instance labelsPrometheus scrape configuration or service discoveryWhich targets are collected and how their series are identifiedLabel names are consistent across exporters and teams
Grafana template variablesDashboard settings, often populated by a label_values queryFilters that let one dashboard show any job or instanceVariable queries stay fast on high-cardinality label sets
Scrape targets as dashboard rowsDashboard layout, grouped by job or serviceWhich panels appear for each target group and how they repeatRepeat rows use a variable that matches the label used in queries
Grafana foldersGrafana folder structure, set by admins or provisioningWhere dashboards live and which permissions apply to a group of themFolder permissions map to how each owning team is organized
Grafana teamsGrafana team membershipOwnership of folders and dashboards for a group of usersTeam sync from an identity provider is limited to Enterprise and Grafana Cloud per Grafana's authentication docs
Identity provider groups to Grafana rolesLogin method configuration, such as generic OAuth, LDAP or auth proxyWhether a user receives Viewer, Editor or Admin rights at sign-inThe chosen login method supports role mapping on the open-source edition
Alert rules and labelsGrafana alerting rules or Prometheus rule filesRouting of notifications to contact points or Alertmanager receiversWho may edit rules when rules live in folders owned by different teams
Provisioned dashboards and data sourcesYAML or JSON provisioning files loaded at startupVersioned, reviewed definitions that override manual edits in the UIWhether your team will manage dashboards as code or by hand

Building dashboards on PromQL that survive a rebuild

A dashboard is only as durable as the PromQL behind its panels. When Grafana is rebuilt, reinstalled or moved to a new cluster, the panels should show the same meaning they did before, and that depends on query design more than on the Grafana configuration. The first check is the rate window. Functions such as rate() and increase() need a range vector long enough to contain several samples from each series. Compare the range in every query with the scrape interval set for its job in the Prometheus configuration, and keep the Grafana minimum interval consistent with both. A range shorter than the scrape interval produces gaps or empty panels that look like outages. Confirm the scrape intervals in your own environment before you fix any window.

Expensive queries should be moved into recording rules. A query that aggregates thousands of series across a long time range can be slow to render every time someone opens a dashboard. A recording rule evaluates that expression on a schedule and stores the result as a new series, so panels read a small precomputed result. Give recorded series a consistent name, such as the level:metric:operations convention in the Prometheus documentation, so readers can tell raw metrics from derived ones. Use the Grafana query inspector to find slow panels, then decide which expressions earn a recording rule. Recording rules live in Prometheus rule files, so they belong in version control with the dashboards that depend on them.

Panels break most often when a target is renamed or replaced. If a job label, instance name or service label changes, a panel filtering on the old value goes blank while the new series appears in a different panel. Series from the old name remain queryable for the retention period, which is 15 days by default and configurable by time or size, so a dashboard can show a confusing mix of old and new data during that window. Filter on stable labels where possible, and use relabeling to keep a consistent label set across deployments. Before a planned rename, list the panels and alerts that match on the affected label, then check each one after the change instead of waiting for someone to report an empty graph.

Grafana provisioning keeps the platform rebuildable. At startup, Grafana loads data sources, dashboards, plugins and alerting resources from YAML or JSON files placed in its provisioning directories, so the configuration can be restored from files rather than recreated by hand. Store those files in Git, review changes through the normal merge process, and deploy them with the same pipeline that deploys Grafana. Grafana also documents further as-code options, including Terraform and Git Sync, which suit teams that already manage infrastructure that way. Confirm which provisioning features your Grafana version supports and whether provisioned dashboards can still be edited in the UI. In a high availability setup, every node needs the same provisioning files.

Prometheus values reliability over precision, so dashboards should not be presented as exact billing or audit records. The Prometheus documentation says the system is not a good choice where 100% accuracy is required, such as per-request billing. Rate calculations, extrapolation over gaps and scrape timing all introduce small differences between what a panel shows and what actually happened. Label dashboards and their descriptions as operational views, and state the scrape interval and rate windows in the description so readers understand the resolution. If a team needs exact counts for charging or compliance evidence, that requirement should be handled by a system designed for it, and the decision should be recorded in the scope agreed before implementation.

How to secure the Prometheus and Grafana connection

Prometheus and Grafana expose metrics, queries and administrative controls over HTTP, so their transport, authentication and browser-facing settings need the same review as any production service. The cards below cover the Prometheus endpoints, the reverse proxy that adds single sign-on in front of them, the Grafana sign-in options and the Grafana hardening settings that protect the browser session.

Encrypt every connection with TLS

Prometheus supports TLS and client certificate authentication with TLS 1.2 as the minimum version. Basic authentication should only be used over TLS, because without it credentials travel in cleartext. Check that every browser, API client and scrape path to Prometheus and Grafana uses HTTPS, and confirm which TLS versions and certificate chains your own clients accept before you enforce the minimum.

Hash basic authentication passwords

Prometheus basic authentication accepts bcrypt-hashed passwords in its web configuration file, so plaintext passwords should never appear in the configuration or in version control. Decide who holds these credentials, how they rotate, and which service accounts, such as those used by Grafana or automation, need their own accounts. Record the owner and rotation process for each one.

Keep admin and lifecycle endpoints off

Prometheus disables its admin HTTP APIs by default. The admin API flag enables destructive operations such as deleting series, and the lifecycle flag enables reload and shutdown endpoints. Enable either only when a documented runbook needs it, and restrict who can reach those paths at the proxy or network layer. Review startup flags in your deployment manifests during each change.

Front Prometheus with an authenticating proxy

Prometheus has no built-in single sign-on, and its security model notes that it has no built-in CSRF protection on mutating endpoints. An authenticating reverse proxy in front of the web UI and API adds sign-in through your identity provider and filters requests that change state. Confirm which paths the proxy must allow for scrapes, health checks and Grafana queries, and test that the proxy does not break those flows.

Choose a Grafana sign-in method

Grafana's authentication docs list LDAP, generic OAuth, Entra ID, Okta, GitHub, GitLab, Google OAuth, auth proxy and JWT in all editions. SAML, team sync, active sync and SCIM provisioning are available only in Grafana Enterprise and Grafana Cloud. Decide which method matches your identity provider, whether group mapping is needed for role assignment, and whether you need SAML or SCIM, which would point to an Enterprise or Cloud license.

Harden Grafana browser settings

Grafana's security hardening guidance covers secure and SameSite cookies, a Content Security Policy, Trusted Types, hiding the version from unauthenticated users and requiring authentication for the metrics endpoint. Apply these settings in the Grafana configuration, then check the login page, the session cookie attributes and the metrics path from an unauthenticated browser. Note any dashboard panel plugins that conflict with the policy before you enforce it.

Verify domain settings against DNS rebinding

Grafana's domain verification setting helps guard against DNS rebinding, where an attacker's domain resolves to an internal address and lets a page reach Grafana through the victim's browser. Set the domain and root URL to the public names your users actually use, and confirm that requests to other host names are refused. Include this check in your change record so that a future hostname change does not silently weaken the setting.

Grafana alerting or Alertmanager: choosing where alert rules live

The first decision for the team is which system evaluates alert rules and sends notifications. Prometheus can evaluate alert rules itself and pass firing alerts to Alertmanager, which handles grouping, inhibition and silences before notifying anyone. Grafana can also define and evaluate alert rules against the Prometheus data source and send notifications through its own contact points and notification policies. Both paths can page people, but they do not offer the same routing model, so the choice shapes how every later alert is written, reviewed and silenced.

Operating the two options carries different availability work. Alertmanager is designed to run as a cluster through its --cluster flags, and Prometheus must be configured to send alerts to every Alertmanager instance rather than to a load balancer in front of them. Grafana high availability uses two or more active-active servers behind a load balancer sharing a MySQL or PostgreSQL database. The Grafana high availability documentation says alerting needs additional configuration to avoid duplicate notifications, and it lists limitations for Grafana Live in that setup. Teams choosing Grafana alerting should confirm these settings in their own environment before they rely on it for paging.

The team should write down which system owns each alert before building dashboards. A panel threshold, a Grafana alert rule and a PrometheusRule can all look similar on screen, yet each one can wake a different on-call engineer. A simple ownership register works well: for each alert, record the name, the evaluating system, the notification path, the silence owner and the runbook. Mixing both systems for the same signal is the most common way paging logic becomes split across two tools, with duplicate pages, silences that apply in one place but not the other, and no single view of what is firing.

Some organizations use Prometheus and Alertmanager for infrastructure and service paging, and reserve Grafana alerting for business or log-derived conditions that already live in another Grafana data source. That split can work, but only if the register states the boundary clearly. Teams should also check whether their existing on-call tool accepts Alertmanager webhooks or Grafana contact points directly, because that integration often decides which path is simpler to operate.

Ask the implementation partner, or the internal platform team, for a written recommendation covering the ownership register, the Alertmanager or Grafana high availability design, and the process for changing alert rules. Confirm the Grafana version and the Alertmanager release line you plan to run, and check their current documentation for clustering and notification behavior before finalizing the design.

Common failures when Grafana reads from Prometheus and how to fix them

This table lists the failures teams most often hit when Grafana queries Prometheus, with the cause, the fix and the check that confirms the cause. Read each row against your own environment before changing configuration. The main takeaway is that most failures trace to local retention, high availability topology, plaintext access or exposed exporters, and each one can be confirmed with a short check.

FailureCauseFixCheck that confirms the cause
Panels empty after a Prometheus restartLocal retention defaults to 15 days, and data older than that was never shipped to long-term storageSend samples with remote write to long-term storage and set local retention to match your query needsOpen the TSDB status page and compare the oldest stored sample with the panel time range
Dashboards break on long time rangesPanel queries reach past local retention, so no samples exist for the earlier part of the rangePoint the same dashboards at long-term storage such as Thanos or Mimir and align dashboard time ranges with itRun the panel's PromQL in the Prometheus expression browser over the same range and look for gaps before the retention boundary
Duplicate alert notificationsTwo active-active Grafana servers each evaluate alert rules and send their own notificationsApply the Grafana high availability alerting configuration so only one node sends notificationsCompare notification records on both Grafana servers for the same alert rule and firing time
Alertmanager drops alert stateA load balancer spreads Prometheus traffic across Alertmanager instances that do not share silences and notification stateRun Alertmanager as a cluster using its cluster flags and list every instance in the Prometheus alerting configurationCheck the Alertmanager status page for peer count and confirm Prometheus lists each instance by address
Basic auth credentials sent in cleartextBasic authentication is served over plain HTTP, so usernames and passwords cross the network unencryptedEnable TLS with TLS 1.2 as the minimum and store basic auth passwords as bcrypt hashesConfirm the Grafana data source URL and the Prometheus web configuration both use the https scheme
Grafana configuration stored in SQLite during rolloutSQLite is the default store, and Grafana documents that it does not scale for production or high availabilityProvision MySQL 8.0 or later or PostgreSQL 12 or later before go-live and migrate settings to itCheck the database type in the Grafana server configuration and the database section of the server settings
Exporters reachable by untrusted usersSNMP and Blackbox exporters take targets from URL parameters, so callers can make them send requests to arbitrary endpointsLimit exporter access to the Prometheus servers with network policy and authentication, and define allowed modules and targetsFrom an untrusted network, send a test request with an external target parameter and confirm it is refused
Grafana provisioning files silently fail at startupYAML or JSON provisioning files contain syntax errors or wrong paths that Grafana skips during loadingValidate each file against the provisioning format, correct paths and restart with startup logs openReview Grafana startup logs for provisioning messages and confirm each resource appears in the UI or API

Pointing the same dashboards at Thanos or Mimir as storage grows

The local Prometheus store is enough until its single node can no longer hold the retention, or survive the failures, your dashboards and audits require. The Prometheus storage documentation is direct about this: local storage is not clustered or replicated, so the server should be run like any other single-node database, with its disk capacity, backups and restore procedure treated as your responsibility. Default retention is 15 days, configurable by time or size, so a team that needs months of history or wants metrics to survive a host loss is usually at the point where external long-term storage makes sense. Remote write lets Prometheus send samples to that storage, and remote read lets Prometheus query data back from it. Decide which of these you need before you choose a product, because they change how much the local server keeps and how the query path is built.

The goal of the cutover is that Grafana users see no difference. Keep the Grafana Prometheus data source pointed at a stable name, such as a query front end or proxy address, and change only what sits behind it. Provision the data source and the dashboards as code so that the URL, the authentication settings and the dashboard JSON are reviewed in version control rather than edited by hand in the UI. Dashboards built on PromQL should not need rewriting, but the team must test them. Before cutover, run each important panel and alert expression against both the old and new endpoints over the same time range, and compare results for the PromQL functions in use, such as rate, histogram_quantile and aggregations with label grouping. Differences in staleness handling, range selection or rounding are common and should be understood before users notice them.

Verify label consistency before anything else. Remote storage keeps the series labels that arrive with each sample, so external labels, relabeling rules and target labels set on the original server must match what dashboards and alert rules expect. Check that job and instance values are identical, that any external labels used to identify a cluster or replica are set deliberately, and that dropped or renamed labels are not still referenced in queries. Verify retention separately on both sides: local retention on Prometheus, the retention policy of the long-term store, and any compaction or downsampling the chosen project applies. Confirm which window your audit and incident needs cover, and which store answers queries for that window. Also confirm where alert rules are evaluated. If rules run on the Prometheus server, Alertmanager receives alerts from there; if they run in a ruler or equivalent component of the long-term store, the evaluation source changes, and so may the timing and the labels attached to firing alerts. Only one place should evaluate each rule, or notifications will duplicate.

The specifics of Thanos and Mimir deployment are for your team to confirm against each project's current documentation. Component layout, object storage configuration, query and store gateways, compactor behavior, multi-tenancy settings, and supported remote write and query interfaces change between releases, so do not copy a configuration from an older example without checking it. Ask the implementation partner, or your own platform team, to write down which project and version was chosen, the reasons, and the sizing assumptions for ingestion rate and series count. Remote write adds load and a failure mode to the Prometheus server, so test what happens when the remote endpoint is slow or unavailable, including how much data is buffered and whether it is lost. The exact configuration values should come from the projects and be validated in a non-production copy of your data before any dashboard or alert is moved.

Plan the cutover as a reversible change. Run remote write in parallel for a period, compare the same panels and alerts across both stores, and keep the local server running until the long-term store has passed your verification list. Record the Grafana data source change, the Prometheus remote write settings, and the rule evaluation location in one change record so a rollback is a single known action. Involve the security owners as well: remote endpoints need TLS and authentication, and the storage bucket and query endpoints need access controls that match how your Grafana users are authorized. For cost, the software is open source, so spend comes from the infrastructure for ingestion, storage and query, from the people who build and operate the system, and from any vendor support you buy. Ask any partner for a written quote that separates one-time build work from recurring operation, and for the assumptions behind the storage and compute estimates.

Questions teams ask before connecting Prometheus dashboards and alerts

What does it cost to run Prometheus and Grafana yourself?

Prometheus has no license fee and no paid enterprise edition, so spend comes from four places: the servers or cloud capacity that run Prometheus and Grafana, metric storage, implementation work, and the staff who operate and upgrade the stack. Infrastructure and storage recur every month and grow with the number of scrape targets, the retention period and query load. Design and build are usually one-time costs. Grafana can also be self-hosted at no license cost, but it is priced separately from the Grafana Cloud service. When you request a quote, ask for implementation, infrastructure you provide and ongoing support as separate lines, and ask which items are one-time and which recur.

How long does a Prometheus and Grafana project take?

The duration depends on scope, so no single timeline applies to every estate. The main drivers are the number of data sources, the number of dashboards, the number of alert routes and receivers, and whether identity integration is included. Long-term storage and multi-team access add design and testing work. DeployOpen agrees scope, deliverables and timelines in writing before work starts, so the timeline follows from the scope you define. Ask any partner to list the data sources, dashboards and alert routes in scope, to name the identity provider and to state which environments will be tested before go-live.

Can our internal team set up Prometheus and Grafana alone?

Yes, one internal team can usually do it alone when the work covers a single cluster with few owners and a small set of dashboards and alerts. It becomes harder when several teams need different access, when single sign-on is added, and when long-term storage arrives at the same time. Grafana high availability needs two or more active servers and a shared MySQL or PostgreSQL database, and alerting needs extra configuration to avoid duplicate notifications. Assess your team's experience with each of these pieces. If two or more arrive in the same release, consider a short design review with an outside partner before the build starts.

What must we provide before a partner starts Prometheus work?

Before work starts, the partner needs access to the Prometheus and Grafana hosts or to the environments where they run, including the operating system accounts or Kubernetes access needed for changes. You should also provide the identity provider settings for single sign-on, a named owner who decides how alerts are routed to on-call teams and chat channels, and sample dashboards that show what your teams already use. Include the list of exporters and data sources, the retention period you expect, and any change windows. Confirm these items during scoping, because missing access is a common reason work stalls.

Is Grafana Cloud cheaper than running Grafana ourselves?

The answer depends on your usage and on what your team already runs, so compare total cost rather than the subscription price alone. The Grafana pricing page lists a free tier, a Pro tier that starts with a 19 US dollar monthly platform fee plus usage, and an Enterprise tier with a minimum commitment of 25,000 US dollars per year. Self-hosting shifts the cost to servers, storage, backups, upgrades and staff time. Ask both options to be priced against the same metrics volume, retention, user count and number of alert rules, and include the people time needed to operate each option.

Should Grafana or Alertmanager send our alert notifications?

Alertmanager is the component that Prometheus uses to group, inhibit and silence alerts, and it can run as a cluster for high availability. Prometheus should be configured with every Alertmanager instance as a target. Grafana also has its own alerting, and it needs additional configuration in high availability setups to avoid duplicate notifications. Choose one primary path for each alert type so that each alert has a single owner and a predictable route. Document which tool owns routing, silences and escalation, and test notifications from each receiver before you rely on them for on-call work.

Does Grafana support single sign-on with our identity provider?

Grafana supports several sign-on methods in all editions, including LDAP, generic OAuth, Entra ID, Okta, GitHub, GitLab, Google OAuth, auth proxy and JWT. SAML, team sync, active sync and SCIM provisioning are available only in Grafana Enterprise and Grafana Cloud, according to the Grafana authentication documentation. Prometheus has no built-in single sign-on, so it is normally protected with an authenticating reverse proxy in front of its web interface and API. Confirm which identity protocol your provider supports, whether you need group-based access, and whether automated user provisioning is required before you choose an edition.

How DeployOpen scopes, delivers and supports the Prometheus and Grafana build

DeployOpen plans the Grafana side of a Prometheus estate as a written, fixed-scope build inside infrastructure you control. The work covers the Prometheus data source, dashboards written in PromQL, the alerting path you choose, and any storage change needed as data grows.

How we scope

  • Inventory the Prometheus targets, exporters and dashboards your teams need before any build begins.
  • Decide whether Grafana alerting or Alertmanager owns notification routing, and record why.
  • Agree in writing which dashboards, alert rules and data sources are in scope and which are not.

How we build

  • Provision Grafana with a production database such as MySQL or PostgreSQL, not SQLite, from the start.
  • Write and review PromQL queries, then test dashboard panels against real series from your environment.
  • Define data sources, dashboards and alert rules as provisioned files so they can be reviewed and versioned.

How we hand over

  • Document each alert rule with its purpose, owner, severity and the runbook a responder should follow.
  • Walk your operators through dashboard layout, alert routing, silences and how to change configuration safely.
  • Deliver version notes covering Prometheus and Grafana releases in use and the upgrade steps for each.

How we support

  • Offer ongoing support, upgrades and alert tuning as a retainer when your team wants continued help.
  • Plan Grafana upgrades around its patch and minor release cadence and test dashboards before each change.
  • Review alert noise and dashboard use periodically, and confirm with your team which changes need approval.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.