<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Configure Grafana Mimir Helm chart on Grafana Labs</title><link>https://grafana.com/docs/helm-charts/mimir-distributed/v5.8.x/configure/</link><description>Recent content in Configure Grafana Mimir Helm chart on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/helm-charts/mimir-distributed/v5.8.x/configure/index.xml" rel="self" type="application/rss+xml"/><item><title>Configure Grafana Mimir autoscaling with Helm</title><link>https://grafana.com/docs/helm-charts/mimir-distributed/v5.8.x/configure/configure-autoscaling/</link><pubDate>Fri, 22 Aug 2025 09:49:49 +0000</pubDate><guid>https://grafana.com/docs/helm-charts/mimir-distributed/v5.8.x/configure/configure-autoscaling/</guid><content><![CDATA[&lt;h1 id=&#34;configure-grafana-mimir-autoscaling-with-helm&#34;&gt;Configure Grafana Mimir autoscaling with Helm&lt;/h1&gt;


&lt;div class=&#34;admonition admonition-warning&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Warning&lt;/p&gt;&lt;p&gt;Autoscaling support in the Helm chart is currently experimental. Use with caution in production environments and thoroughly test in a non-production environment first.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;You can configure autoscaling for Mimir components using (Kubernetes Event-driven Autoscaling) KEDA and Kubernetes Horizontal Pod Autoscaler (HPA).&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin&#34;&gt;Before you begin&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ensure you have a running Mimir cluster deployed with Helm.&lt;/li&gt;
&lt;li&gt;Verify you have the required permissions to modify Helm deployments.&lt;/li&gt;
&lt;li&gt;Familiarize yourself with Kubernetes HPA concepts.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;To use autoscaling, you need:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;KEDA installed in your Kubernetes cluster&lt;/li&gt;
&lt;li&gt;Prometheus metrics available for scaling decisions&lt;/li&gt;
&lt;/ol&gt;


&lt;div class=&#34;admonition admonition-warning&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Warning&lt;/p&gt;&lt;p&gt;Don&amp;rsquo;t use the same Mimir or Grafana Enterprise Metrics cluster for storing and querying autoscaling metrics. Using the same cluster can create a dangerous feedback loop.&lt;/p&gt;
&lt;p&gt;For instance, if the Mimir or GEM cluster becomes unavailable, autoscaling stops working, because it cannot query the metrics. This prevents the cluster from automatically scaling up during high load or recovery. This inability to scale further exacerbates the cluster&amp;rsquo;s unavailability, which might, in turn, prevent the cluster from recovering.&lt;/p&gt;
&lt;p&gt;Instead, use a separate Prometheus instance or a different metrics backend for autoscaling metrics.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;supported-components&#34;&gt;Supported components&lt;/h2&gt;
&lt;p&gt;The Mimir Helm chart supports autoscaling for the following components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/mimir/v2.17.x/references/architecture/components/querier/&#34;&gt;Querier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/mimir/v2.17.x/references/architecture/components/query-frontend/&#34;&gt;Query-frontend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/mimir/v2.17.x/references/architecture/components/distributor/&#34;&gt;Distributor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;about-keda&#34;&gt;About KEDA&lt;/h2&gt;
&lt;p&gt;KEDA is a Kubernetes operator that simplifies the setup of HPA with custom metrics from Prometheus. It consists of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An operator and external metrics server&lt;/li&gt;
&lt;li&gt;Support for multiple metric sources, including Prometheus&lt;/li&gt;
&lt;li&gt;Custom resources (&lt;code&gt;ScaledObject&lt;/code&gt;) that define scaling parameters&lt;/li&gt;
&lt;li&gt;Automatic HPA resource management&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&#34;https://keda.sh&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;KEDA documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;configure-autoscaling-for-a-new-installation&#34;&gt;Configure autoscaling for a new installation&lt;/h2&gt;
&lt;p&gt;Follow these steps to enable autoscaling when deploying Mimir for the first time.&lt;/p&gt;
&lt;h3 id=&#34;steps&#34;&gt;Steps&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Configure the Prometheus metrics source in your values file:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;kedaAutoscaling:
  prometheusAddress: &amp;#34;http://prometheus.monitoring:9090&amp;#34;
  pollingInterval: 10&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enable and configure autoscaling for desired components:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;querier:
  kedaAutoscaling:
    enabled: true
    minReplicaCount: 2
    maxReplicaCount: 10&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploy Mimir using Helm:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;helm upgrade --install mimir grafana/mimir-distributed -f values.yaml&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;expected-outcome&#34;&gt;Expected outcome&lt;/h3&gt;
