Nextcloud monitoring with Prometheus

Nextcloud 33 added an OpenMetrics endpoint that Prometheus can scrape. This page covers how to connect it, expose it safely, and choose the server, database and cache signals worth alerting on.

On this page

Nextcloud monitoring with Prometheus starts with the metrics endpoint

Prometheus pulls metrics from the OpenMetrics endpoint added in Nextcloud 33, and Grafana and Alertmanager turn those samples into dashboards and alert notifications. Without this layer, the operations team usually learns about a stalled PHP worker pool, a slow database or a failing cache when users report it. The endpoint is the foundation for the rest of this work. If it is exposed incorrectly, the scrape fails, and if it is reachable by anyone on the network, it can reveal details about the server. Plan the endpoint first, then the scrape job, then the dashboards and rules that depend on both.

Prometheus can find its targets in two ways. A static configuration lists the Nextcloud host and port directly, which suits a single installation on fixed addresses. Service discovery, drawn from an orchestrator or a cloud provider's inventory, suits deployments where addresses change. Either way, the scrape job must set the metrics path, the scheme, the scrape interval and any credentials the endpoint requires. Confirm the exact endpoint path, the authentication methods it supports and the metric names in the administration documentation for the Nextcloud version you run. Do not reuse metric names from older posts or other releases, because names can change between versions and a silent rename will leave dashboards empty.

DeployOpen plans and builds the scrape configuration, the network path that lets Prometheus reach the endpoint without publishing it to the internet, the Grafana dashboards and the Alertmanager rules. All of it runs inside your cloud accounts, data centers or air-gapped network. Several decisions should be made before the build starts: which Prometheus instance owns this target, which network segment or reverse proxy rule exposes the endpoint, who receives which alerts and how long samples are kept. Prometheus stores data on a single node by default and does not replicate it, so retention, backup of the storage volume and any remote write destination need a named owner from the start.

Before the build, check three things. First, confirm the running Nextcloud version against its endpoint documentation and record the metric names used in each dashboard and rule, so an upgrade can be tested against that list. Second, confirm whether the PHP, database and cache components you want to watch expose their own metrics or need separate exporters. Third, confirm that the endpoint does not reveal server version details to unauthenticated clients and that access is limited to the monitoring network. Ask for a written scope that lists each target, each exposure path and each alert rule, so your team can review the monitoring design with the same care as the Nextcloud deployment itself.

What you need before Prometheus can scrape Nextcloud

Each item below is a decision or check to complete before the first scrape job goes live. Together they determine which Nextcloud release exposes metrics, how Prometheus reaches them, and where alerts and dashboards run. Confirm each one against your own environment and build before you start the configuration work.

Nextcloud 33 or later

The OpenMetrics endpoint this page relies on arrived in Nextcloud 33, so earlier releases will not give Prometheus this scrape target. Nextcloud 33 receives support until February 2027, and Nextcloud 34 until June 2027. Plan your upgrade path now, because Nextcloud does not allow skipping major releases. You must move one major version at a time, with a backup before each step and third-party apps disabled until they are confirmed compatible.

Metrics endpoint enabled and reachable

Nextcloud must expose its metrics endpoint, and the Prometheus host must be able to reach it. Confirm in your own build how the endpoint is switched on, which path it uses and whether it requires authentication, because configuration can differ by installation method and release. Test the endpoint with a manual HTTP request from the monitoring host before you write any scrape configuration, so that a failed scrape later points to one cause.

Prometheus 3.13 LTS line

Choose either the current 3.x release or the long-term support line, which is 3.13. LTS 3.13 was released July 1, 2026 and receives bug fixes until July 31, 2027, so it suits teams that want fewer forced upgrades. A non-LTS minor release generally stops receiving bug fixes after six weeks, so that choice means planning upgrades on a shorter cadence. Record the exact patch version in your deployment documentation.

Alertmanager for notifications

Prometheus evaluates alert rules, but Alertmanager is what delivers notifications, so it must run alongside Prometheus. Alertmanager groups related alerts, applies inhibition and manages silences. For high availability it can run as a cluster, and Prometheus should list every Alertmanager instance directly, with no load balancer in front of them. Decide the receivers and on-call paths before you write Nextcloud alert rules.

Grafana with MySQL or PostgreSQL

Grafana stores its configuration in a database, and the default SQLite store does not scale for production. Use MySQL 8.0 or later, or PostgreSQL 12 or later. If dashboards must stay available during a node failure, plan two or more active-active Grafana servers behind a load balancer sharing that database. Alerting in that layout needs additional configuration to avoid duplicate notifications, so verify it before go-live.

