<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Set up on Grafana Labs</title><link>https://grafana.com/docs/enterprise-traces/v2.8.x/setup/</link><description>Recent content in Set up on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/enterprise-traces/v2.8.x/setup/index.xml" rel="self" type="application/rss+xml"/><item><title>GET hardware requirements</title><link>https://grafana.com/docs/enterprise-traces/v2.8.x/setup/hardware-requirements/</link><pubDate>Thu, 24 Jul 2025 15:08:34 +0000</pubDate><guid>https://grafana.com/docs/enterprise-traces/v2.8.x/setup/hardware-requirements/</guid><content><![CDATA[&lt;h1 id=&#34;get-hardware-requirements&#34;&gt;GET hardware requirements&lt;/h1&gt;


&lt;div data-shared=&#34;gex-hw-req-intro-network.md&#34;&gt;
            &lt;!-- GEx hardware requirements content --&gt;
&lt;p&gt;This page outlines the current hardware requirements for running Grafana Enterprise Traces (GET).
Grafana Labs reserves the right to mark a support issue as ‘unresolvable’ if these requirements are not followed.
Refer to the &lt;a href=&#34;/legal/grafana-enterprise-slas/&#34;&gt;Grafana Labs Enterprise Support SLA&lt;/a&gt; for more details.&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;As of February 2025, you must run GET on the managed Kubernetes services offered by AWS (&lt;a href=&#34;https://aws.amazon.com/eks/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Amazon Elastic Kubernetes Service&lt;/a&gt;), GCP (&lt;a href=&#34;https://cloud.google.com/kubernetes-engine&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Google Kubernetes Engine&lt;/a&gt;), or Azure (&lt;a href=&#34;https://azure.microsoft.com/en-us/products/kubernetes-service&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Azure Kubernetes Service&lt;/a&gt;).
Additionally, you must use the managed object storage services offered by AWS (&lt;a href=&#34;https://aws.amazon.com/s3/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;S3&lt;/a&gt;), GCP (&lt;a href=&#34;https://cloud.google.com/storage&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;GCS&lt;/a&gt;), or Azure (&lt;a href=&#34;https://azure.microsoft.com/en-us/products/storage/blobs&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Blob Storage&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;No other deployment modes are supported.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;cpu-and-memory&#34;&gt;CPU and memory&lt;/h2&gt;
&lt;p&gt;Deploy on machines with a 1:4 ratio of CPU to memory.
For every CPU core, you should have 4GB of memory.
Grafana Labs recommends deploying onto machines with at least 16 CPU cores and 64GB of memory.
All the nodes in the Kubernetes cluster running GET should be of the same type.&lt;/p&gt;
&lt;h2 id=&#34;network&#34;&gt;Network&lt;/h2&gt;
&lt;p&gt;All components require fast network access.
Nodes the software runs on should be connected by 10 gigabit/second or faster network connection speed.&lt;/p&gt;
&lt;/div&gt;

        
&lt;h2 id=&#34;storage&#34;&gt;Storage&lt;/h2&gt;
&lt;p&gt;GET requires fast storage to run.
Any storage solutions you use have to have adequate performance.
Object storage (for example AWS S3 buckets, Google Cloud GCS or Microsoft Azure Storage) buckets or blobs are used to persist trace data for the required retention period.
Your object storage should be large enough to contain 30 days worth of data, the default block retention for GET.&lt;/p&gt;
&lt;p&gt;However, various components of GET (for example, the ingester) also require fast, persistent block storage to be available to the host machine.
For example, in the case of the ingester component, all incoming data is sent to a write-ahead log (WAL) to aggregate trace data into blocks before storing them in object storage, and to help withstand unexpected node termination.&lt;/p&gt;
&lt;p&gt;For every deployment, you need both object and block storage.
Block storage must be memory-state storage, like SSD or NVMEs. Hard drive (platter-based) disk storage is not supported.&lt;/p&gt;
&lt;p&gt;The supported configurations for AWS, GCP, and Azure are in the following sections.&lt;/p&gt;


&lt;div data-shared=&#34;gex-hw-req-storage-tables.md&#34;&gt;
            &lt;!-- Storage requirements tables --&gt;
&lt;h3 id=&#34;block-storage&#34;&gt;Block storage&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;&lt;strong&gt;Platform&lt;/strong&gt;&lt;/th&gt;
              &lt;th&gt;&lt;strong&gt;Storage type&lt;/strong&gt;&lt;/th&gt;
              &lt;th&gt;&lt;strong&gt;Configuration option&lt;/strong&gt;&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Amazon Web Services&lt;/td&gt;
              &lt;td&gt;Block&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;gp3&lt;/code&gt; General Purpose SSD EBS volumes&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Google Cloud Platform&lt;/td&gt;
              &lt;td&gt;Block&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;pd-ssd&lt;/code&gt; SSD persistent storage&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Microsoft Azure&lt;/td&gt;
              &lt;td&gt;Block&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;Premium SSD&lt;/code&gt; SSD persistent storage&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;object-storage&#34;&gt;Object storage&lt;/h3&gt;
&lt;p&gt;GET requires object storage for configuration storage, as well as long-term data storage.
Amazon AWS S3, GCP GCS, and Azure Blob storage are the only supported object stores for running GET.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;&lt;strong&gt;Platform&lt;/strong&gt;&lt;/th&gt;
              &lt;th&gt;&lt;strong&gt;Storage type&lt;/strong&gt;&lt;/th&gt;
              &lt;th&gt;&lt;strong&gt;Configuration option&lt;/strong&gt;&lt;/th&gt;
              &lt;th&gt;&lt;strong&gt;Comments&lt;/strong&gt;&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Amazon Web Services&lt;/td&gt;
              &lt;td&gt;Object&lt;/td&gt;
              &lt;td&gt;S3 Standard&lt;/td&gt;
              &lt;td&gt;S3 object storage service using the Standard storage class.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Google Cloud Platform&lt;/td&gt;
              &lt;td&gt;Object&lt;/td&gt;
              &lt;td&gt;STANDARD&lt;/td&gt;
              &lt;td&gt;GCS object storage service using the STANDARD storage class in both regional and dual regional storage locations.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Microsoft Azure&lt;/td&gt;
              &lt;td&gt;Object&lt;/td&gt;
              &lt;td&gt;Standard performance with LRS replication&lt;/td&gt;
              &lt;td&gt;Blob Storage object storage service with Standard performance and replication type Locally Redundant Storage (LRS)&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;/div&gt;

        
]]></content><description>&lt;h1 id="get-hardware-requirements">GET hardware requirements&lt;/h1>
&lt;div data-shared="gex-hw-req-intro-network.md">
&lt;!-- GEx hardware requirements content -->
&lt;p>This page outlines the current hardware requirements for running Grafana Enterprise Traces (GET).
Grafana Labs reserves the right to mark a support issue as ‘unresolvable’ if these requirements are not followed.
Refer to the &lt;a href="/legal/grafana-enterprise-slas/">Grafana Labs Enterprise Support SLA&lt;/a> for more details.&lt;/p></description></item><item><title>Deploy GET with Helm</title><link>https://grafana.com/docs/enterprise-traces/v2.8.x/setup/helm-chart/</link><pubDate>Wed, 10 Jun 2026 16:15:01 +0000</pubDate><guid>https://grafana.com/docs/enterprise-traces/v2.8.x/setup/helm-chart/</guid><content><![CDATA[&lt;h1 id=&#34;deploy-get-with-helm&#34;&gt;Deploy GET with Helm&lt;/h1&gt;
&lt;p&gt;The Helm charts for Grafana Enterprise Traces (GET) and Grafana Tempo allow you to configure, install, and upgrade Grafana Tempo or Grafana Enterprise Traces within a Kubernetes cluster.&lt;/p&gt;