&lt;p&gt;After deployment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KEDA creates &lt;code&gt;ScaledObject&lt;/code&gt; resources for configured components.&lt;/li&gt;
&lt;li&gt;HPA resources are automatically created and begin monitoring metrics.&lt;/li&gt;
&lt;li&gt;Components scale based on configured thresholds and behaviors.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;migrate-existing-deployments-to-autoscaling&#34;&gt;Migrate existing deployments to autoscaling&lt;/h2&gt;
&lt;p&gt;Follow these steps to enable autoscaling for an existing Mimir deployment.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-warning&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Warning&lt;/p&gt;&lt;p&gt;Autoscaling support in the Helm chart is currently experimental. Migrating to autoscaling carries risks for cluster availability.&lt;/p&gt;
&lt;p&gt;Enabling autoscaling removes the &lt;code&gt;replicas&lt;/code&gt; field from deployments. If KEDA/HPA hasn&amp;rsquo;t started autoscaling a deployment yet, Kubernetes interprets no replicas as meaning 1 replica. This can cause an outage if the transition is not handled carefully. If you&amp;rsquo;re using GitOps tools like FluxCD or ArgoCD, you might need to take additional steps to manage the transition.&lt;/p&gt;
&lt;p&gt;Consider testing the migration in a non-production environment first.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;before-you-begin-1&#34;&gt;Before you begin&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Back up your current Helm values.&lt;/li&gt;
&lt;li&gt;Plan for potential service disruption.&lt;/li&gt;
&lt;li&gt;Consider testing in a non-production environment first.&lt;/li&gt;
&lt;li&gt;Ensure you have a rollback plan ready.&lt;/li&gt;
&lt;li&gt;Consider migrating one component at a time to minimize risk.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;steps-1&#34;&gt;Steps&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Add the autoscaling configuration with &lt;code&gt;preserveReplicas&lt;/code&gt; enabled:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;querier:
  kedaAutoscaling:
    enabled: true
    preserveReplicas: true # Maintains stability during migration
    # ... autoscaling configuration ...&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apply the changes and verify the KEDA setup:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;# Apply changes
helm upgrade mimir grafana/mimir-distributed -f values.yaml

# Verify setup
kubectl get hpa
kubectl get scaledobject
kubectl describe hpa&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wait 2-3 polling intervals to confirm that KEDA is managing scaling.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove &lt;code&gt;preserveReplicas&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;querier:
  kedaAutoscaling:
    enabled: true
    # Remove preserveReplicas&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apply the updated configuration:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;helm upgrade mimir grafana/mimir-distributed -f values.yaml&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;troubleshooting&#34;&gt;Troubleshooting&lt;/h3&gt;
&lt;p&gt;If pods scale down to 1 replica after removing &lt;code&gt;preserveReplicas&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Revert changes:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;querier:
  kedaAutoscaling:
    enabled: true
    preserveReplicas: true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify KEDA setup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check HPA status&lt;/li&gt;
