Monitoring Parameters

Configure and manage monitoring parameters in Cozystack.

Parameters

Common parameters

NameDescriptionTypeValue
hostThe hostname used to access Grafana externally (defaults to ‘grafana’ subdomain for the tenant host).string""

Metrics storage configuration

NameDescriptionTypeValue
metricsStoragesConfiguration of metrics storage instances.[]object[...]
metricsStorages[i].nameName of the storage instance.string""
metricsStorages[i].retentionPeriodRetention period for metrics.string""
metricsStorages[i].deduplicationIntervalDeduplication interval for metrics.string""
metricsStorages[i].storagePersistent volume size.string10Gi
metricsStorages[i].storageClassNameStorageClass used for the data.string""
metricsStorages[i].vminsertConfiguration for vminsert.object{}
metricsStorages[i].vminsert.minAllowedMinimum guaranteed resources.object{}
metricsStorages[i].vminsert.minAllowed.cpuCPU request.quantity""
metricsStorages[i].vminsert.minAllowed.memoryMemory request.quantity""
metricsStorages[i].vminsert.maxAllowedMaximum allowed resources.object{}
metricsStorages[i].vminsert.maxAllowed.cpuCPU limit.quantity""
metricsStorages[i].vminsert.maxAllowed.memoryMemory limit.quantity""
metricsStorages[i].vmselectConfiguration for vmselect.object{}
metricsStorages[i].vmselect.minAllowedMinimum guaranteed resources.object{}
metricsStorages[i].vmselect.minAllowed.cpuCPU request.quantity""
metricsStorages[i].vmselect.minAllowed.memoryMemory request.quantity""
metricsStorages[i].vmselect.maxAllowedMaximum allowed resources.object{}
metricsStorages[i].vmselect.maxAllowed.cpuCPU limit.quantity""
metricsStorages[i].vmselect.maxAllowed.memoryMemory limit.quantity""
metricsStorages[i].vmstorageConfiguration for vmstorage.object{}
metricsStorages[i].vmstorage.minAllowedMinimum guaranteed resources.object{}
metricsStorages[i].vmstorage.minAllowed.cpuCPU request.quantity""
metricsStorages[i].vmstorage.minAllowed.memoryMemory request.quantity""
metricsStorages[i].vmstorage.maxAllowedMaximum allowed resources.object{}
metricsStorages[i].vmstorage.maxAllowed.cpuCPU limit.quantity""
metricsStorages[i].vmstorage.maxAllowed.memoryMemory limit.quantity""

Logs storage configuration

NameDescriptionTypeValue
logsStoragesConfiguration of logs storage instances.[]object[...]
logsStorages[i].nameName of the storage instance.string""
logsStorages[i].retentionPeriodRetention period for logs.string1
logsStorages[i].storagePersistent volume size.string10Gi
logsStorages[i].storageClassNameStorageClass used to store the data.stringreplicated

Alerta configuration

NameDescriptionTypeValue
alertaConfiguration for the Alerta service.object{}
alerta.storagePersistent volume size for the database.string10Gi
alerta.storageClassNameStorageClass used for the database.string""
alerta.resourcesResource configuration.object{}
alerta.resources.requestsResource requests.object{}
alerta.resources.requests.cpuCPU request.quantity100m
alerta.resources.requests.memoryMemory request.quantity256Mi
alerta.resources.limitsResource limits.object{}
alerta.resources.limits.cpuCPU limit.quantity1
alerta.resources.limits.memoryMemory limit.quantity1Gi
alerta.alertsAlert routing configuration.object{}
alerta.alerts.telegramConfiguration for Telegram alerts.object{}
alerta.alerts.telegram.tokenTelegram bot token.string""
alerta.alerts.telegram.chatIDTelegram chat ID(s), separated by commas.string""
alerta.alerts.telegram.disabledSeverityList of severities without alerts (e.g. [“informational”,“warning”]).[]string[]
alerta.alerts.slackConfiguration for Slack alerts.object{}
alerta.alerts.slack.urlConfiguration uri for Slack alerts.string""
alerta.alerts.slack.disabledSeverityList of severities without alerts (e.g. [“informational”,“warning”]).[]string[]
alerta.alerts.emailConfiguration for email alerts. Alerts carrying the label notify_email with the string value true are emailed when their severity is in the severities list (default critical and major). A bare YAML boolean does not match. Alerts listed in alertnames are emailed unless matched by an earlier platform route.object{}
alerta.alerts.email.toRecipient address, or several separated by commas. A display name is accepted, such as Oncall <oncall@example.org>, as long as it carries no comma. Quote display names containing punctuation such as :, @, parentheses or ?. RFC 2047 encoded words are not accepted. IP domain literals accept dotted-quad IPv4 only. IPv6 literals are rejected because Go mail parsers disagree on their syntax across versions. ASCII control characters are rejected. Addresses must be literal, so Alertmanager template actions are rejected. The accepted form is deliberately narrower than RFC 5322. The local part must be a dot-atom, with no leading, trailing or doubled dot, and quoted local parts, comments and a mailto: prefix are rejected. An address outside that form fails the render, because Alertmanager parses addresses only when it sends and drops the notification with no record a tenant can read.string""
alerta.alerts.email.fromSender address, one only. A display name is accepted. It takes the same narrower form as to, and an address outside it fails the render.string""
alerta.alerts.email.smarthostSMTP server as host:port (e.g. “smtp.example.com:465”). A value without a port, an invalid bracketed IP address or a port with leading zeros fails the render. Port 465 uses implicit TLS, other ports use STARTTLS.string""
alerta.alerts.email.authUsernameUsername for SMTP LOGIN/PLAIN authentication. The password is read from the password key of a Secret named alertmanager-email-password in the release namespace, which the platform operator creates. The name is fixed and the Secret is mounted into Alertmanager, so a missing Secret blocks the whole Alertmanager rollout, not only email delivery. The credential in it must belong to this tenant alone. smarthost is chosen by whoever writes the Monitoring, so one relay credential provisioned under the same name in every namespace can be collected by pointing smarthost at a host the tenant controls.string""
alerta.alerts.email.repeatIntervalMinimum time before a still-firing alert is emailed again, as an Alertmanager duration with units y, w, d, h, m, s, ms in descending order, each at most once, such as 5m, 12h or 1h30m. Delivery is evaluated every 5m, so shorter intervals take effect at 5m and other intervals round up to a multiple of 5m. Zero, a unit out of order and a total beyond what Alertmanager accepts fail the render. Empty keeps the 12h default.string""
alerta.alerts.email.alertnamesAlert names emailed whether or not the rule carries the notify_email label, with no severity filter. Earlier platform routes still take precedence. Alerts with event="Heartbeat", including Watchdog, go only to Alerta, and alerts with severity none, CDIDefaultStorageClassDegraded and CDINoDefaultStorageClass are blackholed and never reach email. This is the way to opt in alerts the platform ships, since their helm-owned rule definitions cannot be labelled per cluster. Entries must be plain Prometheus alert names such as KubeAPIDown, and anything else fails the render. Empty adds no extra route.[]string[]
alerta.alerts.email.severitiesSeverities the notify_email route accepts (e.g. [“critical”,“major”,“warning”]). Empty keeps the default of critical and major. List every severity in use to email opted-in alerts regardless of severity. Entries must be plain severity names, and anything else fails the render.[]string[]