Network path and scrape credentials

Map the route from the monitoring host to Nextcloud through firewalls, reverse proxies and any segmentation between the web tier and internal networks. Decide whether Prometheus connects over TLS with a certificate from your internal certificate authority or a public one. Decide whether the scrape uses a dedicated service account and token, and who holds that credential and when it rotates. Restrict the endpoint so that only the monitoring host's address can reach it.

Why Prometheus pulls Nextcloud metrics instead of receiving pushes

Prometheus collects metrics by pulling them. On a fixed interval, the Prometheus server sends an HTTP request to each target it knows about, reads the metrics that target returns, and stores the samples in its local time series database. Targets come from service discovery or from a static list in the Prometheus configuration. For a Nextcloud server, that means Prometheus needs a stable address for the OpenMetrics endpoint added in Nextcloud 33, plus a scrape job that names it. Queries are written in PromQL, either in Prometheus directly or in Grafana, which reads from Prometheus as a data source.

The Prometheus pushgateway exists, but it is meant for short-lived batch jobs that finish before a scrape can reach them, such as an illustrative nightly maintenance script. It is not the normal path for a long-running Nextcloud server. Routing Nextcloud metrics through a gateway adds another component to secure, back up and monitor. It also hides failures, because the gateway keeps serving the last values it received even after the server has stopped responding. Before adding a gateway, list which jobs are truly batch work. For a web application that stays up, the endpoint itself carries the signal, and a failed scrape is a useful alert in its own right.

Because Prometheus opens every connection, design work starts at the network boundary. The Prometheus host must reach the metrics endpoint on the port and path Nextcloud serves, across any firewall, reverse proxy or container network in between. Write those rules before go-live, not after the first failed scrape. Authentication follows the same logic: the scrape job must present whatever credentials the endpoint requires, and those credentials sit in the Prometheus configuration, so they need the same protection as other secrets. Certificate trust belongs in the first design too. If Nextcloud uses a private certificate authority, Prometheus must trust it, and certificate renewal must be scheduled into the same process. Confirm how your Nextcloud version restricts access to the endpoint before you write the scrape job.

The Prometheus project documentation says it values reliability over precision and is not a good choice where 100% accuracy is required, such as per-request billing. A missed scrape leaves a gap in a graph, and rate calculations smooth over small inconsistencies. That is acceptable for capacity trends and for alerts on sustained conditions, such as a background job backlog that keeps growing or a database approaching its planned size. It is not an audit record of who opened or shared which file. Keep access logs, audit trails and any per-user accounting in Nextcloud's own logging, and tell reviewers that the Prometheus data is an operational view of the server.

Configuring the Nextcloud scrape step by step

This sequence takes Nextcloud from an enabled OpenMetrics endpoint to a tested alert path in Grafana and Alertmanager. Each step ends with a check that proves the previous step worked before the next one begins. The exact configuration keys come from the Nextcloud and Prometheus documentation for the versions you run.

  1. Confirm the Nextcloud version and endpoint

    The administrator confirms the Nextcloud version in use and checks that the OpenMetrics endpoint added in Nextcloud 33 is enabled in the admin settings for that release. Setting locations and option names can change between releases, so follow the Nextcloud admin manual for the exact version you run. The step is done when the admin settings show the endpoint as enabled and the version and endpoint path are recorded for the remaining steps.

  2. Reach the endpoint with an authenticated request

    From the Prometheus host, send an authenticated HTTP request to the endpoint using the same credentials the scrape job will use. Test over the same network path Prometheus uses, including any reverse proxy and TLS certificate trust, because a request that works in a browser can still fail from a server. The step is done when the response body is OpenMetrics text with metric families listed, and the request succeeds without a login redirect.

  3. Add the scrape job and confirm target status

    Add a scrape job to the Prometheus configuration using the interval, timeout and credentials agreed in the design. Keep the secret in a file that only the Prometheus service account can read, and reload the configuration using the method your version documents. The step is done when the Nextcloud target shows as up in the Prometheus targets view with a recent last scrape and no scrape error.

  4. Verify samples for each alerted metric family

    Run queries in the Prometheus expression browser for every metric family your alerts will depend on, and confirm each returns recent samples with the labels you expect. Check that values change between two scrapes, since a static value can hide a stalled exporter. Prometheus keeps local data for a default retention of 15 days, so decide retention and any remote write target before going live. The step is done when every alert input returns current values.

  5. Load Grafana with provisioned dashboards and data source

    Deploy Grafana with a Prometheus data source and dashboards defined as files that Grafana loads at startup through provisioning. Store the data source definition and dashboard JSON in your version control system so the setup can be rebuilt from files. For production, use MySQL or PostgreSQL as the Grafana database, since the installation documentation does not recommend SQLite for production. The step is done when a fresh Grafana instance shows the data source and dashboards without manual edits.

  6. Add alert rules and every Alertmanager instance

    Write alert rules for the conditions the team has agreed to act on and load them through the Prometheus rule files. List every Alertmanager instance in the Prometheus alerting configuration so notifications still arrive when one node is down. The Alertmanager documentation advises pointing Prometheus at each instance rather than placing a load balancer in front of them, so confirm that approach in the version you deploy. The step is done when the rules load without errors in the rules view.

  7. Test firing and resolved alerts before handover

    In an agreed maintenance window, trigger a test condition and confirm the alert moves to firing in Prometheus and reaches the receiver through Alertmanager. Clear the condition and confirm a resolved notification follows. Record the time of each transition and the people who received it. The step is done when both the firing and resolved notifications have been seen end to end and the runbook names an owner for each receiver.