&lt;div data-shared=&#34;gex-eol-note.md&#34;&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;Grafana Enterprise Metrics (GEM), Grafana Enterprise Logs (GEL), and Grafana Enterprise Traces (GET) have entered Long-Term Support (LTS):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GEM LTS version is 2.17.&lt;/li&gt;
&lt;li&gt;GEL LTS version is 3.6.&lt;/li&gt;
&lt;li&gt;GET LTS version is 2.8.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Existing customers will continue to receive support, bug fixes, and security fixes, but no new features, through Feb. 1, 2029, when GEM, GEL, and GET will reach End-of-Life (EOL).&lt;/p&gt;
&lt;p&gt;If you have questions, contact your account manager.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;/div&gt;

        
&lt;p&gt;The recommended method for installing GET is to use the &lt;a href=&#34;https://github.com/grafana/helm-charts/tree/main/charts/tempo-distributed&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;code&gt;tempo-distributed&lt;/code&gt; Helm chart&lt;/a&gt;, which deploys Tempo or GET in microservices mode.&lt;/p&gt;
&lt;h2 id=&#34;get-started-with-grafana-enterprise-traces-using-the-helm-chart&#34;&gt;Get started with Grafana Enterprise Traces using the Helm chart&lt;/h2&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;Monitoring with Grafana Cloud is required for all GET installations.
Professional services will assist you in configuring monitoring for your GET installation.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;tempo-distributed&lt;/code&gt; Helm chart allows you to configure, install, and upgrade Grafana Enterprise Traces (GET) within a Kubernetes cluster. Using this procedure, you need to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a custom namespace within your Kubernetes cluster&lt;/li&gt;
&lt;li&gt;Install Helm and the Grafana &lt;code&gt;helm-charts&lt;/code&gt; repository&lt;/li&gt;
&lt;li&gt;Configure a storage option for traces&lt;/li&gt;
&lt;li&gt;Install GET using Helm&lt;/li&gt;
&lt;li&gt;Install the GET license&lt;/li&gt;
&lt;li&gt;Create an additional storage bucket for the &lt;code&gt;admin&lt;/code&gt; resources&lt;/li&gt;
&lt;li&gt;Disable the &lt;code&gt;gateway&lt;/code&gt; used in open source Tempo&lt;/li&gt;
&lt;li&gt;Enable the &lt;code&gt;enterpriseGateway&lt;/code&gt;, which is activated when you specify Enterprise&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To learn more about Helm, read the &lt;a href=&#34;https://helm.sh/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Helm documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;GET is based on Grafana Tempo 2.8. The Helm chart used in this document is based on the &lt;code&gt;tempo-distributed&lt;/code&gt; Helm chart for Tempo 2.8, &lt;a href=&#34;https://github.com/grafana/helm-charts/blob/tempo-distributed-1.48.1/charts/tempo-distributed/README.md&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;version 1.48.1&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin&#34;&gt;Before you begin&lt;/h2&gt;
&lt;p&gt;These instructions are common across any flavor of Kubernetes. This procedure assumes you know how to install, configure, and operate a Kubernetes cluster and that you have an understanding of what the &lt;code&gt;kubectl&lt;/code&gt; command does.&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;This procedure is primarily aimed at local or development setups.
Multiple components, including &lt;code&gt;MinIO&lt;/code&gt; and &lt;code&gt;ingress-nginx&lt;/code&gt;, are deprecated and shouldn&amp;rsquo;t be used in production environments.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;hardware-requirements&#34;&gt;Hardware requirements&lt;/h3&gt;
&lt;p&gt;Ensure your environment meets the following hardware requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A single Kubernetes node with a minimum of 9 cores and 32 GB RAM&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;software-requirements&#34;&gt;Software requirements&lt;/h3&gt;
&lt;p&gt;Ensure you have the following software installed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes 1.29 or later (refer to &lt;a href=&#34;https://kubernetes.io/docs/setup/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Kubernetes installation documentation&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;kubectl&lt;/code&gt; command for your version of Kubernetes&lt;/li&gt;
&lt;li&gt;Helm 3 or later (refer to &lt;a href=&#34;https://helm.sh/docs/intro/install/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Helm installation documentation&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/enterprise-traces/latest/setup/#obtain-a-get-license&#34;&gt;An enterprise license&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;additional-requirements&#34;&gt;Additional requirements&lt;/h3&gt;
&lt;p&gt;Verify that you have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Access to the Kubernetes cluster.&lt;/li&gt;
&lt;li&gt;Enabled persistent storage in the Kubernetes cluster, which has a default storage class setup.&lt;/li&gt;
&lt;li&gt;Access to a local storage option (like MinIO) or a storage bucket like Amazon S3, Azure Blob Storage, or Google Cloud Platform. Refer to the &lt;a href=&#34;#optional-other-storage-options&#34;&gt;Optional: Other storage options&lt;/a&gt; section for more information.&lt;/li&gt;
&lt;li&gt;DNS service works in the Kubernetes cluster. Refer to &lt;a href=&#34;https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Debugging DNS resolution&lt;/a&gt; in the Kubernetes documentation.&lt;/li&gt;
&lt;li&gt;Optional: Set up an ingress controller in the Kubernetes cluster, for example &lt;a href=&#34;https://kubernetes.github.io/ingress-nginx/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;ingress-nginx&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&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 want to access GET from outside of the Kubernetes cluster, you may need an ingress. Ingress-related procedures are optional.&lt;/p&gt;
&lt;p&gt;Note that &lt;a href=&#34;https://github.com/kubernetes/ingress-nginx&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;ingress-nginx&lt;/a&gt; is being retired and should not be used in production environments.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;create-a-custom-namespace-and-add-the-helm-repository&#34;&gt;Create a custom namespace and add the Helm repository&lt;/h2&gt;
&lt;p&gt;Using a custom namespace solves problems later on because you don&amp;rsquo;t have to overwrite the default namespace.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a unique Kubernetes namespace, for example, enterprise-traces:&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;shell&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-shell&#34;&gt;kubectl create namespace enterprise-traces&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;For more details, see the Kubernetes documentation about &lt;a href=&#34;https://kubernetes.io/docs/tasks/administer-cluster/namespaces/#creating-a-new-namespace&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Creating a namespace&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set up a Helm repository using the following commands:&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;shell&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-shell&#34;&gt;helm repo add grafana https://grafana.github.io/helm-charts
helm repo update&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;set-helm-chart-values&#34;&gt;Set Helm chart values&lt;/h2&gt;
&lt;p&gt;The Helm chart includes a file called &lt;code&gt;values.yaml&lt;/code&gt;, which contains default configuration options. In this procedure, you create a local file called &lt;code&gt;custom.yaml&lt;/code&gt; in a working directory.&lt;/p&gt;
&lt;p&gt;When you use Helm to deploy the chart, you can specify that Helm uses your &lt;code&gt;custom.yaml&lt;/code&gt; to augment the default &lt;code&gt;values.yaml&lt;/code&gt; file. The &lt;code&gt;custom.yaml&lt;/code&gt; file sets the storage and traces options, enables the gateway, and sets the cluster to main. The traces section configures the distributor&amp;rsquo;s receiver protocols.&lt;/p&gt;
&lt;p&gt;After creating the file, you have the option to make changes in that file as needed for your deployment environment.&lt;/p&gt;
&lt;p&gt;To customize your Helm chart values:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a custom.yaml file in your working directory.&lt;/li&gt;
&lt;li&gt;From the examples below, copy and paste Helm chart values into your file.&lt;/li&gt;
&lt;li&gt;Save your custom.yaml file.&lt;/li&gt;
&lt;li&gt;For simple deployments, use the default &lt;code&gt;storage&lt;/code&gt; and &lt;code&gt;minio&lt;/code&gt; sections. The Helm chart deploys MinIO. GET uses it to store traces and other information. Further down this page are instructions for customizing your trace storage configuration options.&lt;/li&gt;
&lt;li&gt;Set your custom.yaml values to configure the receivers on the Tempo distributor.&lt;/li&gt;
&lt;li&gt;Save the changes to your file.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;grafana-enterprise-traces-helm-chart-values&#34;&gt;Grafana Enterprise Traces helm chart values&lt;/h3&gt;
&lt;p&gt;The values in the example below provide configuration values for GET. These values include an additional &lt;code&gt;admin&lt;/code&gt; bucket and specify a license. The &lt;code&gt;enterpriseGateway&lt;/code&gt; is automatically enabled as part of enabling the chart for installation of GET.&lt;/p&gt;
&lt;p&gt;GET requires multitenancy. It&amp;rsquo;s enabled by setting &lt;code&gt;multitenancyEnabled: true&lt;/code&gt; in the values file.
For more information, refer to &lt;a href=&#34;/docs/enterprise-traces/latest/setup/set-up-get-tenants/&#34;&gt;Set up GET tenants&lt;/a&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;# Specify the global domain for the cluster (in this case just local cluster mDNS)
global:
  clusterDomain: &amp;#34;cluster.local&amp;#34;

# Enable the Helm chart for GET installation
# Configure the Helm chart for a Grafana Enterprise Traces installation.
# We set the latest GET version as the image tag (2.8.4).
enterprise:
  enabled: true
  image:
    tag: v2.8.4

# Enable multitenancy for GET (required)
multitenancyEnabled: true

# MinIO storage configuration
# The installs a separate MinIO service/deployment into the same cluster and namespace as the GET install.
# Note: MinIO should not be used for production environments.
minio:
  enabled: true
  mode: standalone
  rootUser: grafana-tempo
  rootPassword: supersecret
  buckets:
    # Bucket for traces storage if enterprise.enabled is true - requires license. This is where all trace span information is stored.
    - name: enterprise-traces
      policy: none
      purge: false
    # Admin client bucket if enterprise.enabled is true - requires license. This is where tenant and administration information is stored.
    - name: enterprise-traces-admin
      policy: none
      purge: false
  # Changed the mc (the MinIO CLI client) config path to &amp;#39;/tmp&amp;#39; from &amp;#39;/etc&amp;#39; as &amp;#39;/etc&amp;#39; is only writable by root and OpenShift will not permit this.
  configPathmc: &amp;#34;/tmp/minio/mc/&amp;#34;
storage:
  # Specifies traces storage location.
  # Uses the MinIO bucket configured for trace storage.
  trace:
    backend: s3
    s3:
      access_key: &amp;#34;grafana-tempo&amp;#34;
      secret_key: &amp;#34;supersecret&amp;#34;
      bucket: &amp;#34;enterprise-traces&amp;#34;
      endpoint: &amp;#34;tempo-minio:9000&amp;#34;
      insecure: true
  # Specifies administration data storage location.
  # Uses the MinIO bucket configured for admin storage.
  admin:
    backend: s3
    s3:
      access_key_id: &amp;#34;grafana-tempo&amp;#34;
      secret_access_key: &amp;#34;supersecret&amp;#34;
      bucket_name: &amp;#34;enterprise-traces-admin&amp;#34;
      endpoint: &amp;#34;tempo-minio:9000&amp;#34;
      insecure: true

# Specifies which trace protocols to accept by the gateway.
# Note: GET&amp;#39;s Enterprise gateway will only accept OTLP over gRPC or HTTP.
traces:
  otlp:
    http:
      enabled: true
    grpc:
      enabled: true

# Configure the distributor component to log all received spans.
distributor:
  config:
    log_received_spans:
      enabled: true

# Specify the license. This is the base64 license text you have received from your Grafana Labs representative.
license:
  contents: |
    LICENSEGOESHERE&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;enterprise-image-version&#34;&gt;Enterprise image version&lt;/h4&gt;
&lt;p&gt;If you require a different version of GET from the default in the Helm chart, update the enterprise configuration section in the custom.yaml values file with the required image version.&lt;/p&gt;
&lt;p&gt;This example uses an older image tag of &lt;code&gt;v2.8.0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can check for the latest version number by referencing the &lt;a href=&#34;/docs/enterprise-traces/latest/release-notes/v2-8/&#34;&gt;GET 2.8 release notes&lt;/a&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;enterprise:
  enabled: true
  image:
    tag: v2.8.0&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;enterprise-license-configuration&#34;&gt;Enterprise license configuration&lt;/h4&gt;
&lt;p&gt;You need to configure a license by either&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;adding the license to the custom.yaml file or&lt;/li&gt;
&lt;li&gt;by using a secret that contains the license.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Only use one of these options.&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;Refer to the &lt;a href=&#34;/docs/enterprise-traces/latest/setup/#obtain-a-get-license&#34;&gt;Obtain a GET license&lt;/a&gt; to learn how to obtain a license.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;Using the first option, you can specify the license text in the &lt;code&gt;custom.yaml&lt;/code&gt; values file created in the &lt;code&gt;license:&lt;/code&gt; section.&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;license:
  contents: |
    LICENSEGOESHERE&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you don&amp;rsquo;t want to specify the license in the &lt;code&gt;custom.yaml&lt;/code&gt; file, you can reference a secret that contains the license content.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create the secret.&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;shell&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-shell&#34;&gt;kubectl -n enterprise-traces create secret generic get-license --from-file=license.jwt&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure the &lt;code&gt;custom.yaml&lt;/code&gt; that you created to reference the secret.&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;license:
  external: true
  secretName: get-license&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;set-your-storage-option&#34;&gt;Set your storage option&lt;/h3&gt;
&lt;p&gt;Before you run the Helm chart, you need to configure where to store trace data.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;storage&lt;/code&gt; block defined in the &lt;code&gt;values.yaml&lt;/code&gt; file configures the storage that Tempo uses for trace storage.&lt;/p&gt;
&lt;p&gt;The procedure below configures MinIO as the local storage option managed by the Helm chart. However, you can use another storage provider. Refer to the &lt;a href=&#34;#optional-other-storage-options&#34;&gt;Optional: Other storage options&lt;/a&gt; section.&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;The MinIO installation included with this Helm chart is for demonstration purposes only.
As of October 2025, MinIO &lt;a href=&#34;https://github.com/minio/minio&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;no longer provides&lt;/a&gt; or supports precompiled Docker images.
This chart uses an unsupported version of MinIO.&lt;/p&gt;
&lt;p&gt;This configuration sets up a maximum storage size of 5GiB.
This MinIO installation isn&amp;rsquo;t suitable for production environments and should only be used for example purposes. For production, use performant, Enterprise-grade object storage.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;The Helm chart values provided include the basic MinIO setup values.
If you need to customize them, the steps below walk you through which sections to update. If you don&amp;rsquo;t need to change the values, you can skip this section.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Optional: Update the configuration options in &lt;code&gt;custom.yaml&lt;/code&gt; for your configuration if required.&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;storage:
  trace:
    backend: s3
    s3:
      access_key: &amp;#34;grafana-tempo&amp;#34;
      secret_key: &amp;#34;supersecret&amp;#34;
      bucket: &amp;#34;tempo-traces&amp;#34;
      endpoint: &amp;#34;tempo-minio:9000&amp;#34;
      insecure: true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Specify an additional bucket for &lt;code&gt;admin&lt;/code&gt; resources:&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;storage:
  admin:
    backend: s3
    s3:
      access_key_id: &amp;#34;grafana-tempo&amp;#34;
      secret_access_key: &amp;#34;supersecret&amp;#34;
      bucket_name: &amp;#34;enterprise-traces-admin&amp;#34;
      endpoint: &amp;#34;tempo-minio:9000&amp;#34;
      insecure: true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Optional: If you need to change the defaults for MinIO, locate the MinIO section and change the relevant fields. Ensure that you update any &lt;code&gt;trace&lt;/code&gt; or &lt;code&gt;admin&lt;/code&gt; storage sections appropriately.&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;minio:
  enabled: true
  mode: standalone
  rootUser: minio
  rootPassword: minio123&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;optional-other-storage-options&#34;&gt;Optional: Other storage options&lt;/h4&gt;
&lt;p&gt;You can enable persistent storage in the Kubernetes cluster, which has a default storage class setup. To change the default, refer to the &lt;a href=&#34;https://kubernetes.io/docs/tasks/administer-cluster/change-default-storage-class/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;StorageClass using Kubernetes documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This Helm chart guide defaults to using MinIO as a simple solution to get you started. However, you can use a storage bucket like Amazon S3, Azure Blob Storage, or Google Cloud Platform.&lt;/p&gt;
&lt;p&gt;Each storage provider has a different configuration stanza. You need to update your configuration based on your storage provider. Refer to the &lt;a href=&#34;/docs/tempo/v2.8.x/configuration/#storage&#34;&gt;storage configuration block&lt;/a&gt; in the Grafana Tempo documentation for information on storage options.&lt;/p&gt;
&lt;p&gt;Update the &lt;code&gt;storage&lt;/code&gt; configuration options based upon your requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/tempo/v2.8.x/configuration/hosted-storage/s3/&#34;&gt;Amazon S3 configuration documentation&lt;/a&gt;. The Amazon S3 example is identical to the MinIO configuration, except the two last options, &lt;code&gt;endpoint&lt;/code&gt; and &lt;code&gt;insecure&lt;/code&gt;, are dropped.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/tempo/v2.8.x/configuration/hosted-storage/azure/&#34;&gt;Azure Blob Storage configuration documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/tempo/v2.8.x/configuration/hosted-storage/gcs/&#34;&gt;Google Cloud Storage configuration documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;azure-with-the-local_blocks-and-metrics-generator-processors&#34;&gt;Azure with the &lt;code&gt;local_blocks&lt;/code&gt; and &lt;code&gt;metrics-generator&lt;/code&gt; processors&lt;/h4&gt;
&lt;p&gt;By default, the &lt;code&gt;metrics-generator&lt;/code&gt; doesn&amp;rsquo;t require a backend connection unless you&amp;rsquo;ve enabled the &lt;code&gt;local_blocks&lt;/code&gt; processor. The &lt;code&gt;local_blocks&lt;/code&gt; processor is used for generating metrics from traces, which is required for TraceQL metrics. When this configuration is set, the &lt;code&gt;metrics-generator&lt;/code&gt; produces blocks and flushes them into a backend storage.&lt;/p&gt;
&lt;p&gt;In this case, list the generator in the &lt;code&gt;env&lt;/code&gt; var expansion configuration so the &lt;code&gt;STORAGE_ACCOUNT_ACCESS_KEY&lt;/code&gt; has the secret value.&lt;/p&gt;
&lt;p&gt;You can use this configuration example with Helm charts, like &lt;code&gt;tempo-distributed&lt;/code&gt;. Replace any values in all caps with the values for your Helm deployment.&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;generator:
  extraArgs:
    - &amp;#34;-config.expand-env=true&amp;#34;
  extraEnv:
    - name: &amp;lt;STORAGE_ACCOUNT_ACCESS_KEY&amp;gt;
      valueFrom:
        secretKeyRef:
          name: &amp;lt;TEMPO-TRACES-STG-KEY&amp;gt;
          key: &amp;lt;TEMPO-TRACES-KEY&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;For more information about the &lt;code&gt;local_blocks&lt;/code&gt; processor, refer to &lt;a href=&#34;/docs/enterprise-traces/v2.8.x/traceql/metrics-queries/&#34;&gt;Enable TraceQL metrics queries&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;set-traces-receivers&#34;&gt;Set traces receivers&lt;/h3&gt;
&lt;p&gt;The Helm chart values in your custom.yaml file are configured to use OTLP. If you are using other receivers, then you need to configure them.&lt;/p&gt;
&lt;p&gt;You can configure Tempo to receive data from OTLP, Jaeger, Zipkin, Kafka, and OpenCensus. The following example enables OTLP on the distributor. For other options, refer to the &lt;a href=&#34;/docs/tempo/v2.8.x/configuration/#distributor&#34;&gt;distributor documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The example used in this procedure has OTLP enabled.&lt;/p&gt;
&lt;p&gt;Enable any other protocols based on your requirements.&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;traces:
  otlp:
    grpc:
      enabled: true
    http:
      enabled: true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Enterprise Gateway is enabled by default, which only receives traces in OTLP gRPC and HTTP protocols.&lt;/p&gt;
&lt;h3 id=&#34;optional-add-custom-configurations&#34;&gt;Optional: Add custom configurations&lt;/h3&gt;
&lt;p&gt;There are many configuration options available in the &lt;code&gt;tempo-distributed&lt;/code&gt; Helm chart. This procedure only covers the minimum configuration required to launch GET in a basic deployment.&lt;/p&gt;
&lt;p&gt;You can add values to your &lt;code&gt;custom.yaml&lt;/code&gt; file to set custom configuration options that override the defaults present in the Helm chart. The &lt;a href=&#34;https://github.com/grafana/helm-charts/blob/tempo-distributed-1.48.1/charts/tempo-distributed/README.md&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;tempo-distributed Helm chart&amp;rsquo;s README&lt;/a&gt; contains a list of available options. The &lt;code&gt;values.yaml&lt;/code&gt; files provides the defaults for the Helm chart.&lt;/p&gt;
&lt;p&gt;Use the following command to see all of the configurable parameters for the &lt;code&gt;tempo-distributed&lt;/code&gt; Helm chart:&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;shell&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-shell&#34;&gt;helm show values grafana/tempo-distributed&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Add the configuration sections to the custom.yaml file. Include this file when you install or upgrade the Helm chart.&lt;/p&gt;
&lt;h3 id=&#34;optional-configure-an-ingress&#34;&gt;Optional: Configure an ingress&lt;/h3&gt;
&lt;p&gt;An ingress lets you externally access a Kubernetes cluster. Replace &amp;lt;ingress-host&amp;gt; with a suitable hostname that DNS can resolve to the external IP address of the Kubernetes cluster. For more information, refer to &lt;a href=&#34;https://kubernetes.io/docs/concepts/services-networking/ingress/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Ingress&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;If you are using a Linux system and it&amp;rsquo;s not possible for you set up local DNS resolution, use the &lt;code&gt;--add-host=&amp;lt;ingress-host&amp;gt;:&amp;lt;kubernetes-cluster-external-address&amp;gt;&lt;/code&gt; command-line flag to define the &lt;code&gt;&amp;lt;ingress-host&amp;gt;&lt;/code&gt; local address for the Docker commands in the examples that follow.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open your &lt;code&gt;custom.yaml&lt;/code&gt; or create a YAML file of Helm values called &lt;code&gt;custom.yaml&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the following configuration to the 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;nginx:
  ingress:
    enabled: true
    ingressClassName: nginx
    hosts:
      - host: &amp;lt;ingress-host&amp;gt;
        paths:
          - path: /
            pathType: Prefix
    tls: {} # empty, disabled.&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Save the changes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;optional-configure-tls-with-helm&#34;&gt;Optional: Configure TLS with Helm&lt;/h3&gt;
&lt;p&gt;GET can be configured to communicate between the components using Transport Layer Security, or TLS.&lt;/p&gt;
&lt;p&gt;To configure TLS with the Helm chart, you must have a TLS key-pair and CA certificate stored in a Kubernetes secret.&lt;/p&gt;
&lt;p&gt;For instructions, refer to &lt;a href=&#34;/docs/tempo/v2.8.x/configuration/network/tls/&#34;&gt;Configure TLS with Helm&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;optional-use-global-or-per-tenant-overrides&#34;&gt;Optional: Use global or per-tenant overrides&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;tempo-distributed&lt;/code&gt; Helm chart provides a module for users to set global or per-tenant override settings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Global overrides come under the overrides property, which pertain to the standard overrides&lt;/li&gt;
&lt;li&gt;Per-tenant overrides come under the &lt;code&gt;per_tenant_overrides&lt;/code&gt; property, and allow specific tenants to alter configuration associated with them as per tenant-specific runtime overrides. The Helm chart generates a &lt;code&gt;/runtime/overrides.yaml&lt;/code&gt; configuration file for all per-tenant configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These overrides correlate to the standard (global) and tenant-specific (&lt;code&gt;per_tenant_overide_config&lt;/code&gt;) overrides in GET configuration. For more information about overrides, refer to the &lt;a href=&#34;/docs/tempo/v2.8.x/configuration/#overrides&#34;&gt;Overrides configuration&lt;/a&gt; documentation.&lt;/p&gt;
&lt;p&gt;The following example configuration sets some global configuration options, as well as a set of options for a specific tenant:&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;overrides:
  defaults:
    ingestion:
      rate_limit_bytes: 5 * 1000 * 1000
      burst_size_bytes: 5 * 1000 * 1000
      max_traces_per_user: 1000
    global:
      max_bytes_per_trace: 10 * 1000 * 1000

    metrics_generator:
      processors: [&amp;#34;service-graphs&amp;#34;, &amp;#34;span-metrics&amp;#34;]

per_tenant_overrides:
  &amp;#34;1234&amp;#34;:
    ingestion:
      rate_limit_bytes: 2 * 1000 * 1000
      burst_size_bytes: 2 * 1000 * 1000
      max_traces_per_user: 400
    global:
      max_bytes_per_trace: 5 * 1000 * 1000&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This configuration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enables the Span Metrics and Service Graph metrics-generator processors for all tenants.&lt;/li&gt;
&lt;li&gt;An ingestion rate and burst size limit of 5MB/s, a maximum trace size of 10MB and a maximum of 1000 live traces in an ingester for all tenants.&lt;/li&gt;
&lt;li&gt;Overrides the &lt;code&gt;1234&lt;/code&gt; tenant with a rate and burst size limit of 2MB/s, a maximum trace size of 5MB and a maximum of 400 live traces in an ingester.&lt;/li&gt;
&lt;/ul&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;Runtime configurations should include all options for a specific tenant.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;install-get-using-the-helm-chart&#34;&gt;Install GET using the Helm chart&lt;/h2&gt;
&lt;p&gt;Use the following command to install GET using the configuration options you&amp;rsquo;ve specified in the &lt;code&gt;custom.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;shell&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-shell&#34;&gt;helm -n enterprise-traces install tempo grafana/tempo-distributed --version 1.48.1 -f custom.yaml&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The output of the command contains the write and read URLs necessary for the following steps. If you update your &lt;code&gt;values.yaml&lt;/code&gt; or &lt;code&gt;custom.yaml&lt;/code&gt;, run the same &lt;code&gt;helm install&lt;/code&gt; command and replace &lt;code&gt;install&lt;/code&gt; with &lt;code&gt;upgrade&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Check the statuses of the GET pods:&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;shell&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-shell&#34;&gt;kubectl -n enterprise-traces get pods&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Wait until all of the pods have a status of Running or Completed, which might take a few minutes.&lt;/p&gt;
&lt;p&gt;The output results look 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;shell&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-shell&#34;&gt;❯ k get pods
NAME                                        READY   STATUS      RESTARTS      AGE
tempo-admin-api-7c59c75f6c-wvj75            1/1     Running     0             86m
tempo-compactor-75777b5d8c-5f44z            1/1     Running     0             86m
tempo-distributor-94fd965f4-prkz6           1/1     Running     0             86m
tempo-enterprise-gateway-6d7f78cf97-dhz9b   1/1     Running     0             86m
tempo-ingester-0                            1/1     Running     0             86m
tempo-ingester-1                            1/1     Running     1 (86m ago)   86m
tempo-ingester-2                            1/1     Running     1 (86m ago)   86m
tempo-memcached-0                           1/1     Running     0             86m
tempo-minio-6c4b66cb77-wjfpf                1/1     Running     0             86m
tempo-querier-6cb474546-cwlkz               1/1     Running     0             86m
tempo-query-frontend-6d6566cbf7-pcwg6       1/1     Running     0             86m
tempo-tokengen-job-58jhs                    0/1     Completed   0             86m&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Note that the tempo-tokengen-job has emitted a log message containing the initial admin token.&lt;/p&gt;
&lt;p&gt;Retrieve the token with this 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;shell&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-shell&#34;&gt;kubectl -n enterprise-traces get pods | awk &amp;#39;/.*-tokengen-job-.*/ {print $1}&amp;#39; | xargs -I {} kubectl -n enterprise-traces logs {} | awk &amp;#39;/Token:\s*/ {print $2}&amp;#39;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;To get the logs for the &lt;code&gt;tokengen&lt;/code&gt; Pod, you can use:&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;shell&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-shell&#34;&gt;kubectl -n enterprise-traces get pods | awk &amp;#39;/.*-tokengen-job-.*/ {print $1}&amp;#39; | xargs -I {} kubectl -n enterprise-traces logs {}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;test-your-installation&#34;&gt;Test your installation&lt;/h2&gt;
&lt;p&gt;The next step is to test your installation by sending trace data to Grafana. You can use the &lt;a href=&#34;/docs/tempo/next/setup/set-up-test-app/&#34;&gt;Set up a test application for a Tempo cluster&lt;/a&gt; document for step-by-step instructions.&lt;/p&gt;
&lt;p&gt;If you already have Grafana available, you can add a Tempo data source using the URL fitting to your environment. For example: &lt;code&gt;http://tempo-query-frontend.enterprise-traces.svc.cluster.local:3100&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You may need to &lt;a href=&#34;/docs/enterprise-traces/latest/setup/setup-get-plugin-grafana/&#34;&gt;install the Enterprise Traces plugin&lt;/a&gt; in your Grafana Enterprise instance to allow configuration of tenants, tokens, and access policies. After creating a user and access policy using the plugin, you can configure a data source to point at &lt;code&gt;http://tempo-enterprise-gateway.enterprise-traces.svc.cluster.local:3100&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;set-up-metamonitoring&#34;&gt;Set up metamonitoring&lt;/h2&gt;
&lt;p&gt;Metamonitoring provides observability for your Tempo deployment by collecting metrics and logs from the Tempo components themselves.
This helps you monitor the health and performance of your tracing infrastructure.
Setting up metamonitoring for Tempo and GET uses the &lt;code&gt;k8s-monitoring&lt;/code&gt; Helm chart.
For more information about this Helm chart, refer to the &lt;a href=&#34;https://github.com/grafana/k8s-monitoring-helm/blob/main/charts/k8s-monitoring/README.md&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;code&gt;k8s-monitoring&lt;/code&gt; README&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;configure-metamonitoring&#34;&gt;Configure metamonitoring&lt;/h3&gt;
&lt;p&gt;To configure metamonitoring, you need to create a &lt;code&gt;metamonitoring-values.yaml&lt;/code&gt; file and use the Kubernetes Monitoring Helm chart.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a metamonitoring-values.yaml file for the Kubernetes Monitoring Helm chart configuration.
Replace the following values with your monitoring backend details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tempo&lt;/code&gt;: A descriptive name for your cluster and namespace&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;url&amp;gt;&lt;/code&gt;: Your Prometheus and Loki endpoint URLs&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;username&amp;gt;&lt;/code&gt;: Your username/instance ID&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;password&amp;gt;&lt;/code&gt;: Your password/API key&lt;/li&gt;
&lt;/ul&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;cluster:
  name: tempo # Name of the cluster, this will populate the cluster label

integrations:
  tempo:
    instances:
      - name: &amp;#34;tempo&amp;#34; # This is the name for the instance label that will be reported.
        namespaces:
          - tempo # This is the namespace that will be searched for tempo instances, change this accordingly
        metrics:
          enabled: true
          portName: prom-metrics
        logs:
          enabled: true
        labelSelectors:
          app.kubernetes.io/name: tempo

  alloy:
    name: &amp;#34;alloy-tempo&amp;#34;

destinations:
  - name: &amp;#34;tempo-metrics&amp;#34;
    type: prometheus
    url: &amp;#34;&amp;lt;url&amp;gt;&amp;#34; # Enter Prometheus URL
    auth:
      type: basic
      username: &amp;#34;&amp;lt;username&amp;gt;&amp;#34; # Enter username
      password: &amp;#34;&amp;lt;password&amp;gt;&amp;#34; # Enter password

  - name: &amp;#34;tempo-logs&amp;#34;
    type: loki
    url: &amp;#34;&amp;lt;url&amp;gt;&amp;#34; # Enter Loki URL
    auth:
      type: basic
      username: &amp;#34;&amp;lt;username&amp;gt;&amp;#34; # Enter username
      password: &amp;#34;&amp;lt;password&amp;gt;&amp;#34; # Enter password

alloy-metrics:
  enabled: true

podLogs:
  enabled: true
  gatherMethod: kubernetesApi
  namespaces: [tempo] # Set to namespace
  collector: alloy-singleton

alloy-singleton:
  enabled: true

alloy-metrics:
  enabled: true # This will send Grafana Alloy metrics to ensure the monitoring is working properly.&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the &lt;code&gt;k8s-monitoring&lt;/code&gt; Helm chart:&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 k8s-monitoring grafana/k8s-monitoring \
  --namespace monitoring \
  --create-namespace \
  -f metamonitoring-values.yaml&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify the installation:&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;shell&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-shell&#34;&gt;kubectl -n monitoring get pods&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You should see pods for the &lt;code&gt;k8s-monitoring&lt;/code&gt; components running.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;verify-metamonitoring-in-grafana&#34;&gt;Verify metamonitoring in Grafana&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Navigate to your Grafana instance.&lt;/li&gt;
&lt;li&gt;Check that metrics are being collected:
&lt;ul&gt;
&lt;li&gt;Go to Explore &amp;gt; Prometheus.&lt;/li&gt;
&lt;li&gt;Query for Tempo metrics like &lt;code&gt;tempo_build_info&lt;/code&gt; or &lt;code&gt;tempo_distributor_spans_received_total&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Check that logs are being collected:
&lt;ul&gt;
&lt;li&gt;Go to Explore &amp;gt; Loki&lt;/li&gt;
&lt;li&gt;Filter logs by your cluster name and look for Tempo component logs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Set up Tempo monitoring dashboards:
&lt;ul&gt;
&lt;li&gt;For pre-built dashboards and alerts, refer to the &lt;a href=&#34;https://github.com/grafana/tempo/tree/main/operations/tempo-mixin&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Tempo mixin documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Your Tempo deployment now includes comprehensive metamonitoring, giving you visibility into the health and performance of your tracing infrastructure.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;After deploying GET with Helm, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/docs/tempo/next/setup/set-up-test-app/&#34;&gt;Set up a test application for a Tempo cluster&lt;/a&gt; to verify your installation&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/enterprise-traces/latest/setup/set-up-get-tenants/&#34;&gt;Set up GET tenants&lt;/a&gt; to configure multitenancy&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/docs/enterprise-traces/latest/setup/setup-get-plugin-grafana/&#34;&gt;Install the Enterprise Traces plugin&lt;/a&gt; in Grafana to manage tenants, tokens, and access policies&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="deploy-get-with-helm">Deploy GET with Helm&lt;/h1>
&lt;p>The Helm charts for Grafana Enterprise Traces (GET) and Grafana Tempo allow you to configure, install, and upgrade Grafana Tempo or Grafana Enterprise Traces within a Kubernetes cluster.&lt;/p></description></item><item><title>Set up the GET plugin for Grafana</title><link>https://grafana.com/docs/enterprise-traces/v2.8.x/setup/setup-get-plugin-grafana/</link><pubDate>Wed, 18 Feb 2026 16:41:26 +0000</pubDate><guid>https://grafana.com/docs/enterprise-traces/v2.8.x/setup/setup-get-plugin-grafana/</guid><content><![CDATA[&lt;h1 id=&#34;set-up-the-get-plugin-for-grafana&#34;&gt;Set up the GET plugin for Grafana&lt;/h1&gt;
&lt;p&gt;The Grafana Enterprise Traces (GET) plugin lets you create new tenants and then use the access page to create new roles to publish traces.
These commands are completed using the Grafana user interface in lieu of commands that would normally be completed using the GET CLI.&lt;/p&gt;
&lt;p&gt;This procedure explains how to enable and configure the GET plugin.&lt;/p&gt;
&lt;h3 id=&#34;before-you-begin&#34;&gt;Before you begin&lt;/h3&gt;
&lt;p&gt;To configure the GET plugin, you need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Grafana Enterprise 8.4.0 or higher&lt;/li&gt;
&lt;li&gt;GET cluster access token&lt;/li&gt;
&lt;li&gt;Microservice deployments require the GET gateway URL, for example: &lt;a href=&#34;http://tempo-enterprise-gateway.enterprise-traces-test.svc.cluster.local:3200&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://tempo-enterprise-gateway.enterprise-traces-test.svc.cluster.local:3200&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Refer to &lt;a href=&#34;/docs/grafana/latest/installation/kubernetes/#deploy-grafana-enterprise-on-kubernetes&#34;&gt;Deploy Grafana Enterprise on Kubernetes&lt;/a&gt; if you are using Kubernetes. Otherwise, refer to &lt;a href=&#34;/docs/grafana/latest/installation/&#34;&gt;Install Grafana&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h2 id=&#34;install-the-plugin-in-your-grafana-enterprise-instance&#34;&gt;Install the plugin in your Grafana Enterprise instance&lt;/h2&gt;
&lt;p&gt;There are multiple ways to install the plugin to your local Grafana Enterprise instance. For more information, refer to &lt;a href=&#34;/grafana/plugins/grafana-enterprise-traces-app/?tab=installation&#34;&gt;Grafana Enterprise Traces app installation&lt;/a&gt; (requires login).&lt;/p&gt;
&lt;p&gt;After installing the plugin, you will need to restart the Grafana pod for the plugin to be loaded on startup. If using the “Deploy Grafana Enterprise on Kubernetes” instructions, you will need to access the shell for the Grafana pod that you have just deployed to use the GET plugin installation instructions “Installing on a local Grafana”.&lt;/p&gt;
&lt;h2 id=&#34;enable-and-configure-the-plugin&#34;&gt;Enable and configure the plugin&lt;/h2&gt;
&lt;p&gt;To enable and configure the plugin:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Log in to Grafana Enterprise.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;From the top-left menu, select Configuration and then select Plugins.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Search for Grafana Enterprise Traces plugin. This option is only available if you have GET and Grafana Enterprise licenses installed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;From the Connection settings tab of the plugin, enable the plugin by clicking on Enable plugin.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provide the necessary API settings so that the plugin can connect to your cluster:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Access token: Enter the &lt;code&gt;admin&lt;/code&gt;-scoped access token that you generated when setting up your GET cluster. This is available in the logs output (or other configured output) from the &lt;a href=&#34;/docs/enterprise-traces/latest/configure/tokengen/&#34;&gt;tokengen job&lt;/a&gt; for the GET installation. The token is prefixed by the text &lt;code&gt;Token:&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Grafana Enterprise Traces URL: Enter the URL of your GET cluster. For single-process clusters, this is any node in the cluster. For microservice deployments, this URL is the GET gateway (for example, &lt;a href=&#34;http://tempo-enterprise-gateway.enterprise-traces-test.svc.cluster.local:3200&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://tempo-enterprise-gateway.enterprise-traces-test.svc.cluster.local:3200&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Test&lt;/strong&gt; and save configuration.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Navigate to Grafana Enterprise Traces (select the GET, the stylized ‘T’ icon, on the menu bar).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that the plugin loads and can communicate with the GET admin API endpoints. You can test this by selecting the &lt;strong&gt;Licenses&lt;/strong&gt; tab from the GET plugin and ensure that you see something like 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;text&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-text&#34;&gt;
Issuer:
https://grafana.com
Issued at:
2026-01-29 13:06:11
Expires:
2026-02-05 13:06:11
Products:
grafana-enterprise-traces&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Look at the default access policy under the &lt;strong&gt;Access Policies&lt;/strong&gt; tab and ensure that there is a default access policy for the &lt;code&gt;admin&lt;/code&gt; scope.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;configure-the-plugin-using-provisioning&#34;&gt;Configure the plugin using provisioning&lt;/h3&gt;
&lt;p&gt;Alternatively, you can also manage the GET plugin using a plugin configuration. Refer to the &lt;a href=&#34;/docs/grafana/latest/administration/provisioning/#plugins&#34;&gt;plugin configuration&lt;/a&gt; documentation for more information.&lt;/p&gt;
&lt;p&gt;Example GET plugin configuration 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;apiVersion: 1

apps:
  # &amp;lt;string&amp;gt; the type of app, plugin identifier. Required
  - type: grafana-enterprise-traces-app
    # &amp;lt;integer&amp;gt; Org ID. Default to 1, unless org_name is specified
    org_id: 1
    # &amp;lt;string&amp;gt; Org name. Overrides org_id unless org_id not specified
    org_name: Main Org.
    # &amp;lt;boolean&amp;gt; disable the app. Default to false.
    disabled: false
    # &amp;lt;map&amp;gt; fields that will be converted to json and stored in jsonData.
    jsonData:
      # key/value pairs of string to object
      backendUrl: http://[...]
    # &amp;lt;map&amp;gt; fields that will be converted to json, encrypted and stored in secureJsonData.
    secureJsonData:
      # &amp;lt;string&amp;gt;
      accessToken: [...]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;optional-policiesonly-field&#34;&gt;Optional &lt;code&gt;policiesOnly&lt;/code&gt; field&lt;/h4&gt;
&lt;p&gt;For a simpler user experience that only shows the &lt;strong&gt;Access policies&lt;/strong&gt; page, you can include the following in the &lt;code&gt;jsonData&lt;/code&gt; 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;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;jsonData:
  policiesOnly: true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This simpler mode of operation only gives users access to the ability to create access policies and tokens. It requires setting up the environment to include at least one tenant.&lt;/p&gt;
&lt;h4 id=&#34;optional-policiesonly-field-1&#34;&gt;Optional &lt;code&gt;policiesOnly&lt;/code&gt; field&lt;/h4&gt;
&lt;p&gt;For a simpler user experience that only shows the &amp;ldquo;Access policies&amp;rdquo; page, you can include the following in the &lt;code&gt;jsonData&lt;/code&gt; 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;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;jsonData:
  policiesOnly: true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This simpler mode of operation only gives users access to the ability to create access policies and tokens. It requires setting up the environment to include
at least one tenant.&lt;/p&gt;
&lt;h4 id=&#34;legacy-base64encodedaccesstoken-field&#34;&gt;Legacy &lt;code&gt;base64EncodedAccessToken&lt;/code&gt; field&lt;/h4&gt;
&lt;p&gt;Prior to version 6.0.0 of the plugin, authentication required a &lt;code&gt;base64EncodedAccessToken&lt;/code&gt; field.
This has been replaced with the simpler &lt;code&gt;accessToken&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;collapse&#34; x-data=&#34;app_collapse()&#34;&gt;
  &lt;button class=&#34;collapse-trigger&#34; @click=&#34;toggle()&#34;&gt;
    &lt;span class=&#34;body-large&#34;&gt;Troubleshooting for versions earlier than 6.0.0&lt;/span&gt;
    &lt;span class=&#34;collapse-trigger__icon&#34; :class=&#34;{ &#39;collapse-trigger__icon-open&#39; : open }&#34;&gt;
      
  &lt;svg width=&#34;27&#34; height=&#34;26&#34; viewBox=&#34;0 0 27 26&#34; fill=&#34;none&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;
&lt;path opacity=&#34;0.2&#34; d=&#34;M1.73047 12.8359C1.73047 19.4634 7.10305 24.8359 13.7305 24.8359C20.3579 24.8359 25.7305 19.4634 25.7305 12.8359C25.7305 6.20852 20.3579 0.835937 13.7305 0.835937C7.10305 0.835937 1.73047 6.20852 1.73047 12.8359Z&#34; stroke=&#34;black&#34; stroke-width=&#34;1.5&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;
&lt;path d=&#34;M18.2344 12.8359L9.23438 12.8359&#34; stroke=&#34;black&#34; stroke-width=&#34;1.5&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;
&lt;path d=&#34;M13.7344 8.33594L13.7344 17.3359&#34; stroke=&#34;black&#34; stroke-width=&#34;1.5&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;
&lt;/svg&gt;


    &lt;/span&gt;
  &lt;/button&gt;
  &lt;div class=&#34;collapse-content&#34; x-ref=&#34;content&#34; hidden=&#34;until-found&#34;&gt;
    &lt;div class=&#34;collapse-content__inner&#34; x-ref=&#34;content-inner&#34;&gt;&lt;p&gt;The following is provided for troubleshooting purposes, or for users of versions
earlier than 6.0.0.&lt;/p&gt;
&lt;p&gt;Moving forward, use &lt;code&gt;accessToken&lt;/code&gt; in your configuration.&lt;/p&gt;
&lt;p&gt;If both &lt;code&gt;base64EncodedAccessToken&lt;/code&gt; and &lt;code&gt;accessToken&lt;/code&gt; are present in the &lt;code&gt;jsonData&lt;/code&gt;, the &lt;code&gt;base64EncodedAccessToken&lt;/code&gt; is ignored in versions 6.0.0 and later.&lt;/p&gt;
&lt;p&gt;The format of the &lt;code&gt;base64EncodedAccessToken&lt;/code&gt; token is a base64-encoded representation of a user-token pair, separated by a colon. For example, &lt;code&gt;$USER:$TOKEN&lt;/code&gt;.
If you&amp;rsquo;ve set your GET token as the &lt;code&gt;TOKEN&lt;/code&gt; environment variable,
and you&amp;rsquo;ve also set a &lt;code&gt;USER&lt;/code&gt; environment variable, then you can generate a compatible &lt;code&gt;base64EncodedAccessToken&lt;/code&gt; token in the following format:&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;sh&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-sh&#34;&gt;#USER INTENTIONALLY LEFT BLANK, INDICATING THE &amp;#34;ADMIN&amp;#34; USER
USER=
TOKEN=exampleTokenForBase64EncodedAccessToken
echo $USER:$TOKEN | tr -d &amp;#39;[:space:]&amp;#39; | base64 -w0&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Though &lt;code&gt;$USER&lt;/code&gt; is typically blank, you can opt to leave it in the expression to ensure that the &lt;code&gt;:&lt;/code&gt; character is present.
The following is a more direct way of obtaining the same result:&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;sh&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-sh&#34;&gt;echo :$TOKEN | tr -d &amp;#39;[:space:]&amp;#39; | base64 -w0&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;These examples both result in the following &lt;code&gt;base64EncodedAccessToken&lt;/code&gt; string:&lt;/p&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&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&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;OmV4YW1wbGVUb2tlbkZvckJhc2U2NEVuY29kZWRBY2Nlc3NUb2tlbgo=&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can apply the encoded token string to the configuration under &lt;code&gt;secureJsonData&lt;/code&gt; in your plugin configuration 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;secureJsonData:
  # &amp;lt;string&amp;gt; a base64 encoding of $USER:$TOKEN
  base64EncodedAccessToken: OmV4YW1wbGVUb2tlbkZvckJhc2U2NEVuY29kZWRBY2Nlc3NUb2tlbgo=&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Now that you have correctly configured the plugin,
the next step is to 
    &lt;a href=&#34;/docs/enterprise-traces/v2.8.x/setup/set-up-get-tenants/&#34;&gt;set up a GET tenant and visualize your data&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;limitations&#34;&gt;Limitations&lt;/h2&gt;
&lt;p&gt;The GET plugin for Grafana allows to manage only 1 GET cluster, and it doesn&amp;rsquo;t support managing multiple GET clusters with a single GET plugin installation.
If you need to manage multiple GET clusters, you should configure 1 GET cluster per Grafana organization.&lt;/p&gt;
]]></content><description>&lt;h1 id="set-up-the-get-plugin-for-grafana">Set up the GET plugin for Grafana&lt;/h1>
&lt;p>The Grafana Enterprise Traces (GET) plugin lets you create new tenants and then use the access page to create new roles to publish traces.
These commands are completed using the Grafana user interface in lieu of commands that would normally be completed using the GET CLI.&lt;/p></description></item><item><title>Set up GET tenants</title><link>https://grafana.com/docs/enterprise-traces/v2.8.x/setup/set-up-get-tenants/</link><pubDate>Fri, 31 Oct 2025 20:36:39 +0000</pubDate><guid>https://grafana.com/docs/enterprise-traces/v2.8.x/setup/set-up-get-tenants/</guid><content><![CDATA[&lt;h1 id=&#34;set-up-a-tenant-in-your-grafana-enterprise-traces-cluster&#34;&gt;Set up a tenant in your Grafana Enterprise Traces cluster&lt;/h1&gt;
&lt;p&gt;Tenants provide a mechanism for trace isolation.
Access policies may be set on a per-tenant basis.
Authorization of requests is based on specified access policies.&lt;/p&gt;
&lt;p&gt;These instructions assume that you have the &lt;a href=&#34;/docs/enterprise-traces/v2.8.x/setup/setup-get-plugin-grafana/&#34;&gt;Grafana Enterprise Traces (GET) plugin&lt;/a&gt; installed.
Use this plugin to create tenants, access policies, and tokens for your GET cluster.
The steps include:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a GET tenant.&lt;/li&gt;
&lt;li&gt;Create an access policy.&lt;/li&gt;
&lt;li&gt;Configure remote-write to your tenant.&lt;/li&gt;
&lt;li&gt;Set up your tenant as a Grafana data source.&lt;/li&gt;
&lt;li&gt;Visualize your data.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;create-a-get-tenant&#34;&gt;Create a GET tenant&lt;/h2&gt;
&lt;p&gt;Once a cluster is running, you can create new tenants.
To create a GET tenant:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Within Grafana Enterprise, navigate to &lt;strong&gt;Apps&lt;/strong&gt; &amp;gt; &lt;strong&gt;Grafana Enterprise Traces&lt;/strong&gt; &amp;gt; &lt;strong&gt;Tenants&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on &lt;strong&gt;Create tenant&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choose a name for this tenant. For demonstration purposes, use the name &lt;code&gt;dev-tenant&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select the cluster.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Create tenant&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;create-an-access-policy&#34;&gt;Create an access policy&lt;/h2&gt;
&lt;p&gt;Access policies are used to authorize actions and operations by specified tenants.
Access policies have a realm, which defines the set of tenants they apply to, and a scope, which defines the set of actions upon which they confer permissions to use.&lt;/p&gt;
&lt;p&gt;Grafana Enterprise requires a data source access policy and token to access the traces in the tenant named &lt;code&gt;dev-tenant&lt;/code&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Apps&lt;/strong&gt; &amp;gt; &lt;strong&gt;Grafana Enterprise Traces&lt;/strong&gt; &amp;gt; &lt;strong&gt;Access policies&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create access policy&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose a name for the policy. For demonstration purposes, use &lt;code&gt;dev-read-write-policy&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Scopes&lt;/strong&gt;, select the toggle next to the question &lt;strong&gt;Are you planning on creating a data source that uses this access policy?&lt;/strong&gt;. This enables the &lt;strong&gt;traces:read&lt;/strong&gt; policy.&lt;/li&gt;
&lt;li&gt;Enable the scope &lt;strong&gt;traces:write&lt;/strong&gt; to create an access policy that grants access for both reading and writing trace data (as the previous step toggles the &lt;strong&gt;traces:read&lt;/strong&gt; policy automatically).&lt;/li&gt;
&lt;li&gt;Select the tenant &lt;code&gt;dev-tenant&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;From the newly created access policy, click &lt;strong&gt;Add token&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Name the token &lt;code&gt;dev-token&lt;/code&gt; and click on &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In the next window, copy the token by selecting &lt;strong&gt;Copy to clipboard&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;At this point, you can add a data source to your Grafana Enterprise instance by using the &lt;strong&gt;Create a data source&lt;/strong&gt; option on this dialog or by manually adding one using the procedure below.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Create a data source&lt;/strong&gt;. The data source fields are automatically configured based upon your instance.&lt;/li&gt;
&lt;li&gt;Verify the created data source by opening the &lt;strong&gt;Configuration&lt;/strong&gt; option in the Grafana menu and then selecting &lt;strong&gt;Data sources&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;set-up-remote-write-to-your-tenant&#34;&gt;Set up remote-write to your tenant&lt;/h2&gt;
&lt;p&gt;To enable writes to your cluster, add a remote-write configuration snippet to the configuration file of an existing Grafana Alloy instance.
If you do not have an existing traces collector, refer to &lt;a href=&#34;/docs/alloy/latest/&#34;&gt;Set up with Grafana Alloy&lt;/a&gt;.
For Kubernetes, refer to the &lt;a href=&#34;/docs/alloy/latest/get-started/install/kubernetes/&#34;&gt;Grafana Alloy Kubernetes quick start guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The sample below is an example Alloy configuration below for the Kubernetes Helm chart (the &lt;code&gt;values.yaml&lt;/code&gt; manifest):&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;alloy:
  extraPorts:
    - name: otlp-grpc
      port: 4317
      targetPort: 4317
      protocol: TCP
  configMap:
    create: true
    content: |-
      // Creates a receiver for OTLP gRPC.
      // You can easily add receivers for other protocols by using the correct component
      // from the reference list at: https://grafana.com/docs/alloy/latest/reference/components/
      otelcol.receiver.otlp &amp;#34;otlp_receiver&amp;#34; {
        // Listen on all available bindable addresses on port 4317 (which is the
        // default OTLP gRPC port) for the OTLP protocol.
        grpc {
          endpoint = &amp;#34;0.0.0.0:4317&amp;#34;
        }

        // Output straight to the OTLP gRPC exporter. We would usually do some processing
        // first, most likely batch processing, but for this example we pass it straight
        // through.
        output {
          traces = [
            otelcol.exporter.otlp.get.input,
          ]
        }
      }

      // Define an OTLP gRPC exporter to send all received traces to GET.
      // The unique label &amp;#39;get&amp;#39; is added to uniquely identify this exporter.
      otelcol.exporter.otlp &amp;#34;get&amp;#34; {
          // Define the client for exporting.
          client {
              // Use Header authentication, defined below.
              auth = otelcol.auth.headers.credentials.handler
              // Send to the locally running Tempo instance, on port 4317 (OTLP gRPC).
              endpoint = &amp;#34;http://get-cluster-tempo-enterprise-gateway.get.svc.cluster.local:3100&amp;#34;
              // Configure TLS settings for communicating with the endpoint.
              tls {
                  // The connection is insecure.
                  insecure = true
                  // Do not verify TLS certificates when connecting.
                  insecure_skip_verify = true
              }
          }
      }

      // A default GET install doesn&amp;#39;t expose a TLS-encrypted gateway.
      // Grafana Alloy expects gRPC (HTTP/2) traffic to be TLS-encrypted, and
      // therefore fails if the &amp;#34;basic_auth&amp;#34; authorization block is used. Because of
      // this, use the generic &amp;#34;headers&amp;#34; block to authenticate a GET
      // tenant and token.
      // The authorization must be exposed as a &amp;#39;&amp;lt;tenant&amp;gt;:&amp;lt;writeToken&amp;gt;&amp;#39; pair that
      // has been base64 encrypted.
      otelcol.auth.headers &amp;#34;credentials&amp;#34; {
        header {
          key = &amp;#34;Authorization&amp;#34;
          value = &amp;#34;Basic ZGV2LXRlbmFudDpaR1YyTFhKbFlXUXRkM0pwZEdWeUxYQnZiR2xqZVMxa1pXMXZMWFJ2YTJWdU9qWS9lemR1TVRWaEpEUXZQR012THpRMVN6Z3NKakZiTVE9PQo=&amp;#34;
        }
      }&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In the above Flow configuration, the token for authentication was generated using the &lt;code&gt;dev-tenant&lt;/code&gt; user and writeable token via:&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;echo &amp;#39;dev-tenant:ZGV2LXJlYWQtd3JpdGVyLXBvbGljeS1kZW1vLXRva2VuOjY/ezduMTVhJDQvPGMvLzQ1SzgsJjFbMQ==&amp;#39; | base64&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;create-a-grafana-data-source&#34;&gt;Create a Grafana data source&lt;/h2&gt;