&lt;li&gt;Verify metrics are being received&lt;/li&gt;
&lt;li&gt;Check for conflicts with other tools&lt;/li&gt;
&lt;li&gt;Ensure enough time was given for KEDA to take control (at least 2-3 polling intervals)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Try migrating again after resolving issues.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;If you&amp;rsquo;re using GitOps tools like FluxCD or ArgoCD, they might try to reconcile the state and conflict with HPA&amp;rsquo;s scaling decisions. Consult your GitOps tool&amp;rsquo;s documentation for handling HPA transitions.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;monitor-autoscaling-health&#34;&gt;Monitor autoscaling health&lt;/h2&gt;
&lt;p&gt;The following conditions indicate unhealthy autoscaling:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KEDA operator is down: &lt;code&gt;ScaledObject&lt;/code&gt; changes don&amp;rsquo;t propagate to HPA.&lt;/li&gt;
&lt;li&gt;KEDA metrics server is down: HPA can&amp;rsquo;t receive updated metrics.&lt;/li&gt;
&lt;li&gt;HPA is unable to scale: &lt;code&gt;MimirAutoscalerNotActive&lt;/code&gt; alert fires.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For production deployments, configure &lt;a href=&#34;https://keda.sh/docs/latest/operate/cluster/#high-availability&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;high availability&lt;/a&gt; for KEDA.&lt;/p&gt;
&lt;p&gt;For more information about monitoring autoscaling, refer to 
    &lt;a href=&#34;/docs/mimir/v2.17.x/manage/monitor-grafana-mimir/&#34;&gt;Monitor Grafana Mimir&lt;/a&gt;.&lt;/p&gt;
]]></content><description>&lt;h1 id="configure-grafana-mimir-autoscaling-with-helm">Configure Grafana Mimir autoscaling with Helm&lt;/h1>
&lt;div class="admonition admonition-warning">&lt;blockquote>&lt;p class="title text-uppercase">Warning&lt;/p>&lt;p>Autoscaling support in the Helm chart is currently experimental. Use with caution in production environments and thoroughly test in a non-production environment first.&lt;/p></description></item><item><title>Configure GEM federation-frontend</title><link>https://grafana.com/docs/helm-charts/mimir-distributed/v5.8.x/configure/configure-gem-federation-frontend/</link><pubDate>Fri, 22 Aug 2025 09:49:49 +0000</pubDate><guid>https://grafana.com/docs/helm-charts/mimir-distributed/v5.8.x/configure/configure-gem-federation-frontend/</guid><content><![CDATA[&lt;h1 id=&#34;configure-gem-federation-frontend&#34;&gt;Configure GEM federation-frontend&lt;/h1&gt;
&lt;p&gt;You can deploy the Grafana Enterprise Metrics (GEM) federation-frontend in a Kubernetes cluster using Helm. The federation-frontend allows you to query data from multiple GEM clusters using a single endpoint. For more information about cluster query federation, refer to the 
    &lt;a href=&#34;/docs/enterprise-metrics/v2.17.x/operations/cluster-query-federation/&#34;&gt;federation-frontend documentation&lt;/a&gt;.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;This guide focuses specifically on deploying the federation-frontend component as a standalone deployment without any additional GEM or Mimir components.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;before-you-begin&#34;&gt;Before you begin&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Set up a GEM cluster: For information about setting up and configuring a GEM deployment, refer to &lt;a href=&#34;/docs/helm-charts/mimir-distributed/latest/get-started-helm-charts/gs-gem/&#34;&gt;Deploy Grafana Enterprise Metrics using the Helm chart&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Provision an access token with the &lt;code&gt;metrics:read&lt;/code&gt; scope for each cluster that you want to query. For more information, refer to 
    &lt;a href=&#34;/docs/enterprise-metrics/v2.17.x/set-up-gem-tenant/&#34;&gt;Set up a GEM tenant&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;deploy-the-gem-federation-frontend&#34;&gt;Deploy the GEM federation-frontend&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a Kubernetes &lt;code&gt;Secret&lt;/code&gt; named &lt;code&gt;gem-tokens&lt;/code&gt; with the GEM access tokens for each of the remote GEM clusters. The Helm values file uses this &lt;code&gt;Secret&lt;/code&gt; later. Replace &lt;code&gt;TOKEN1&lt;/code&gt; and &lt;code&gt;TOKEN2&lt;/code&gt; with the access tokens for the remote GEM clusters.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;apiVersion: v1