Exposing the metrics endpoint beyond localhost without opening it to users

The first decision is whether the metrics endpoint needs to leave the Nextcloud host at all. The simplest option keeps the endpoint on localhost and runs the Prometheus server on the same machine, so nothing is exposed to the network. When Prometheus runs elsewhere, the team has two practical paths: a dedicated internal listener that serves only the metrics path to the monitoring network, or a reverse proxy rule on the existing web server that matches the metrics path and admits only the scraper's address. Either path should be combined with credentials. Before relying on network controls alone, confirm in the Nextcloud 33 documentation whether the endpoint supports its own authentication, which settings enable it, and whether it can be bound to a separate interface.

The most common failure is routing the metrics path through the public web front end. If the virtual host forwards every request to Nextcloud, the endpoint answers anyone who can reach the site, and a request for an internal path may look like any other request to the application. Any rule added for scrapes must deny the metrics path to external sources by default and allow it only from the monitoring network. Test the rule from outside the network after every change to the web server configuration, because a rule that works from inside can still leave the path open. Also confirm how Nextcloud determines the client address behind a reverse proxy, since IP-based allow lists depend on the trusted proxy settings being correct.

Scrapes across hosts need transport encryption, and the team should decide how Prometheus will trust the certificate before the first scrape. Use a certificate issued by the internal certificate authority the organization already operates, install the CA bundle on the Prometheus host, and make sure the certificate name matches the host name in the scrape target. Disabling certificate verification to get a scrape working should be treated as an open defect. Assign certificate renewal to a named owner and monitor expiry, because an expired certificate stops every scrape at once. For scrape credentials, store the secret in a file readable only by the Prometheus service account, keep it out of configuration files committed to version control, and rotate it on a schedule: issue the new credential, update the file, reload Prometheus, confirm the target is up, then revoke the old credential.

Plan for the operational side before the endpoint goes live. Nextcloud publishes a new major version every four months and requires upgrades one major version at a time, so the team should recheck the endpoint, its authentication settings and the proxy rule after each upgrade and add that check to the upgrade runbook. Record which network path, credential and certificate authority the scraper uses, and name an owner for each. Alert on the up metric for the Nextcloud target so that a broken certificate, expired credential or blocked path appears as a failed scrape and is not hidden by gaps in dashboards. Finally, document and test a way to disable the scrape path quickly if a security review finds exposure.

Which Nextcloud, database and cache signals to watch

This table maps six signal areas to what each one indicates and what to confirm in your own environment before writing an alert. Read it as a checklist: the exact metric and status names depend on your Nextcloud version, so list them from your own endpoint and map each one to an alert. The main takeaway is that database and cache signals often explain slow Nextcloud pages before the application reports an error.

