Ryvn's observability stack (Loki, Grafana, Mimir behind the tenant auth-proxy) as one installation: object storage for Loki and Mimir, a Postgres database for Grafana unless you bring your own, the Loki and Mimir services sized by profile, the auth-proxy at loki.<domain> / mimir.<domain>, and Grafana at grafana.<domain>, with TLS from cert-manager. How the pieces fit together: https://ryvn.ai/docs/observability/logs and https://ryvn.ai/docs/observability/metrics.
provisioningMode selects who the stack serves. hub: every organization of the hub it is installed beside; sign-in through the environment's zitadel installation, organizations and datasources created by that hub's orchestrator, mapped with hubOrgs. dedicated: the single organization owning the installation; the managing hub issues the OAuth client and gateway identity, Grafana organization 1 is provisioned statically and named organizationDisplayName, and grafanaExposure chooses the public or internal ingress.
Supported on GCP (GCS + Workload Identity Federation for GKE), AWS (S3 + EKS Pod Identity) and Azure (Blob + Workload Identity). On other providers the buckets and the Grafana database are still created, but Loki, Mimir, the auth-proxy and Grafana are not deployed and the URL outputs are not published. Collectors are deployed separately and reach the stack through the connectionName, lokiIngestUrl and mimirIngestUrl outputs.
This blueprint accepts 21 configurable inputs to customize the installation for your environment.
provisioningModestring`hub`: this stack serves every organization of the hub it is installed beside; sign-in uses the environment's `zitadel` installation and `hubOrgs`; Grafana organizations and datasources are provisioned by that hub's orchestrator. `dedicated`: this stack serves the single organization that owns the installation; the managing hub issues the OAuth client and gateway identity and Grafana is provisioned statically.
domainstringRoot hostname for the stack, without a scheme. Loki, Mimir and Grafana are exposed as `loki.`, `mimir.` and `grafana.` under it.
hubUrlstringBase URL of the Ryvn hub API (for example `https://api.<hub-domain>`) the auth-proxy authorizes tenant requests against. Required in `hub` mode, where it is the API of the hub this stack is installed beside. In `dedicated` mode leave it blank to use the managing hub's API; set it only to authorize against a different hub API URL.
connectionNamestringName remote collectors use to address this stack, in either provisioning mode. Leave blank to use `<installation name>-<hosting environment name>`. Must be a valid label value: at most 63 characters of letters, digits, `-`, `_` or `.`, starting and ending with a letter or digit. A generated default that is too long is rejected rather than shortened; set the name explicitly in that case.
grafanaExposurestringApplies to `dedicated` mode only; in `hub` mode Grafana is always published at `grafana.<domain>` because the `zitadel` installation registers that callback. Public publishes Grafana at `grafana.<domain>` on the ingress class below. Private publishes it on the `internal-nginx` ingress class under the environment's internal domain, reachable only from inside the network; hub sign-in stays enabled either way.
hubOrgsmapMaps hub (Zitadel) organization ids to Grafana organization ids. Members of a hub organization sign in to Grafana as Editors of the mapped Grafana organization. The Grafana organizations and their Loki/Mimir datasources are created by the hub's orchestrator; look up the ids under Server admin → Organizations. Example: `"298765826054437928": "2"`.
ingressEnabledbooleanCreate Ingress resources for Loki, Mimir and Grafana.
routesEnabledbooleanPublish Loki, Mimir and Grafana through Ryvn Routes (ryvn-routes) on the managed gateway.
ingressClassNamestringIngressClass that publishes the Loki, Mimir and Grafana hostnames. The default matches the internet-facing ingress-nginx installed by the platform blueprints.
clusterIssuerstringcert-manager ClusterIssuer that signs the TLS certificates for the public hostnames. The default matches the issuer installed by the platform blueprints.
profilestringSizing profile for the Loki, Mimir and Grafana services. Small suits a hub with a handful of workload environments; medium is sized for production hubs.
nodeGroupstringValue of the `ryvn.app/node-group-name` label of the node pool that runs Loki and Mimir (for example `observability`). Leave blank to schedule on any node.
storageClassNamestringStorage class for the Loki and Mimir persistent volumes (ingester write-ahead logs, compactor and store-gateway scratch, alertmanager state; durable data lives in the buckets). Grafana recommends SSD-backed disks for ingesters. Empty uses the cluster default. Changing it later recreates those volumes.
lokiRetentionDaysnumberDays the Loki compactor keeps log chunks before deleting them.
mimirBlockRetentionDaysnumberDays the Mimir compactor keeps metric blocks before deleting them.
useExternalGrafanaDatabasebooleanPoint Grafana at a Postgres database you manage instead of provisioning a dedicated one with this installation.
grafanaDatabaseUrlstringPostgres connection URL (`postgres://user:password@host:5432/grafana?sslmode=require`) for Grafana when using an external database.
grafanaAdminPasswordstringGenerated once for the built-in Grafana `admin` user and retained across upgrades.
datasourceSecretstringUsed in `dedicated` mode only. Generated once; Grafana's Loki and Mimir datasources present it to the auth-proxy as the Basic auth password of user `grafana`.
organizationDisplayNamestringApplies to `dedicated` mode only. Name shown for Grafana organization 1, applied after every install and upgrade. Leave blank to use the id of the organization that owns this installation.
deletionProtectionbooleanProtects the buckets and the Grafana database from accidental destruction. Disable before tearing down the stack.
This blueprint exposes 9 outputs that other services can reference.
connectionNamestringName remote collectors use to address this stack.
lokiIngestUrlstringBase URL remote collectors push logs to.
mimirIngestUrlstringBase URL remote collectors push metrics to.
lokiUrlstringPublic Loki endpoint behind the auth-proxy. Set it as the platform blueprint's `lokiUrl` input in each workload environment whose collector should ship here.
mimirUrlstringPublic Mimir endpoint behind the auth-proxy. Set it as the platform blueprint's `mimirUrl` input in each workload environment whose collector should ship here.
grafanaUrlstringGrafana URL on the public domain, or on the environment's internal domain when a dedicated stack's Grafana exposure is private. In hub mode it must match the `grafanaUrl` input of the zitadel installation so the OAuth redirect is accepted.
lokiBucketNamestringObject storage bucket holding Loki chunks and ruler state.
mimirBucketNamestringObject storage bucket holding Mimir blocks, ruler and alertmanager state.
grafanaAdminPasswordstringPassword for the built-in Grafana `admin` user.