kind: Secret
metadata:
  name: gem-tokens
data:
  CLUSTER_1_GEM_TOKEN: TOKEN1
  CLUSTER_2_GEM_TOKEN: TOKEN2&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apply the secret to your cluster in the &lt;code&gt;federation-frontend-demo&lt;/code&gt; namespace with the &lt;code&gt;kubectl&lt;/code&gt; command:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;kubectl -n federation-frontend-demo apply -f mysecret.yaml&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a values file named &lt;code&gt;federation-frontend.yaml&lt;/code&gt; with the following content.&lt;/p&gt;
&lt;p&gt;Replace &lt;code&gt;http://gem-query-frontend.monitoring.svc.cluster.local:8080/prometheus&lt;/code&gt; and &lt;code&gt;https://gem.monitoring.acme.local/prometheus&lt;/code&gt; with the URLs of the GEM clusters you want to query. Replace &lt;code&gt;tenant-1&lt;/code&gt; and &lt;code&gt;tenant-2&lt;/code&gt; with the tenant IDs of the remote GEM clusters.&lt;/p&gt;
&lt;p&gt;Note that these resource settings are examples that are sufficient for small deployments. Adjust the values based on your specific requirements and load:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;# Enable enterprise features
enterprise:
  enabled: true

# Enable and configure federation-frontend
federation_frontend:
  enabled: true
  # Since this is a standalone deployment, configure the chart to not render any of the other GEM components.
  disableOtherComponents: true
  replicas: 2
  resources:
    requests:
      cpu: 100m
      memory: 128Mi
    limits:
      cpu: 1
      memory: 256Mi
  extraEnvFrom:
    - secretRef:
        name: gem-tokens

# Configure the remote GEM clusters to query.
mimir:
  structuredConfig:
    auth:
      type: trust
    # The federation-frontend doesn&amp;#39;t handle authentication or authorization. Disabling multitenancy means the federation-frontend doesn&amp;#39;t require the X-Scope-OrgID header.
    # With disabled multitenancy, the federation-frontend uses the authn/z material from the proxy_targets configuration.
    # For a complete list of configuration options, refer to the configuration reference at https://grafana.com/docs/enterprise-metrics/&amp;lt;GEM_VERSION&amp;gt;/config/reference/#federation.
    multitenancy_enabled: false
    federation:
      proxy_targets:
        - name: &amp;#34;cluster-1&amp;#34;
          url: &amp;#34;http://gem-query-frontend.monitoring.svc.cluster.local:8080/prometheus&amp;#34;
          basic_auth:
            username: tenant-1
            password: &amp;#34;${CLUSTER_1_GEM_TOKEN}&amp;#34;

        - name: &amp;#34;cluster-2&amp;#34;
          url: &amp;#34;https://gem.monitoring.acme.local/prometheus&amp;#34;
          basic_auth:
            username: tenant-2
            password: &amp;#34;${CLUSTER_2_GEM_TOKEN}&amp;#34;

# Disable MinIO
minio:
  enabled: false

# The federation-frontend doesn&amp;#39;t need the rollout-operator for rollouts, so it can be disabled.
rollout_operator:
  enabled: false&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploy the federation-frontend using &lt;code&gt;helm&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;helm install federation-frontend grafana/mimir-distributed -f federation-frontend.yaml -n federation-frontend-demo&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This deploys only the federation-frontend component. The federation-frontend is configured to proxy queries to the GEM clusters that you specify in the &lt;code&gt;proxy_targets&lt;/code&gt; configuration.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that the federation-frontend is running. The simplest way to do this is to issue a label names query against the federation-frontend service.&lt;/p&gt;