Signal areaWhat it indicatesWhat to confirm in your version
PHP and web server healthWhether requests are answered promptly and whether PHP-FPM workers are saturated, which usually appears as queued or slow requests during peak useWhich PHP-FPM and web server status figures your setup exposes, whether they need a separate exporter, and the worker limits set in your pool configuration
Nextcloud application stateWhether the instance responds, whether maintenance mode is enabled, and whether background jobs run on schedule or build up as a backlogThe exact status and background job figures exposed by your Nextcloud version, and whether the backlog reflects the cron schedule you configured
Database connectivity and latencyWhether Nextcloud can open database connections and how long queries take from the application sideWhich database timings Nextcloud reports, and whether you can compare them with the database server's own monitoring to locate a slow component
Cache availability (Redis or APCu)Whether the memory cache and file locking backend respond, since a failing cache can slow pages or cause locking errorsWhether your deployment uses Redis, APCu or both, which cache and locking figures your version exposes, and whether you need a direct check on the cache service
Storage capacity for the data directoryFree space and growth of the data directory, which affects uploads, previews and log writesWhether the figure comes from Nextcloud or the host exporter, and that alert thresholds are set from the growth rate you measure in your environment
Certificate expiry at the reverse proxyDays remaining before the public certificate expires, a condition Nextcloud itself does not usually reportWhich probe or exporter reads the certificate from the proxy's public endpoint, and whether it checks every hostname that clients use

Securing the metrics path and the monitoring stack

Metrics and dashboards are only as safe as the paths between Nextcloud, Prometheus, Grafana and Alertmanager. The cards below cover who can reach each component, how Grafana sessions and accounts are hardened, and where the secrets for alert delivery are kept. Each item is a decision to confirm in your environment before the stack goes live.

Nextcloud metrics endpoint access

The Nextcloud OpenMetrics endpoint is the first point where monitoring data leaves the server, so it needs its own access rules. Confirm which authentication options your Nextcloud version offers for that endpoint, then combine them with network restrictions that allow only your Prometheus servers to connect. Test the endpoint from an address outside the allowed range to confirm it refuses the request. Document both layers so that a change to one does not silently remove the other.

Proxy and network controls for Prometheus

Prometheus does not provide built-in user authentication on its own, so access is controlled at the network and proxy layer. Place the web interface and query API behind a reverse proxy that enforces authentication and TLS, and bind Prometheus so that direct connections from the wider network are blocked. Keep scrape traffic to the Nextcloud endpoint on a network segment you control, and review who can run queries, since PromQL can expose the same data as dashboards.

Least-privilege Grafana accounts

Grafana roles should match the work each person does. Limit administrator rights to a small group, give most viewers read-only access to the Nextcloud dashboards, and restrict who can edit alert rules. Use service accounts with narrow roles for automation and rotate their tokens on a documented schedule. SAML and team sync are Grafana Enterprise features, while LDAP, generic OAuth and other providers work in all editions, so confirm the edition before designing group-based access.

Grafana browser session hardening

The Grafana security hardening guidance recommends secure and SameSite cookies, a Content Security Policy and Trusted Types. Secure cookies keep session identifiers on encrypted connections, SameSite limits how cookies are sent across sites, and a Content Security Policy restricts which scripts and resources the browser may load. After applying these settings, test dashboards, plugins and embedded panels, because a strict policy can block features that depend on inline or third-party resources.

Grafana exposure settings and domain checks

Several hardening settings limit what an outside party can learn about the Grafana instance. Hide the version from unauthenticated users, require authentication for the metrics endpoint, and enable domain verification so that requests arriving under unexpected host names are rejected, which guards against DNS rebinding. Confirm each setting against the documentation for your installed Grafana version, and check behavior through any load balancer or reverse proxy, since host names and headers can change at that layer.

Alertmanager receivers and webhook secrets

Alertmanager sends notifications to receivers such as email, chat and webhook endpoints, and webhook URLs and tokens act as credentials. Keep them out of plain configuration files kept in version control, load them from a secrets store or from files readable only by the Alertmanager service account, and limit who can edit routes and receivers. If you run Alertmanager as a cluster, confirm that every instance reads the same protected configuration. Rotate webhook tokens when people with access leave the team.

Which Nextcloud alerts are worth setting up first

Choose alerts by user impact. An alert earns a place in the first set only if someone must act on it within a known time. Start with five conditions: users unable to sign in or sync, background jobs stalling, database and cache unavailability, storage approaching capacity, and certificates close to expiry. A sign-in failure that affects many users matters more than a dozen counters for a single internal task. Ask, for each candidate alert, who gets paged, what they do first, and what breaks if they wait until morning.

Set thresholds from your own baseline. No universal values apply to every Nextcloud installation, because user counts, cron schedules, file sizes and sync patterns differ widely. Before enabling alerts, record normal sign-in failure rates, typical background job durations, cache and database response behavior and disk growth over a period your team chooses. Set each threshold above that normal range, then review it after the first few incidents. For certificates, the lead time should match how long your renewal process takes, including approvals. For storage, base the threshold on observed growth so the alert fires with enough time to add capacity.

