<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Monitoring Hub Reference on Cozystack</title><link>https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/</link><description>Recent content in Monitoring Hub Reference on Cozystack</description><generator>Hugo</generator><language>en</language><atom:link href="https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/index.xml" rel="self" type="application/rss+xml"/><item><title>Monitoring Parameters</title><link>https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/parameters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/parameters/</guid><description>&lt;!--
Autogenerated content. Don't edit this file directly; edit sources instead.
metadata: https://github.com/cozystack/website/blob/main/content/en/docs/v1.6/operations/services/_include/parameters.md
source: https://github.com/cozystack/cozystack/blob/release-1.6/packages/extra/monitoring/README.md
--&gt;
&lt;h2 id="parameters"&gt;Parameters&lt;/h2&gt;
&lt;h3 id="common-parameters"&gt;Common parameters&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Name&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Value&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;host&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The hostname used to access Grafana externally (defaults to &amp;lsquo;grafana&amp;rsquo; subdomain for the tenant host).&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="metrics-storage-configuration"&gt;Metrics storage configuration&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Name&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Value&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Configuration of metrics storage instances.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[]object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[...]&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].name&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Name of the storage instance.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].retentionPeriod&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Retention period for metrics.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].deduplicationInterval&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Deduplication interval for metrics.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].storage&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Persistent volume size.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;10Gi&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].storageClassName&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;StorageClass used for the data.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vminsert&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Configuration for vminsert.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vminsert.minAllowed&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Minimum guaranteed resources.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vminsert.minAllowed.cpu&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;CPU request.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vminsert.minAllowed.memory&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Memory request.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vminsert.maxAllowed&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Maximum allowed resources.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vminsert.maxAllowed.cpu&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;CPU limit.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vminsert.maxAllowed.memory&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Memory limit.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vmselect&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Configuration for vmselect.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vmselect.minAllowed&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Minimum guaranteed resources.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vmselect.minAllowed.cpu&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;CPU request.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vmselect.minAllowed.memory&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Memory request.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vmselect.maxAllowed&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Maximum allowed resources.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vmselect.maxAllowed.cpu&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;CPU limit.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vmselect.maxAllowed.memory&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Memory limit.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vmstorage&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Configuration for vmstorage.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vmstorage.minAllowed&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Minimum guaranteed resources.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vmstorage.minAllowed.cpu&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;CPU request.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vmstorage.minAllowed.memory&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Memory request.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vmstorage.maxAllowed&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Maximum allowed resources.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vmstorage.maxAllowed.cpu&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;CPU limit.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;metricsStorages[i].vmstorage.maxAllowed.memory&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Memory limit.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="logs-storage-configuration"&gt;Logs storage configuration&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Name&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Value&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;logsStorages&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Configuration of logs storage instances.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[]object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[...]&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;logsStorages[i].name&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Name of the storage instance.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;logsStorages[i].retentionPeriod&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Retention period for logs.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;logsStorages[i].storage&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Persistent volume size.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;10Gi&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;logsStorages[i].storageClassName&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;StorageClass used to store the data.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;replicated&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="alerta-configuration"&gt;Alerta configuration&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Name&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Value&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Configuration for the Alerta service.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.storage&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Persistent volume size for the database.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;10Gi&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.storageClassName&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;StorageClass used for the database.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.resources&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Resource configuration.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.resources.requests&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Resource requests.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.resources.requests.cpu&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;CPU request.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;100m&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.resources.requests.memory&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Memory request.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;256Mi&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.resources.limits&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Resource limits.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.resources.limits.cpu&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;CPU limit.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.resources.limits.memory&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Memory limit.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;1Gi&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.alerts&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Alert routing configuration.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.alerts.telegram&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Configuration for Telegram alerts.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.alerts.telegram.token&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Telegram bot token.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.alerts.telegram.chatID&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Telegram chat ID(s), separated by commas.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.alerts.telegram.disabledSeverity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;List of severities without alerts (e.g. [&amp;ldquo;informational&amp;rdquo;,&amp;ldquo;warning&amp;rdquo;]).&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[]string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.alerts.slack&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Configuration for Slack alerts.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.alerts.slack.url&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Configuration uri for Slack alerts.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.alerts.slack.disabledSeverity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;List of severities without alerts (e.g. [&amp;ldquo;informational&amp;rdquo;,&amp;ldquo;warning&amp;rdquo;]).&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[]string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.alerts.email&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Configuration 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.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.alerts.email.to&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Recipient address, or several separated by commas. A display name is accepted, such as &lt;code&gt;Oncall &amp;lt;oncall@example.org&amp;gt;&lt;/code&gt;, as long as it carries no comma. Quote display names containing punctuation such as &lt;code&gt;:&lt;/code&gt;, &lt;code&gt;@&lt;/code&gt;, parentheses or &lt;code&gt;?&lt;/code&gt;. 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 &lt;code&gt;mailto:&lt;/code&gt; 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.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.alerts.email.from&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Sender address, one only. A display name is accepted. It takes the same narrower form as &lt;code&gt;to&lt;/code&gt;, and an address outside it fails the render.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.alerts.email.smarthost&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;SMTP server as &lt;code&gt;host:port&lt;/code&gt; (e.g. &amp;ldquo;smtp.example.com:465&amp;rdquo;). 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.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.alerts.email.authUsername&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Username for SMTP LOGIN/PLAIN authentication. The password is read from the &lt;code&gt;password&lt;/code&gt; key of a Secret named &lt;code&gt;alertmanager-email-password&lt;/code&gt; 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. &lt;code&gt;smarthost&lt;/code&gt; is chosen by whoever writes the Monitoring, so one relay credential provisioned under the same name in every namespace can be collected by pointing &lt;code&gt;smarthost&lt;/code&gt; at a host the tenant controls.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.alerts.email.repeatInterval&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Minimum time before a still-firing alert is emailed again, as an Alertmanager duration with units &lt;code&gt;y&lt;/code&gt;, &lt;code&gt;w&lt;/code&gt;, &lt;code&gt;d&lt;/code&gt;, &lt;code&gt;h&lt;/code&gt;, &lt;code&gt;m&lt;/code&gt;, &lt;code&gt;s&lt;/code&gt;, &lt;code&gt;ms&lt;/code&gt; in descending order, each at most once, such as &lt;code&gt;5m&lt;/code&gt;, &lt;code&gt;12h&lt;/code&gt; or &lt;code&gt;1h30m&lt;/code&gt;. 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.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.alerts.email.alertnames&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Alert names emailed whether or not the rule carries the notify_email label, with no severity filter. Earlier platform routes still take precedence. Alerts with &lt;code&gt;event=&amp;quot;Heartbeat&amp;quot;&lt;/code&gt;, including &lt;code&gt;Watchdog&lt;/code&gt;, go only to Alerta, and alerts with severity &lt;code&gt;none&lt;/code&gt;, &lt;code&gt;CDIDefaultStorageClassDegraded&lt;/code&gt; and &lt;code&gt;CDINoDefaultStorageClass&lt;/code&gt; 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 &lt;code&gt;KubeAPIDown&lt;/code&gt;, and anything else fails the render. Empty adds no extra route.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[]string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;alerta.alerts.email.severities&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Severities the notify_email route accepts (e.g. [&amp;ldquo;critical&amp;rdquo;,&amp;ldquo;major&amp;rdquo;,&amp;ldquo;warning&amp;rdquo;]). 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.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[]string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="grafana-configuration"&gt;Grafana configuration&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Name&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Value&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;grafana&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Configuration for Grafana.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;grafana.db&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Database configuration.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;grafana.db.size&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Persistent volume size for the database.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;10Gi&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;grafana.resources&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Resource configuration.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;grafana.resources.requests&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Resource requests.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;grafana.resources.requests.cpu&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;CPU request.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;100m&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;grafana.resources.requests.memory&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Memory request.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;256Mi&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;grafana.resources.limits&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Resource limits.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;grafana.resources.limits.cpu&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;CPU limit.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;grafana.resources.limits.memory&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Memory limit.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;quantity&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;1Gi&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="vmagent-configuration"&gt;Vmagent configuration&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Name&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Value&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;vmagent&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Configuration for VictoriaMetrics Agent.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;vmagent.externalLabels&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;External labels applied to all metrics.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;vmagent.remoteWrite&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Remote write configuration.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="oidc-authentication"&gt;OIDC authentication&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Name&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Value&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;oidc&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;OIDC authentication for the Grafana instance. See docs/oidc-grafana.md for the operator guide.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;oidc.mode&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Identity mode. &lt;code&gt;None&lt;/code&gt;: no OIDC, only the &lt;code&gt;grafana-admin-password&lt;/code&gt; Secret works. &lt;code&gt;System&lt;/code&gt;: trust the platform &lt;code&gt;cozy&lt;/code&gt; realm via a per-instance confidential client and audience binding; zero-config default. &lt;code&gt;CustomConfig&lt;/code&gt;: trust a tenant-supplied issuer directly (BYO); &lt;code&gt;cozy&lt;/code&gt; is not in the path.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;None&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;oidc.customConfig&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Tenant-supplied &lt;code&gt;[auth.generic_oauth]&lt;/code&gt; payload; consumed only when &lt;code&gt;mode: CustomConfig&lt;/code&gt;.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;oidc.customConfig.config&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Inline map of &lt;code&gt;[auth.generic_oauth]&lt;/code&gt; keys. Written verbatim into the Grafana CR &lt;code&gt;spec.config&lt;/code&gt;. Mutually exclusive with &lt;code&gt;secretRef.name&lt;/code&gt;.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;oidc.customConfig.secretRef&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Reference to a Secret holding an &lt;code&gt;auth.ini&lt;/code&gt; fragment; mounted under &lt;code&gt;/etc/grafana/oidc&lt;/code&gt; and loaded via &lt;code&gt;GF_PATHS_CUSTOM_INI&lt;/code&gt;.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;oidc.customConfig.secretRef.name&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Name of an existing Secret in the release namespace whose &lt;code&gt;auth.ini&lt;/code&gt; key holds a ready-made &lt;code&gt;[auth.generic_oauth]&lt;/code&gt; block. Mutually exclusive with &lt;code&gt;customConfig.config&lt;/code&gt;.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;oidc.users&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Users granted access to this Grafana instance&amp;rsquo;s org. Each entry is reconciled into Grafana org membership + role by a chart-owned post-install/post-upgrade Job. Works for both &lt;code&gt;System&lt;/code&gt; and &lt;code&gt;CustomConfig&lt;/code&gt; modes; ignored when &lt;code&gt;mode: None&lt;/code&gt;. Users not listed here get nothing (no default org role from group mapping).&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[]object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;oidc.users[i].email&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Email address matched against the &lt;code&gt;email&lt;/code&gt; 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&amp;rsquo;s first login (&lt;code&gt;oauth_allow_insecure_email_lookup = true&lt;/code&gt; glues the two together). Must match a conservative pattern: local part is &lt;code&gt;[A-Za-z0-9._%+-]+&lt;/code&gt;, domain is &lt;code&gt;[A-Za-z0-9.-]+\.[A-Za-z]{2,}&lt;/code&gt;. Whitespace, quoted literals, and unusual URL-reserved characters are rejected on schema level so the reconcile-Job&amp;rsquo;s shell handling never has to defend against malformed input.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;oidc.users[i].role&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Grafana org role to bind: &lt;code&gt;Admin&lt;/code&gt;, &lt;code&gt;Editor&lt;/code&gt;, or &lt;code&gt;Viewer&lt;/code&gt;. Applied to the release&amp;rsquo;s Grafana org (&lt;code&gt;Main Org.&lt;/code&gt;); server-level &lt;code&gt;GrafanaAdmin&lt;/code&gt; promotion is out of scope for Phase 1. Required — the users-Job POSTs &lt;code&gt;{loginOrEmail, role}&lt;/code&gt; to &lt;code&gt;/api/orgs/1/users&lt;/code&gt; and PATCHes &lt;code&gt;{role}&lt;/code&gt; to converge across re-runs; omitting the field would render &lt;code&gt;role: &amp;quot;null&amp;quot;&lt;/code&gt; into the body and fail with HTTP 400.&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Monitoring Setup</title><link>https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/setup/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Cozystack provides a comprehensive monitoring and alerting system for Kubernetes clusters and applications. The system is based on Victoria Metrics for storing metrics and logs, Grafana for visualization, Alerta for alerting, and WorkloadMonitor for monitoring application states.&lt;/p&gt;
&lt;p&gt;The architecture is divided into two levels:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;System level&lt;/strong&gt;: Monitoring of cluster infrastructure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tenant-specific level&lt;/strong&gt;: Isolated monitoring for each tenant&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="installation-of-monitoring"&gt;Installation of Monitoring&lt;/h2&gt;
&lt;h3 id="system-monitoring"&gt;System Monitoring&lt;/h3&gt;
&lt;p&gt;System monitoring is installed automatically during platform deployment through the HelmRelease &lt;code&gt;monitoring-agents&lt;/code&gt; in &lt;code&gt;packages/apps/kubernetes/templates/helmreleases/monitoring-agents.yaml&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Monitoring Dashboards</title><link>https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/dashboards/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/dashboards/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Cozystack integrates Grafana as the primary visualization tool for monitoring metrics collected by VictoriaMetrics (VM). This section covers accessing pre-built dashboards, creating custom visualizations, and integrating external data sources to provide comprehensive observability for your Cozystack clusters and applications.&lt;/p&gt;
&lt;h2 id="accessing-grafana"&gt;Accessing Grafana&lt;/h2&gt;
&lt;p&gt;To access Grafana and explore dashboards:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Navigate to the Grafana URL: &lt;code&gt;https://grafana.&amp;lt;tenant-domain&amp;gt;&lt;/code&gt;, where &lt;code&gt;&amp;lt;tenant-domain&amp;gt;&lt;/code&gt; is your tenant&amp;rsquo;s domain.&lt;/li&gt;
&lt;li&gt;Log in using your tenant credentials (OIDC or token-based authentication).&lt;/li&gt;
&lt;li&gt;Once logged in, you can browse pre-configured dashboards in the &amp;ldquo;Dashboards&amp;rdquo; section.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For initial setup and configuration details, refer to 
&lt;a href="https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/setup/" target="_blank"&gt;Monitoring Setup&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Monitoring Logs</title><link>https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/logs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/logs/</guid><description>&lt;h2 id="collecting-and-storing-logs"&gt;Collecting and Storing Logs&lt;/h2&gt;
&lt;p&gt;Cozystack uses Fluent Bit for log collection and VictoriaLogs for log storage and querying. Logs are collected from various sources within the cluster and stored in dedicated log storages configured per tenant.&lt;/p&gt;
&lt;h3 id="configuring-logs-storages"&gt;Configuring Logs Storages&lt;/h3&gt;
&lt;p&gt;Log storages are configured through the monitoring hub parameters. Each tenant can have multiple log storage instances with customizable retention periods and storage sizes.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Parameter&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Default&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;logsStorages&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Array of log storage configurations&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[]object&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;logsStorages[i].name&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Name of the storage instance&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;logsStorages[i].retentionPeriod&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Retention period for logs (e.g., &amp;ldquo;30d&amp;rdquo;)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;1&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;logsStorages[i].storage&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Persistent volume size&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;10Gi&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;logsStorages[i].storageClassName&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;StorageClass for data persistence&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;&amp;quot;replicated&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For detailed configuration options, see 
&lt;a href="https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/" target="_blank"&gt;Monitoring Hub Reference&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Custom Metrics Collection</title><link>https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/custom-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/custom-metrics/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Cozystack tenant monitoring supports scraping custom metrics from your own applications and exporters. The tenant VMAgent discovers scrape targets through Kubernetes namespace labels, allowing you to connect any application that exposes a Prometheus-compatible &lt;code&gt;/metrics&lt;/code&gt; endpoint.&lt;/p&gt;
&lt;p&gt;This guide explains how to create &lt;code&gt;VMServiceScrape&lt;/code&gt; and &lt;code&gt;VMPodScrape&lt;/code&gt; resources so that the tenant VMAgent collects your custom metrics and makes them available in Grafana.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Monitoring is enabled for your tenant (see 
&lt;a href="https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/setup/"&gt;Monitoring Setup&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Your application or exporter is deployed and exposes a Prometheus-compatible &lt;code&gt;/metrics&lt;/code&gt; endpoint&lt;/li&gt;
&lt;li&gt;You have &lt;code&gt;kubectl&lt;/code&gt; access to the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="using-vmservicescrape"&gt;Using VMServiceScrape&lt;/h2&gt;
&lt;p&gt;A &lt;code&gt;VMServiceScrape&lt;/code&gt; tells the tenant VMAgent to scrape metrics from endpoints behind a Kubernetes Service.&lt;/p&gt;</description></item><item><title>Monitoring Alerting</title><link>https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/alerting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-758--cozystack.netlify.app/docs/v1.6/operations/services/monitoring/alerting/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;The alerting system in Cozystack integrates Prometheus, Alertmanager, and Alerta to provide comprehensive monitoring and notification capabilities. Alerts are generated based on metrics collected by VMAgent and stored in VMCluster, then routed through Alertmanager for grouping and deduplication, and finally managed by Alerta for notifications via various channels like Telegram and Slack.&lt;/p&gt;
&lt;h3 id="alerting-flow"&gt;Alerting Flow&lt;/h3&gt;
&lt;pre class="mermaid"&gt;sequenceDiagram
 participant P as Prometheus
 participant AM as Alertmanager
 participant A as Alerta
 participant T as Telegram
 participant S as Slack
 P-&amp;gt;&amp;gt;AM: Send Alert
 AM-&amp;gt;&amp;gt;A: Forward Alert
 A-&amp;gt;&amp;gt;T: Send Notification
 A-&amp;gt;&amp;gt;S: Send Notification&lt;/pre&gt;
&lt;h2 id="configuring-alerts-in-alerta"&gt;Configuring Alerts in Alerta&lt;/h2&gt;
&lt;p&gt;Alerta is the alerting system integrated into Cozystack&amp;rsquo;s monitoring stack. It processes alerts from various sources and provides notifications through multiple channels.&lt;/p&gt;</description></item></channel></rss>