Grafana configuration

NameDescriptionTypeValue
grafanaConfiguration for Grafana.object{}
grafana.dbDatabase configuration.object{}
grafana.db.sizePersistent volume size for the database.string10Gi
grafana.resourcesResource configuration.object{}
grafana.resources.requestsResource requests.object{}
grafana.resources.requests.cpuCPU request.quantity100m
grafana.resources.requests.memoryMemory request.quantity256Mi
grafana.resources.limitsResource limits.object{}
grafana.resources.limits.cpuCPU limit.quantity1
grafana.resources.limits.memoryMemory limit.quantity1Gi

Vmagent configuration

NameDescriptionTypeValue
vmagentConfiguration for VictoriaMetrics Agent.object{}
vmagent.externalLabelsExternal labels applied to all metrics.object{}
vmagent.remoteWriteRemote write configuration.object{}

OIDC authentication

NameDescriptionTypeValue
oidcOIDC authentication for the Grafana instance. See docs/oidc-grafana.md for the operator guide.object{}
oidc.modeIdentity mode. None: no OIDC, only the grafana-admin-password Secret works. System: trust the platform cozy realm via a per-instance confidential client and audience binding; zero-config default. CustomConfig: trust a tenant-supplied issuer directly (BYO); cozy is not in the path.stringNone
oidc.customConfigTenant-supplied [auth.generic_oauth] payload; consumed only when mode: CustomConfig.object{}
oidc.customConfig.configInline map of [auth.generic_oauth] keys. Written verbatim into the Grafana CR spec.config. Mutually exclusive with secretRef.name.object{}
oidc.customConfig.secretRefReference to a Secret holding an auth.ini fragment; mounted under /etc/grafana/oidc and loaded via GF_PATHS_CUSTOM_INI.object{}
oidc.customConfig.secretRef.nameName of an existing Secret in the release namespace whose auth.ini key holds a ready-made [auth.generic_oauth] block. Mutually exclusive with customConfig.config.string""
oidc.usersUsers granted access to this Grafana instance’s org. Each entry is reconciled into Grafana org membership + role by a chart-owned post-install/post-upgrade Job. Works for both System and CustomConfig modes; ignored when mode: None. Users not listed here get nothing (no default org role from group mapping).[]object[]
oidc.users[i].emailEmail address matched against the email claim from the issuer. The chart pre-provisions a Grafana account with this email so the users-Job can set the org role before the operator’s first login (oauth_allow_insecure_email_lookup = true glues the two together). Must match a conservative pattern: local part is [A-Za-z0-9._%+-]+, domain is [A-Za-z0-9.-]+\.[A-Za-z]{2,}. Whitespace, quoted literals, and unusual URL-reserved characters are rejected on schema level so the reconcile-Job’s shell handling never has to defend against malformed input.string""
oidc.users[i].roleGrafana org role to bind: Admin, Editor, or Viewer. Applied to the release’s Grafana org (Main Org.); server-level GrafanaAdmin promotion is out of scope for Phase 1. Required — the users-Job POSTs {loginOrEmail, role} to /api/orgs/1/users and PATCHes {role} to converge across re-runs; omitting the field would render role: "null" into the body and fail with HTTP 400.string{}