&lt;p&gt;This example tries to reach the Kubernetes service from the cluster and request the label names from the past 12 hours.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;curl -XPOST &amp;#39;https://mimir-federation-frontend:8080/prometheus/api/v1/labels&amp;#39; \
  -d &amp;#34;start=$(date -u &amp;#43;%Y-%m-%dT%H:%M:%S.0Z -d &amp;#39;12 hours ago&amp;#39; 2&amp;gt;/dev/null || date -u -v -12H &amp;#43;%Y-%m-%dT%H:%M:%S.0Z)&amp;#34; \
  -d &amp;#34;end=$(date -u &amp;#43;%Y-%m-%dT%H:%M:%S.0Z)&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You should receive a response with the label names from the remote GEM clusters similar to this:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JSON&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-json&#34;&gt;{
  &amp;#34;status&amp;#34;: &amp;#34;success&amp;#34;,
  &amp;#34;data&amp;#34;: [&amp;#34;__cluster__&amp;#34;, &amp;#34;__name__&amp;#34;, &amp;#34;hash_extra&amp;#34;, &amp;#34;series_id&amp;#34;]
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
]]></content><description>&lt;h1 id="configure-gem-federation-frontend">Configure GEM federation-frontend&lt;/h1>
&lt;p>You can deploy the Grafana Enterprise Metrics (GEM) federation-frontend in a Kubernetes cluster using Helm. The federation-frontend allows you to query data from multiple GEM clusters using a single endpoint. For more information about cluster query federation, refer to the
&lt;a href="/docs/enterprise-metrics/v2.17.x/operations/cluster-query-federation/">federation-frontend documentation&lt;/a>.&lt;/p></description></item><item><title>Configure Grafana Mimir to allow Vault Agent to inject certificates and keys into Pods</title><link>https://grafana.com/docs/helm-charts/mimir-distributed/v5.8.x/configure/configure-hashicorp-vault-agent/</link><pubDate>Fri, 22 Aug 2025 09:49:49 +0000</pubDate><guid>https://grafana.com/docs/helm-charts/mimir-distributed/v5.8.x/configure/configure-hashicorp-vault-agent/</guid><content><![CDATA[&lt;h1 id=&#34;configure-grafana-mimir-to-allow-vault-agent-to-inject-certificates-and-keys-into-pods&#34;&gt;Configure Grafana Mimir to allow Vault Agent to inject certificates and keys into Pods&lt;/h1&gt;
&lt;p&gt;When you enable this feature, Helm updates the annotations on all Pods that have TLS (transport layer security) configurable components.
When you deploy Mimir or GEM, Vault Agent fetches the relevant secrets from Vault according to the annotations and mounts them to the Pod.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Vault and Vault Agent must to be running already.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Example &lt;code&gt;values.yaml&lt;/code&gt; file:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;vaultAgent:
  enabled: true
  roleName: &amp;#34;test-role&amp;#34;
  clientCertPath: &amp;#34;client/cert/path&amp;#34;
  clientKeyPath: &amp;#34;client/key/path&amp;#34;
  serverCertPath: &amp;#34;server/cert/path&amp;#34;
  serverKeyPath: &amp;#34;server/key/path&amp;#34;
  caCertPath: &amp;#34;ca/cert/path&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Generated Kubernetes Deployment YAML file based on the preceding example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: release-name
  labels:
    helm.sh/chart: mimir-release-1.2.3
    app.kubernetes.io/name: mimir
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/component: comonent-name
    app.kubernetes.io/version: &amp;#34;123&amp;#34;
    app.kubernetes.io/managed-by: Helm
  annotations: {}
  namespace: &amp;#34;default&amp;#34;
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: mimir
      app.kubernetes.io/instance: release-name
      app.kubernetes.io/component: component-name
  strategy:
    type: RollingUpdate
  template:
    metadata:
      annotations:
        vault.hashicorp.com/agent-inject: &amp;#34;true&amp;#34;
        vault.hashicorp.com/role: &amp;#34;test-role&amp;#34;
        vault.hashicorp.com/agent-inject-secret-client.crt: &amp;#34;client/cert/path&amp;#34;
        vault.hashicorp.com/agent-inject-secret-client.key: &amp;#34;client/key/path&amp;#34;
        vault.hashicorp.com/agent-inject-secret-server.crt: &amp;#34;server/cert/path&amp;#34;
        vault.hashicorp.com/agent-inject-secret-server.key: &amp;#34;server/key/path&amp;#34;
        vault.hashicorp.com/agent-inject-secret-root.crt: &amp;#34;ca/cert/path&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;vault.hashicorp.com/agent-inject-secret-&amp;lt;FILENAME&amp;gt;: &#39;&amp;lt;PATH&amp;gt;&#39;&lt;/code&gt; tells Vault Agent where to find the secret, and the name of the file to write the secret to. For example: &lt;code&gt;vault.hashicorp.com/agent-inject-secret-client.crt: &#39;client/cert/path&#39;&lt;/code&gt; will look for the secret at the path &lt;code&gt;client/cert/path&lt;/code&gt; within Vault, and mount this secret to the pod as &lt;code&gt;client.crt&lt;/code&gt; in the &lt;code&gt;/vault/secrets/&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;For more information about Vault and Vault Agent, see &lt;a href=&#34;https://www.hashicorp.com/blog/injecting-vault-secrets-into-kubernetes-pods-via-a-sidecar&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Injecting Vault Secrets Into Kubernetes Pods via a Sidecar&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To configure TLS in Mimir, refer to 
    &lt;a href=&#34;/docs/mimir/v2.17.x/manage/secure/securing-communications-with-tls/&#34;&gt;Securing Grafana Mimir communications with TLS&lt;/a&gt;.&lt;/p&gt;
]]></content><description>&lt;h1 id="configure-grafana-mimir-to-allow-vault-agent-to-inject-certificates-and-keys-into-pods">Configure Grafana Mimir to allow Vault Agent to inject certificates and keys into Pods&lt;/h1>
&lt;p>When you enable this feature, Helm updates the annotations on all Pods that have TLS (transport layer security) configurable components.
When you deploy Mimir or GEM, Vault Agent fetches the relevant secrets from Vault according to the annotations and mounts them to the Pod.&lt;/p></description></item><item><title>Configure native histograms</title><link>https://grafana.com/docs/helm-charts/mimir-distributed/v5.8.x/configure/configure-native-histograms-ingestion/</link><pubDate>Fri, 22 Aug 2025 09:49:49 +0000</pubDate><guid>https://grafana.com/docs/helm-charts/mimir-distributed/v5.8.x/configure/configure-native-histograms-ingestion/</guid><content><![CDATA[&lt;h1 id=&#34;configure-native-histograms&#34;&gt;Configure native histograms&lt;/h1&gt;
&lt;p&gt;To enable support for ingesting Prometheus native histograms over the 
    &lt;a href=&#34;/docs/mimir/v2.17.x/references/http-api/#remote-write&#34;&gt;remote write API&lt;/a&gt; endpoint, set the configuration parameter &lt;code&gt;native_histograms_ingestion_enabled&lt;/code&gt; to true.&lt;/p&gt;
