Overview
Grafana Mimir is a long-term Prometheus metrics store you own. This template deploys Mimir in monolithic mode, with every Mimir component in one process. Your own collectors (Prometheus, Grafana Alloy, OpenTelemetry) push metrics in through Prometheusremote_write, and anything that speaks PromQL, such as your own Grafana, queries them back. Metric blocks are stored durably in your object bucket.
This is a self-hosted metrics store for your own metrics from your own sources. It is separate from Control Plane’s built-in observability, which keeps collecting and dashboarding your workloads’ metrics natively.
--gvc GVC_NAME at install time.What Gets Created
Prerequisites
Mimir needs an existing bucket in one of three backends, plus access to it. Complete the steps for your backend before installing, and setstorage.type to match (aws is the default).
- AWS S3
- Google Cloud Storage
- S3-compatible (MinIO, R2, Wasabi)
Create a bucket
storage.aws.bucket to its name and storage.aws.region to its region.Set up a Cloud Account
storage.aws.cloudAccountName to its name.Create a bucket-scoped IAM policy
YOUR_BUCKET with your bucket name. Set storage.aws.policyName to the policy name (the bare name, not the ARN).Installation
Install with the bucket, cloud account and IAM policy from the AWS prerequisites (the defaultstorage.type):
storage.type=gcp, storage.gcp.bucket and storage.gcp.cloudAccountName instead. For an S3-compatible server, set storage.type=minio, storage.minio.endpoint, storage.minio.bucket and storage.minio.credentialsSecretName.
You can also install the template using your preferred method:
UI
CLI
Terraform
Pulumi
Configuration
Image and Resources
replicas must be 1 or at least 3; the template refuses to render with 2. See Scaling and Availability.
Object Storage
storage.type is read. One bucket serves the whole deployment; the template namespaces its contents internally.
Tenancy
multitenancy.enabled or retention.period updates only the Mimir configuration secret, which a running replica does not re-read. After the cpln helm upgrade, run cpln workload force-redeployment RELEASE_NAME-mimir --gvc GVC_NAME.
Retention
Volume Set
Internal Access
internalAccess.type decides which workloads can reach port 8080.
Connecting
internalAccess admits (by default, any workload in the same GVC).
Point Prometheus at the remote write endpoint:
X-Scope-OrgID with the tenant ID.
To check Mimir from your machine, open a tunnel and request its readiness endpoint:
cpln workload exec cannot be used for debugging. Use the tunnel above or a client workload in the GVC instead.
Operations
Backing Up
Your metric blocks live in your object bucket, so protecting the bucket (for example with your provider’s versioning or replication) protects the data. The volume set holds only the ingester WAL and compactor scratch space. Reinstalling the template against the same bucket resumes with your existing data.Upgrading from 1.0.0
Version 1.1.0 renamed the resource limit keys so it is clear which number is the limit:Upgrading from 1.1.0
Version 1.2.0 moved the S3-compatible (storage.type: minio) access keys out of values and into a prerequisite secret. AWS and GCS installs are unaffected.
- Create the credentials secret described under Prerequisites, with your current access key pair as
accessKeyandsecretKey. - Delete
storage.minio.accessKeyandstorage.minio.accessSecretfrom your values. An upgrade that still carries them is refused at render. - Upgrade with your existing storage settings plus the new secret name:
Scaling and Availability
replicas: 1(the default) runs a single instance. A restart briefly interrupts ingest and queries.replicas: 3or more forms an HA cluster with 3-way replicated ingest, so pushes and queries continue through a replica loss or a rolling restart.2is rejected because it gives no failure tolerance.- When scaling an existing install from 1 to 3 replicas, metrics written shortly before the scale-up can be intermittently missing from query results for up to about 12 hours. No data is lost, new writes are unaffected, and it resolves on its own. Scale up at a quiet time if that matters.
- Raise
resources.maxMemoryto ingest more active series; memory is what bounds the series count.
Troubleshooting
Workload never becomes ready and logs are empty
Workload never becomes ready and logs are empty
storage.type: minio, the secret named by storage.minio.credentialsSecretName does not exist, so no container starts.Fix: read status.versions[].message with cpln workload get-deployments RELEASE_NAME-mimir --gvc GVC_NAME -o yaml; it names the missing secret. Create it as shown under Prerequisites, then wait or run cpln workload force-redeployment RELEASE_NAME-mimir --gvc GVC_NAME.Upgrade refused because resources.cpu was renamed
Upgrade refused because resources.cpu was renamed
mimir: resources.cpu was RENAMED to resources.maxCpu. (or the same for resources.memory)Cause: your values still use the pre-1.1.0 key names.Fix: rename them as described in Upgrading from 1.0.0.Upgrade refused because the MinIO access keys were removed
Upgrade refused because the MinIO access keys were removed
mimir: minio.accessKey and minio.accessSecret were REMOVEDCause: your values still carry the pre-1.2.0 S3-compatible keys.Fix: move them into a credentials secret as described in Upgrading from 1.1.0.Install refused with replicas set to 2
Install refused with replicas set to 2
mimir: replicas must be 1 or >= 3 — a 2-replica cluster has no failure tolerance under 3-way replicationFix: set replicas to 1 or to 3 or more.Pushes and queries rejected after enabling multitenancy
Pushes and queries rejected after enabling multitenancy
multitenancy.enabled: true, every request without an X-Scope-OrgID header is rejected.Fix: add the header to every collector’s remote_write config and to the Grafana data source.Access Denied warnings right after a fresh boot
Access Denied warnings right after a fresh boot
Important Notes
- Mimir has no built-in authentication and this template never exposes a public endpoint. To serve clients outside Control Plane, put your own authenticating proxy in front of it.
X-Scope-OrgIDseparates tenants but is not a security boundary: any client that can reach Mimir can send any tenant ID.- Changing
retention.periodapplies to existing blocks too, because the compactor enforces it. - Your data lives in your bucket. Deleting data means emptying the bucket; uninstalling the template does not.
- After uninstalling, re-check the bucket before emptying it: a terminating replica can re-write a small cluster-seed file under
blocks/__mimir_cluster/shortly after teardown.