&lt;p&gt;To allow Grafana to read traces from GET, you must create a Tempo data source with the proper credentials.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Navigate to &lt;strong&gt;Connections&lt;/strong&gt; &amp;gt; &lt;strong&gt;Data Sources&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on &lt;strong&gt;Add a data source&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select &lt;strong&gt;Tempo&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the URL to &lt;code&gt;http://&amp;lt;get-gateway-host&amp;gt;:&amp;lt;http_listen_port&amp;gt;/&amp;lt;http_api_prefix&amp;gt;&lt;/code&gt;, filling in the path to your gateway and the configured HTTP API prefix.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enable &lt;strong&gt;Basic Auth&lt;/strong&gt;. Use &lt;strong&gt;User&lt;/strong&gt; &lt;code&gt;dev-tenant&lt;/code&gt; and the token from your clipboard as the &lt;strong&gt;Password&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Save &amp;amp; Test&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You should see a message that says &lt;code&gt;Data source is working&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;visualize-your-data&#34;&gt;Visualize your data&lt;/h2&gt;
&lt;p&gt;Once you have created a data source, you can visualize your traces in the &lt;strong&gt;Grafana Explore&lt;/strong&gt; page.&lt;/p&gt;
&lt;h3 id=&#34;test-your-configuration-using-the-intro-to-mltp-application&#34;&gt;Test your configuration using the Intro to MLTP application&lt;/h3&gt;
&lt;p&gt;The Intro to MLTP application provides an example five-service application that generates data for Tempo, Mimir, Loki, and Pyroscope.
This procedure installs the application on your cluster so you can generate meaningful test data.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Navigate to &lt;a href=&#34;https://github.com/grafana/intro-to-mltp&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;https://github.com/grafana/intro-to-mltp&lt;/a&gt; to get the Kubernetes manifests for the Intro to MLTP application.&lt;/li&gt;
&lt;li&gt;Clone the repository using commands similar to the ones below:

&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;  git clone git&amp;#43;ssh://github.com/grafana/intro-to-mltp
  cp intro-to-mltp/k8s/mythical/* ~/tmp/intro-to-mltp-k8s&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Change to the cloned repository: &lt;code&gt;cd intro-to-mltp/k8s/mythical&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;In the &lt;code&gt;mythical-beasts-deployment.yaml&lt;/code&gt; manifest, alter each &lt;code&gt;TRACING_COLLECTOR_HOST&lt;/code&gt; environment variable instance value to point to the Alloy location. For example, based on an Alloy installation in the default namespace called and with a Helm installation called &lt;code&gt;test&lt;/code&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; 	- env:
     ...
     - name: TRACING_COLLECTOR_HOST
       value: test-grafana-alloy.default.svc.cluster.local&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Deploy the Intro to MLTP application. It deploys into the default namespace.

&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 apply -f mythical-beasts-service.yaml,mythical-beasts-persistentvolumeclaim.yaml,mythical-beasts-deployment.yaml&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Once the application is deployed, go to Grafana Enterprise and select the &lt;strong&gt;Explore&lt;/strong&gt; menu item.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;GET data source&lt;/strong&gt; from the list of data sources.&lt;/li&gt;
&lt;li&gt;Select the &lt;code&gt;Search&lt;/code&gt; Query type for the data source.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Run query&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Traces from the application are displayed in the traces &lt;strong&gt;Explore&lt;/strong&gt; panel.&lt;/li&gt;
&lt;/ol&gt;
]]></content><description>&lt;h1 id="set-up-a-tenant-in-your-grafana-enterprise-traces-cluster">Set up a tenant in your Grafana Enterprise Traces cluster&lt;/h1>
&lt;p>Tenants provide a mechanism for trace isolation.
Access policies may be set on a per-tenant basis.
Authorization of requests is based on specified access policies.&lt;/p></description></item><item><title>Monitor GET using Grafana Cloud</title><link>https://grafana.com/docs/enterprise-traces/v2.8.x/setup/metamonitoring/</link><pubDate>Thu, 24 Jul 2025 15:08:34 +0000</pubDate><guid>https://grafana.com/docs/enterprise-traces/v2.8.x/setup/metamonitoring/</guid><content><![CDATA[&lt;h1 id=&#34;monitor-get-using-grafana-cloud&#34;&gt;Monitor GET using Grafana Cloud&lt;/h1&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;Monitoring with Grafana Cloud is required for all GET installations.
Professional services will assist you in configuring monitoring for your GET installation.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;Metamonitoring for GET is handled by the &lt;a href=&#34;https://github.com/grafana/k8s-monitoring-helm&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Grafana &lt;code&gt;k8s-monitoring&lt;/code&gt; Helm chart&lt;/a&gt; (&amp;gt;=v2.1). Using Grafana Alloy to collect metrics and logs.&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin&#34;&gt;Before you begin&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Helm v3&#43;&lt;/li&gt;
&lt;li&gt;Supported Kubernetes cluster: EKS, AKS, and GKE.&lt;/li&gt;
&lt;li&gt;Existing &lt;a href=&#34;/docs/tempo-enterprisese-traces/latest/&#34;&gt;GET&lt;/a&gt; deployment in Kubernetes.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/products/cloud/&#34;&gt;Grafana Cloud&lt;/a&gt; account for metrics/logs storage&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;steps&#34;&gt;Steps&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Add the Grafana Helm Chart, or update if already added. This will be using the &lt;a href=&#34;https://github.com/grafana/k8s-monitoring-helm&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;K8s-Monitoring-Helm&lt;/a&gt; and the &lt;code&gt;values.yml&lt;/code&gt; file will be to set parameters in the Helm chart.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&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&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;helm repo add grafana https://grafana.github.io/helm-charts&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&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&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;helm repo update&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Generate &lt;code&gt;values.yml&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&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;cluster:
  name: enterprise-traces # Name of the cluster, this will populate the cluster label

integrations:
  tempo:
    instances:
      - name: &amp;#34;enterprise-traces&amp;#34; # This is the name for the instance label that will be reported.
        namespaces:
          - enterprise-traces # This is the namespace that will be searched for tempo instances, change this accordingly
        metrics:
          enabled: true
          portName: prom-metrics
        logs:
          enabled: true
        labelSelectors:
          app.kubernetes.io/name: tempo

  alloy:
    name: &amp;#34;alloy-enterprise&amp;#34;

destinations:
  - name: &amp;#34;enterprise-metrics&amp;#34;
    type: prometheus
    url: &amp;#34;&amp;lt;url&amp;gt;&amp;#34; # URL for prometheus, this can be found under your Grafana Cloud account and should look similiar to &amp;#34;https://prometheus-us-central1.grafana.net/api/prom/push&amp;#34;
    auth:
      type: basic
      username: &amp;#34;&amp;lt;username&amp;gt;&amp;#34; # Username for Grafana Cloud Prometheus 
      password: &amp;#34;&amp;lt;password&amp;gt;&amp;#34; # Password for Grafana Cloud Prometheus

  - name: &amp;#34;enterprise-logs&amp;#34;
    type: loki
    url: &amp;#34;&amp;lt;url&amp;gt;&amp;#34; # URL for loki, this can be found under your grafana cloud account and should look similiar to &amp;#34;https://logs-prod-us-central1.grafana.net/loki/api/v1/push&amp;#34;
    auth:
      type: basic
      username: &amp;#34;&amp;lt;username&amp;gt;&amp;#34; # Username for Grafana Cloud Loki 
      password: &amp;#34;&amp;lt;password&amp;gt;&amp;#34; # Password for Grafana Cloud Loki 

alloy-metrics:
  enabled: true

podLogs:
  enabled: true
  gatherMethod: kubernetesApi
  namespaces: [enterprise-traces] # Set to namespace
  collector: alloy-singleton

alloy-singleton:
  enabled: true

alloy-metrics:
  enabled: true # This will send Grafana Alloy metrics to ensure the monitoring is working properly.&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Install the Helm chart using the following command to create a daemonset that grabs Tempo logs:&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&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&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt; helm install k8s-monitoring grafana/k8s-monitoring \
  --namespace monitoring \
  --create-namespace \
  -f values.yml&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;View Logs and Metrics&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Log into Grafana Cloud. Select metrics drilldown and select &lt;code&gt;cluster=&amp;lt;cluster.name&amp;gt;&lt;/code&gt; where cluster.name is the name specified in the values.yml. Do the same for logs drilldown.&lt;/p&gt;
]]></content><description>&lt;h1 id="monitor-get-using-grafana-cloud">Monitor GET using Grafana Cloud&lt;/h1>
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>Monitoring with Grafana Cloud is required for all GET installations.
Professional services will assist you in configuring monitoring for your GET installation.&lt;/p></description></item></channel></rss>