&lt;p&gt;To enable support for querying native histograms together with 
    &lt;a href=&#34;/docs/mimir/v2.17.x/references/architecture/query-sharding/&#34;&gt;Grafana Mimir query sharding&lt;/a&gt;, set the configuration parameter &lt;code&gt;query_result_response_format&lt;/code&gt; to &lt;code&gt;protobuf&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Example values file:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;mimir:
  structuredConfig:
    frontend:
      query_result_response_format: protobuf
    limits:
      native_histograms_ingestion_enabled: true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Native histograms are an experimental feature of Grafana Mimir.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;To configure bucket limits for native histograms, refer to 
    &lt;a href=&#34;/docs/mimir/v2.17.x/configure/configure-native-histograms-ingestion/&#34;&gt;Configure native histograms&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To configure Grafana Agent or Prometheus to write native histograms to Grafana Mimir, refer to 
    &lt;a href=&#34;/docs/mimir/v2.17.x/send/native-histograms/&#34;&gt;Send native histograms to Mimir&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To visualize native histograms in Mimir, refer to 
    &lt;a href=&#34;/docs/mimir/v2.17.x/visualize/native-histograms/&#34;&gt;Visualize native histograms&lt;/a&gt;.&lt;/p&gt;
]]></content><description>&lt;h1 id="configure-native-histograms">Configure native histograms&lt;/h1>
&lt;p>To enable support for ingesting Prometheus native histograms over the
&lt;a href="/docs/mimir/v2.17.x/references/http-api/#remote-write">remote write API&lt;/a> endpoint, set the configuration parameter &lt;code>native_histograms_ingestion_enabled&lt;/code> to true.&lt;/p>
&lt;p>To enable support for querying native histograms together with
&lt;a href="/docs/mimir/v2.17.x/references/architecture/query-sharding/">Grafana Mimir query sharding&lt;/a>, set the configuration parameter &lt;code>query_result_response_format&lt;/code> to &lt;code>protobuf&lt;/code>.&lt;/p></description></item><item><title>Configure Redis cache</title><link>https://grafana.com/docs/helm-charts/mimir-distributed/v5.8.x/configure/configure-redis-cache/</link><pubDate>Fri, 22 Aug 2025 09:49:49 +0000</pubDate><guid>https://grafana.com/docs/helm-charts/mimir-distributed/v5.8.x/configure/configure-redis-cache/</guid><content><![CDATA[&lt;h1 id=&#34;configure-redis-cache&#34;&gt;Configure Redis cache&lt;/h1&gt;