Alertmanager reduces noise through three features. Grouping combines related alerts into one notification, so a database outage produces one message instead of one per affected service. Inhibition suppresses dependent alerts while a root cause is firing, for example muting application errors while the database alert is active. Silences cover planned maintenance and should carry an owner and an expiry time. A noisy alert set gets ignored, and once people mute a channel, real incidents are missed. For high availability, Alertmanager can run as a cluster using its cluster flags, and Prometheus should list every Alertmanager instance directly.

Prometheus local storage keeps data in two-hour blocks, and its default retention is 15 days. That period suits troubleshooting and short trend checks, but it is too short for capacity planning or compliance evidence. Local storage is not clustered or replicated, so the Prometheus server should be planned, sized and backed up like any single-node database. If your team needs longer history, configure remote write to an external long-term storage system. Confirm which backend you will use, who operates it, how it is secured and what it costs to run, because that work is separate from the Nextcloud and Prometheus setup itself.

Why Nextcloud scrapes fail and what to check first

This table maps six common Nextcloud scrape failures to their likely cause, the check to run first and the fix. Read it top to bottom when a target goes down, returns errors or shows gaps after a change. Most failures trace to network, credential, certificate, version, storage or alerting settings that an operator can confirm before changing the monitoring design.

SymptomLikely cause and checkFix
Target shows down with a connection errorNetwork path, firewall or proxy rule blocks the Prometheus host. Check: run curl from the Prometheus host to the metrics URL.Allow the Prometheus host to reach the port, and confirm the reverse proxy forwards the metrics path to the app.
Target shows a 401 or other authentication failureCredentials in the scrape config do not match the endpoint's authentication. Check: compare the scrape auth block with the endpoint's documented method.Store the token or password in a file Prometheus reads, and use the authentication method the endpoint expects.
TLS verification errorsIncomplete certificate chain or name mismatch. Check: run openssl s_client against the target and compare the certificate names with the scrape address.Serve the full chain from the proxy, use a matching name in the scrape config, or trust your internal CA in Prometheus.
Metrics missing after a Nextcloud upgradeEndpoint behavior or metric names changed. Check: compare exposed metric names with your dashboards and alert rules, then read the release notes.Update dashboards and rules to the new names, and test them on a staging instance before the next upgrade.
Gaps in historyLocal retention is too short or the disk is under pressure. Check: review retention settings, free disk space and the storage size on the Prometheus host.Set retention by time and size for the disk, alert on low free space, and use remote write where longer history is needed.
Duplicate alert notifications with more than one Prometheus or Grafana nodeThe high availability design was not applied, so several nodes evaluate the same rules. Check: count the alerting instances and confirm each Prometheus lists every Alertmanager.Point each Prometheus at every Alertmanager instance, cluster Alertmanager, and set up Grafana alerting for high availability.

Questions teams ask before connecting Nextcloud to Prometheus

Does Prometheus have a paid edition that adds to the cost of monitoring Nextcloud?

No. Prometheus is licensed under Apache-2.0 and has no paid enterprise edition of the project itself, so its cost comes from the infrastructure it runs on, the storage for its local time series database, the implementation work and the people who operate it. Grafana is a separate decision. Grafana is licensed under AGPLv3 since Grafana Labs relicensed it on April 20, 2021, and Grafana Enterprise is a commercial option. Grafana Cloud is a further option with its own tiers. Compare these choices before you size the stack, and confirm with your Nextcloud administrators which endpoint and features your Nextcloud version exposes, since that determines how much scraping and dashboard work is needed.

What work is one-time and what recurs after connecting Nextcloud to Prometheus?

The one-time work is scrape design, dashboards, alert rules and the network exposure of the metrics endpoint, including authentication and firewall rules. The recurring work is what keeps the setup trustworthy over time. Nextcloud releases a new major version every four months and requires one major version at a time, so the scrape configuration and metric names need checking at each upgrade. Prometheus ships minor releases every 6 weeks, and its long-term support line 3.13 is supported until July 31, 2027. Alert rules need tuning as noise appears, storage grows with retention, Grafana needs regular patch releases, and someone must stay on call for the alerts.

How long does a Nextcloud Prometheus setup take for our environment?