&lt;div class=&#34;admonition admonition-caution&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Caution&lt;/p&gt;&lt;p&gt;Starting with Mimir version 2.14, the experimental support for Redis caching is deprecated. It will be removed in a future release. You are encouraged to switch to Memcached.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;Besides support for Memcached, Mimir also supports Redis for the chunks-cache, index-cache, results-cache and metadata-cache. To use Redis, deploy Redis instances, disable the built-in Memcached configuration flag in values.yaml of &lt;code&gt;mimir-distributed&lt;/code&gt; Helm chart, and then configure Mimir to use Redis.&lt;/p&gt;
&lt;p&gt;To disable Memcached, remove any &lt;code&gt;chunks-cache&lt;/code&gt;, &lt;code&gt;index-cache&lt;/code&gt;, &lt;code&gt;metadata-cache&lt;/code&gt; and &lt;code&gt;results-cache&lt;/code&gt; configuration from your Helm &lt;code&gt;values.yaml&lt;/code&gt; file. Alternatively, explicitly disable each of the Memcached instances by setting &lt;code&gt;enabled&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;chunks-cache:
  enabled: false
index-cache:
  enabled: false
metadata-cache:
  enabled: false
results-cache:
  enabled: false&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Next, configure Mimir to connect to Redis using &lt;code&gt;structuredConfig&lt;/code&gt;. Refer to 
    &lt;a href=&#34;/docs/mimir/v2.17.x/configure/configuration-parameters/#redis&#34;&gt;the configuration parameters reference&lt;/a&gt; for Redis connection configuration options. For example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;YAML&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-yaml&#34;&gt;mimir:
  structuredConfig:
    blocks_storage:
      bucket_store:
        chunks_cache:
          backend: redis
          redis:
            endpoint: &amp;lt;redis-url&amp;gt;:6379
        index_cache:
          backend: redis
          redis:
            endpoint: &amp;lt;redis-url&amp;gt;:6379
        metadata_cache:
          backend: redis
          redis:
            endpoint: &amp;lt;redis-url&amp;gt;:6379
    frontend:
      cache_results: true
      results_cache:
        backend: redis
        redis:
          endpoint: &amp;lt;redis-url&amp;gt;:6379&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="configure-redis-cache">Configure Redis cache&lt;/h1>
&lt;div class="admonition admonition-caution">&lt;blockquote>&lt;p class="title text-uppercase">Caution&lt;/p>&lt;p>Starting with Mimir version 2.14, the experimental support for Redis caching is deprecated. It will be removed in a future release. You are encouraged to switch to Memcached.&lt;/p></description></item></channel></rss>