The duration depends on the scope, and no fixed figure applies to every environment. The main drivers are the number of Nextcloud nodes to scrape, the database and cache servers that need their own targets, whether you already run Prometheus, Alertmanager and Grafana, and how many notification routes and dashboards you need. Network approvals and change windows often set the pace more than the configuration itself. Ask for a timeline in the written scope, with the assumptions behind it listed, including which parts depend on your approvals and which depend on the vendor documentation for your Nextcloud version. Fixed-scope engagements agree deliverables and timelines in writing before work starts.

Can our internal team set up Nextcloud monitoring with Prometheus without a partner?

Yes, if your team has Prometheus operations skills and can confirm the endpoint details for your Nextcloud version. Start by confirming the endpoint path, the authentication method, the metric names and the scrape interval that your version supports. Prometheus pulls metrics over HTTP from targets found through service discovery or static configuration, and it is queried with PromQL. Plan for its limits: local storage is not clustered or replicated, so manage it like a single-node database and keep backups or remote storage in mind. Alertmanager can run as a cluster, but Prometheus should list every Alertmanager instance rather than sit behind a load balancer. For Grafana in production, use MySQL or PostgreSQL, because SQLite does not scale for production.

What does the work need from our side before implementation starts?

Four things should be in place before implementation starts. First, network approvals for the scrape path between Prometheus and each Nextcloud node, plus any firewall changes for the metrics endpoint. Second, a Nextcloud administrator who can enable and configure the endpoint, provide the credentials Prometheus will use and schedule a change window. Third, a named monitoring owner who approves alert thresholds, dashboards and retention. Fourth, an on-call path that defines who receives alerts, how they escalate and which systems they can reach. Access to any existing Prometheus, Alertmanager and Grafana instances, and a decision on where the stack will run, should also be settled, since both affect the scope and the schedule.

What should we ask for in a written quote for Prometheus monitoring of Nextcloud?

Ask for a scope that lists each item by name. Confirm the Nextcloud versions and node count in scope, the endpoint and exposure design, every scrape target (application nodes, database, cache, reverse proxy), and the Alertmanager and notification routes. Ask for the dashboards and alert rules by name, the retention and storage assumptions, and whether Grafana will run with production-grade storage and provisioning as code. Request the handover documentation, the acceptance criteria, what is excluded, and what support follows handover, including upgrades to Prometheus, Grafana and the Nextcloud configuration. The quote should also state who pays for each infrastructure item and whether any Grafana Enterprise or Grafana Cloud licensing is included or left to you.

Is it safe to expose the Nextcloud metrics endpoint beyond localhost?

It can be done safely only with authentication and a restricted network path, and the exact setup depends on your Nextcloud version, so confirm it against that version's documentation first. Keep the endpoint off public paths, do not expose it through a general reverse proxy route, and allow access only from the Prometheus servers through firewall rules on a private segment. Use TLS where the traffic leaves a single host, and rotate the scrape credentials under your normal secrets process. Review who can read the metrics, since they can reveal user counts, versions and internal names. Prometheus values reliability over precision and is not suited to exact accounting, so treat its figures as operational signals rather than records for billing.

How DeployOpen scopes and delivers Nextcloud monitoring

DeployOpen scopes Nextcloud monitoring as a written, fixed-scope piece of work that covers the metrics endpoint, the Prometheus and Grafana stack, and the alerts your team needs. Work runs in the infrastructure you control, from exposing the endpoint safely to handing over documented dashboards and alert rules. Ongoing support is available as a retainer once the monitoring is live.

How we scope

  • The written scope names your Nextcloud version, the server and database hosts, and the exact metrics to collect.
  • Scope covers how the OpenMetrics endpoint is exposed beyond localhost and who may read it.
  • Fixed-scope terms list deliverables and timelines in writing before any work starts.

How we build

  • Install Prometheus and Grafana in your infrastructure, with Grafana's database and high availability choices settled during scoping.
  • Configure scrape jobs, service discovery or static targets, and retention sized to the agreed storage plan.
  • Restrict the Nextcloud metrics endpoint with network rules and credentials, then test that outside requests are refused.

How we hand over

  • Dashboards for server, database and cache signals, provisioned as code so they load from files at startup.
  • Alert rules and Alertmanager routing documented, with each alert's meaning and the owner who responds.
  • Runbook covering scrape failures, storage growth, and how to test alert delivery end to end.

How we support

  • Retainers cover ongoing support, upgrades and testing of the monitoring stack once it is live.
  • Plan Nextcloud upgrades so the endpoint and metric names are rechecked against each new release.
  • Prometheus and Grafana versions are tracked against their published support windows during the retainer.

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.