<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Validate deployment on Grafana Labs</title><link>https://grafana.com/docs/tempo/v3.0.x/set-up-for-tracing/setup-tempo/test/</link><description>Recent content in Validate deployment on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/tempo/v3.0.x/set-up-for-tracing/setup-tempo/test/index.xml" rel="self" type="application/rss+xml"/><item><title>Validate your local Tempo deployment</title><link>https://grafana.com/docs/tempo/v3.0.x/set-up-for-tracing/setup-tempo/test/test-monolithic-local/</link><pubDate>Thu, 28 May 2026 17:50:33 +0100</pubDate><guid>https://grafana.com/docs/tempo/v3.0.x/set-up-for-tracing/setup-tempo/test/test-monolithic-local/</guid><content><![CDATA[&lt;h1 id=&#34;validate-your-local-tempo-deployment&#34;&gt;Validate your local Tempo deployment&lt;/h1&gt;
&lt;p&gt;After you&amp;rsquo;ve set up Grafana Tempo, the next step is to verify that traces are ingested, stored, and queryable.&lt;/p&gt;
&lt;p&gt;This page covers two levels of validation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quick validation&lt;/strong&gt; uses &lt;code&gt;telemetrygen&lt;/code&gt; and the Tempo HTTP API to confirm traces flow end-to-end from the command line, with no additional services required.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grafana validation&lt;/strong&gt; connects Grafana to your local Tempo instance so you can explore traces visually.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;before-you-begin&#34;&gt;Before you begin&lt;/h2&gt;
&lt;p&gt;To follow this procedure, you need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A locally installed and running Tempo service (refer to 
    &lt;a href=&#34;/docs/tempo/v3.0.x/set-up-for-tracing/setup-tempo/deploy/locally/linux/&#34;&gt;Deploy on Linux&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/cmd/telemetrygen&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenTelemetry &lt;code&gt;telemetrygen&lt;/code&gt;&lt;/a&gt; installed for generating test traces&lt;/li&gt;
&lt;li&gt;A running Grafana instance (refer to 
    &lt;a href=&#34;/docs/grafana/next/setup-grafana/installation/&#34;&gt;the installation instructions&lt;/a&gt;), only required for the &lt;a href=&#34;#verify-traces-in-grafana&#34;&gt;Grafana validation&lt;/a&gt; section&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;verify-tempo-is-running&#34;&gt;Verify Tempo is running&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Check the service status:&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;systemctl is-active tempo&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You should see the status &lt;code&gt;active&lt;/code&gt; returned. If you don&amp;rsquo;t, check that the configuration file is correct, and then restart the service.
You can also use &lt;code&gt;journalctl -u tempo&lt;/code&gt; to view the logs for Tempo to determine if there are any obvious reasons for failure to start.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that Tempo created the storage subdirectories:&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;ls /data/tempo/&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You should see &lt;code&gt;wal&lt;/code&gt; and &lt;code&gt;blocks&lt;/code&gt; directories.&lt;/p&gt;
&lt;p&gt;If you configured Tempo with an S3-compatible backend instead of local storage, refer to 
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/hosted-storage/s3/#verify-data-in-your-s3-compatible-store&#34;&gt;Verify data in your S3-compatible store&lt;/a&gt; for storage verification steps.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;send-test-traces&#34;&gt;Send test traces&lt;/h2&gt;
&lt;p&gt;Use &lt;a href=&#34;https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/cmd/telemetrygen&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenTelemetry &lt;code&gt;telemetrygen&lt;/code&gt;&lt;/a&gt; to send traces to Tempo. The following command sends 100 traces (20 per second for 5 seconds) over OTLP gRPC:&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;telemetrygen traces --otlp-insecure --rate 20 --duration 5s --otlp-endpoint localhost:4317&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;verify-traces-using-the-tempo-api&#34;&gt;Verify traces using the Tempo API&lt;/h2&gt;
&lt;p&gt;After sending traces, you can verify them directly using the Tempo HTTP API. No additional services are required.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Search for recent 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;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;curl -s http://localhost:3200/api/search | jq .&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You should see a &lt;code&gt;traces&lt;/code&gt; array containing your test traces. Each entry includes a &lt;code&gt;traceID&lt;/code&gt;, &lt;code&gt;rootServiceName&lt;/code&gt;, and &lt;code&gt;rootTraceName&lt;/code&gt;. For example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JSON&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-json&#34;&gt;{
  &amp;#34;traces&amp;#34;: [
    {
      &amp;#34;traceID&amp;#34;: &amp;#34;abc123...&amp;#34;,
      &amp;#34;rootServiceName&amp;#34;: &amp;#34;telemetrygen&amp;#34;,
      &amp;#34;rootTraceName&amp;#34;: &amp;#34;lets-go&amp;#34;,
      &amp;#34;startTimeUnixNano&amp;#34;: &amp;#34;1776912138880042305&amp;#34;
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Trace data appears in search results after the live store flushes completed blocks to disk, which can take 15–30 seconds. If the &lt;code&gt;traces&lt;/code&gt; array is empty, wait and retry.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Retrieve a specific trace by ID using a &lt;code&gt;traceID&lt;/code&gt; value from the search results:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;curl -s http://localhost:3200/api/v2/traces/&amp;lt;TRACE_ID&amp;gt; | jq .&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Replace &lt;code&gt;&amp;lt;TRACE_ID&amp;gt;&lt;/code&gt; with an actual trace ID from the previous step.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If both commands return trace data, your Tempo installation is ingesting, storing, and serving traces correctly.&lt;/p&gt;
&lt;p&gt;Refer to the 
    &lt;a href=&#34;/docs/tempo/v3.0.x/api_docs/&#34;&gt;Tempo HTTP API documentation&lt;/a&gt; for the full API reference and 
    &lt;a href=&#34;/docs/tempo/v3.0.x/api_docs/pushing-spans-with-http/&#34;&gt;Push spans with HTTP&lt;/a&gt; for an alternative approach using &lt;code&gt;curl&lt;/code&gt; to send traces.&lt;/p&gt;
&lt;h2 id=&#34;verify-traces-in-grafana&#34;&gt;Verify traces in Grafana&lt;/h2&gt;
&lt;p&gt;If you have a Grafana instance running, you can verify that traces are visible in the Grafana Explore view. If Grafana is not already installed, refer to 
    &lt;a href=&#34;/docs/grafana/next/setup-grafana/installation/&#34;&gt;the installation instructions&lt;/a&gt;. For the full Tempo data source configuration reference, refer to 
    &lt;a href=&#34;/docs/grafana/next/datasources/tempo/configure-tempo-data-source/&#34;&gt;Configure the Tempo data source&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;In Grafana, navigate to &lt;strong&gt;Connections&lt;/strong&gt; &amp;gt; &lt;strong&gt;Data sources&lt;/strong&gt; and select &lt;strong&gt;Add 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; and set the URL to &lt;code&gt;http://localhost:3200&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select &lt;strong&gt;Save &amp;amp; Test&lt;/strong&gt;. You should see a message that says &lt;code&gt;Data source is working&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Navigate to the &lt;strong&gt;Explore&lt;/strong&gt; page, select the &lt;strong&gt;Tempo&lt;/strong&gt; data source, and choose the &lt;strong&gt;Search&lt;/strong&gt; query type.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select &lt;strong&gt;Run query&lt;/strong&gt; to list the recent traces stored in Tempo. You should see traces from &lt;code&gt;telemetrygen&lt;/code&gt; in the results. Select a trace to view its spans:&lt;/p&gt;
&lt;figure
       class=&#34;figure-wrapper figure-wrapper__lightbox w-100p &#34;
       style=&#34;max-width: 1541px;&#34;
       itemprop=&#34;associatedMedia&#34;
       itemscope=&#34;&#34;
       itemtype=&#34;http://schema.org/ImageObject&#34;
     &gt;&lt;a
           class=&#34;lightbox-link&#34;
           href=&#34;/media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-builder-span-details-v11.png&#34;
           itemprop=&#34;contentUrl&#34;
         &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
             class=&#34;lazyload &#34;
             data-src=&#34;/media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-builder-span-details-v11.png&#34;data-srcset=&#34;/media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-builder-span-details-v11.png?w=320 320w, /media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-builder-span-details-v11.png?w=550 550w, /media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-builder-span-details-v11.png?w=750 750w, /media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-builder-span-details-v11.png?w=900 900w, /media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-builder-span-details-v11.png?w=1040 1040w, /media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-builder-span-details-v11.png?w=1240 1240w, /media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-builder-span-details-v11.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;Use the query builder to explore tracing data in Grafana&#34;width=&#34;1541&#34;height=&#34;912&#34;/&gt;
           &lt;noscript&gt;
             &lt;img
               src=&#34;/media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-builder-span-details-v11.png&#34;
               alt=&#34;Use the query builder to explore tracing data in Grafana&#34;width=&#34;1541&#34;height=&#34;912&#34;/&gt;
           &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;optional-metrics-generator&#34;&gt;Optional: Metrics-generator&lt;/h3&gt;
&lt;p&gt;If you are using the metrics-generator, you can enable it to generate metrics from the traces.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Edit the configuration at &lt;code&gt;/etc/tempo/config.yml&lt;/code&gt; and add or update the &lt;code&gt;metrics_generator&lt;/code&gt; section. Set the &lt;code&gt;remote_write&lt;/code&gt; URL to the address of your Prometheus-compatible storage instance. The configuration section should look 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;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;metrics_generator:
  storage:
    path: /tmp/tempo/generator/wal
    remote_write:
      - url: http://localhost:9090/api/v1/write
        send_exemplars: true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Save the file and exit the editor.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Restart the Tempo service:&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;sudo systemctl restart tempo&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;After a couple of minutes, select the &lt;strong&gt;Service graph&lt;/strong&gt; tab for the Tempo data source in the &lt;strong&gt;Explore&lt;/strong&gt; page. Select &lt;strong&gt;Run query&lt;/strong&gt; to view a service graph, generated by the Tempo metrics-generator.
&lt;figure
       class=&#34;figure-wrapper figure-wrapper__lightbox w-100p &#34;
       style=&#34;max-width: 1290px;&#34;
       itemprop=&#34;associatedMedia&#34;
       itemscope=&#34;&#34;
       itemtype=&#34;http://schema.org/ImageObject&#34;
     &gt;&lt;a
           class=&#34;lightbox-link&#34;
           href=&#34;/media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-query-service-graph.png&#34;
           itemprop=&#34;contentUrl&#34;
         &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
             class=&#34;lazyload &#34;
             data-src=&#34;/media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-query-service-graph.png&#34;data-srcset=&#34;/media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-query-service-graph.png?w=320 320w, /media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-query-service-graph.png?w=550 550w, /media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-query-service-graph.png?w=750 750w, /media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-query-service-graph.png?w=900 900w, /media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-query-service-graph.png?w=1040 1040w, /media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-query-service-graph.png?w=1240 1240w, /media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-query-service-graph.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;Service graph sample&#34;width=&#34;1290&#34;height=&#34;1145&#34;/&gt;
           &lt;noscript&gt;
             &lt;img
               src=&#34;/media/docs/grafana/data-sources/tempo/query-editor/tempo-ds-query-service-graph.png&#34;
               alt=&#34;Service graph sample&#34;width=&#34;1290&#34;height=&#34;1145&#34;/&gt;
           &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;After you validate your local Tempo deployment, consider exploring these topics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v3.0.x/set-up-for-tracing/instrument-send/&#34;&gt;Instrument for distributed tracing&lt;/a&gt; to send traces from your own applications instead of a test generator&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/&#34;&gt;Configure Tempo&lt;/a&gt; to customize settings for your environment&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v3.0.x/operations/monitor/set-up-monitoring/&#34;&gt;Set up monitoring for Tempo&lt;/a&gt; to observe your Tempo instance with dashboards and alerts&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/tempo/v3.0.x/configuration/use-trace-data/&#34;&gt;Use tracing data in Grafana&lt;/a&gt; to learn more about querying and visualizing traces&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="validate-your-local-tempo-deployment">Validate your local Tempo deployment&lt;/h1>
&lt;p>After you&amp;rsquo;ve set up Grafana Tempo, the next step is to verify that traces are ingested, stored, and queryable.&lt;/p>
&lt;p>This page covers two levels of validation:&lt;/p></description></item><item><title>Validate Kubernetes deployment using a test application</title><link>https://grafana.com/docs/tempo/v3.0.x/set-up-for-tracing/setup-tempo/test/set-up-test-app/</link><pubDate>Thu, 28 May 2026 17:50:33 +0100</pubDate><guid>https://grafana.com/docs/tempo/v3.0.x/set-up-for-tracing/setup-tempo/test/set-up-test-app/</guid><content><![CDATA[&lt;h1 id=&#34;validate-kubernetes-deployment-using-a-test-application&#34;&gt;Validate Kubernetes deployment using a test application&lt;/h1&gt;
&lt;p&gt;Once you&amp;rsquo;ve set up a Grafana Tempo cluster, you need to write some traces to it and then query the traces from within Grafana.
This procedure uses Tempo in microservices mode.
For example, if you &lt;a href=&#34;../../deploy/kubernetes/tanka/&#34;&gt;set up Tempo using the Kubernetes with Tanka procedure&lt;/a&gt;, then you can use this procedure to validate your set up.&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin&#34;&gt;Before you begin&lt;/h2&gt;
&lt;p&gt;You&amp;rsquo;ll need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Grafana 10.0.0 or higher&lt;/li&gt;
&lt;li&gt;Microservice deployments require the Tempo query frontend URL, for example: &lt;code&gt;http://&amp;lt;TEMPO-QUERY-FRONTEND-SERVICE&amp;gt;.&amp;lt;NAMESPACE&amp;gt;.svc.cluster.local:3200/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/cmd/telemetrygen&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenTelemetry telemetrygen&lt;/a&gt; for generating tracing data&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;Service names depend on how you deployed Tempo. For Tanka deployments, services use plain names like &lt;code&gt;distributor&lt;/code&gt; and &lt;code&gt;query-frontend&lt;/code&gt;. For Helm deployments, services are prefixed with the release name, for example &lt;code&gt;tempo-cluster-distributor&lt;/code&gt;. Update the service names in the examples below to match your deployment.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;Refer to 
    &lt;a href=&#34;/docs/grafana/next/setup-grafana/installation/kubernetes/&#34;&gt;Deploy Grafana on Kubernetes&lt;/a&gt; if you are using Kubernetes.
Otherwise, refer to 
    &lt;a href=&#34;/docs/grafana/next/setup-grafana/installation/&#34;&gt;Install Grafana&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h2 id=&#34;configure-grafana-alloy-to-remote-write-to-tempo&#34;&gt;Configure Grafana Alloy to remote-write to Tempo&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;You can skip this section if you have already configured Alloy to send traces to Tempo.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;



&lt;div data-shared=&#34;alloy-remote-write-tempo.md&#34;&gt;
            &lt;!-- Use Alloy to remote-write traces to Tempo shared file. --&gt;
&lt;p&gt;This section uses a 
    &lt;a href=&#34;/docs/alloy/v2.10.x/set-up/install/kubernetes/&#34;&gt;Grafana Alloy Helm chart&lt;/a&gt; deployment to send traces to Tempo.&lt;/p&gt;
&lt;p&gt;To do this, you need to create a configuration that can be used by Alloy to receive and export traces in OTLP &lt;code&gt;protobuf&lt;/code&gt; format.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a new &lt;code&gt;values.yaml&lt;/code&gt; file which we&amp;rsquo;ll use as part of the Alloy install.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Edit the &lt;code&gt;values.yaml&lt;/code&gt; file and add the following configuration to it:&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.tempo.input,
          ]
        }
      }

      // Define an OTLP gRPC exporter to send all received traces to Tempo.
      // The unique label &amp;#39;tempo&amp;#39; is added to uniquely identify this exporter.
      otelcol.exporter.otlp &amp;#34;tempo&amp;#34; {
          // Define the client for exporting.
          client {
             // Send to the Tempo distributor on port 4317 (OTLP gRPC).
             endpoint = &amp;#34;distributor.tempo.svc.cluster.local:4317&amp;#34;
              // Disable TLS for OTLP export.
              tls {
                  // The connection is insecure.
                  insecure = true
                  // Do not verify TLS certificates when connecting.
                  insecure_skip_verify = true
              }
          }
      }&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Update the distributor endpoint to match your deployment. The service name and namespace depend on how you deployed Tempo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tanka: &lt;code&gt;distributor.&amp;lt;NAMESPACE&amp;gt;.svc.cluster.local:4317&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Helm: &lt;code&gt;&amp;lt;RELEASE-NAME&amp;gt;-distributor.&amp;lt;NAMESPACE&amp;gt;.svc.cluster.local:4317&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploy Alloy using Helm:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;helm install -f values.yaml grafana-alloy grafana/alloy&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you deploy Alloy into a specific namespace, create the namespace first and specify it to Helm by appending &lt;code&gt;--namespace=&amp;lt;grafana-alloy-namespace&amp;gt;&lt;/code&gt; to the end of the command.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

        
&lt;h2 id=&#34;create-a-grafana-tempo-data-source&#34;&gt;Create a Grafana Tempo data source&lt;/h2&gt;
&lt;p&gt;To allow Grafana to read traces from Tempo, you must create a Tempo data source.&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 &lt;strong&gt;Add 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;TEMPO-QUERY-FRONTEND-SERVICE&amp;gt;:&amp;lt;HTTP-LISTEN-PORT&amp;gt;/&lt;/code&gt;, filling in the path to the Tempo query frontend service and the HTTP listen port (default &lt;code&gt;3200&lt;/code&gt;).
For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tanka deployment: &lt;code&gt;http://query-frontend.tempo.svc.cluster.local:3200&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Helm deployment: &lt;code&gt;http://tempo-cluster-query-frontend.&amp;lt;NAMESPACE&amp;gt;.svc.cluster.local:3200&lt;/code&gt;&lt;/li&gt;
&lt;/ul&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;After you have created a data source, you can visualize your traces in the &lt;strong&gt;Grafana Explore&lt;/strong&gt; page.
For more information, refer to 
    &lt;a href=&#34;/docs/tempo/v3.0.x/introduction/tempo-in-grafana/&#34;&gt;Tempo in Grafana&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;use-opentelemetry-telemetrygen-to-generate-tracing-data&#34;&gt;Use OpenTelemetry &lt;code&gt;telemetrygen&lt;/code&gt; to generate tracing data&lt;/h3&gt;
&lt;p&gt;You can use &lt;a href=&#34;https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/cmd/telemetrygen&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenTelemetry &lt;code&gt;telemetrygen&lt;/code&gt;&lt;/a&gt; to generate tracing data to test your Tempo installation.&lt;/p&gt;
&lt;p&gt;These instructions use the endpoints for both Grafana Alloy and the Tempo distributor, for example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;grafana-alloy.grafana-alloy.svc.cluster.local&lt;/code&gt; for Grafana Alloy&lt;/li&gt;
&lt;li&gt;&lt;code&gt;distributor.tempo.svc.cluster.local&lt;/code&gt; for the Tempo distributor (Tanka deployment)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Update the endpoints to match your deployment.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install &lt;code&gt;telemetrygen&lt;/code&gt; using the &lt;a href=&#34;https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/cmd/telemetrygen&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;installation procedure&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;You don&amp;rsquo;t need to configure an OpenTelemetry Collector because this procedure uses Grafana Alloy.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Generate traces using &lt;code&gt;telemetrygen&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;telemetrygen traces --otlp-insecure --rate 20 --duration 5s --otlp-endpoint grafana-alloy.grafana-alloy.svc.cluster.local:4317&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This configuration sends traces to Alloy for 5 seconds, at a rate of 20 traces per second.&lt;/p&gt;
&lt;p&gt;Optionally, you can also send traces directly to Tempo without using Alloy as a collector:&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;telemetrygen traces --otlp-insecure --rate 20 --duration 5s --otlp-endpoint distributor.tempo.svc.cluster.local:4317&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you&amp;rsquo;re running &lt;code&gt;telemetrygen&lt;/code&gt; on your local machine, ensure that you first port-forward to the relevant Alloy or Tempo distributor service, for example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;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 port-forward services/grafana-alloy 4317:4317 --namespace grafana-alloy&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Alternatively, you can create a cronjob to send traces periodically based on this template:&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;apiVersion: batch/v1
kind: CronJob
metadata:
  name: sample-traces
spec:
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 1
  failedJobsHistoryLimit: 2
  schedule: &amp;#34;0 * * * *&amp;#34;
  jobTemplate:
    spec:
      backoffLimit: 0
      ttlSecondsAfterFinished: 3600
      template:
        spec:
          containers:
          - name: traces
            image: ghcr.io/open-telemetry/opentelemetry-collector-contrib/telemetrygen:v0.150.0
            args:
              - traces
              - --otlp-insecure
              - --rate
              - &amp;#34;20&amp;#34;
              - --duration
              - 5s
              - --otlp-endpoint
              - grafana-alloy.grafana-alloy.svc.cluster.local:4317
          restartPolicy: Never&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To view the tracing data:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Go to Grafana and select &lt;strong&gt;Explore&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select the &lt;strong&gt;Tempo data source&lt;/strong&gt; from the list of data sources.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select the &lt;code&gt;Search&lt;/code&gt; Query type.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select &lt;strong&gt;Run query&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Confirm that traces are displayed in the traces &lt;strong&gt;Explore&lt;/strong&gt; panel. You should see 5 seconds worth of traces, 100 traces in total per run of &lt;code&gt;telemetrygen&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&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;Clone the &lt;a href=&#34;https://github.com/grafana/intro-to-mltp&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Intro to MLTP repository&lt;/a&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;git clone https://github.com/grafana/intro-to-mltp.git
cd intro-to-mltp/k8s/mythical&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&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 Grafana Alloy location. For example, based on Alloy installed in the default namespace 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: grafana-alloy.grafana-alloy.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 and select the &lt;strong&gt;Explore&lt;/strong&gt; menu item.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Tempo 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="validate-kubernetes-deployment-using-a-test-application">Validate Kubernetes deployment using a test application&lt;/h1>
&lt;p>Once you&amp;rsquo;ve set up a Grafana Tempo cluster, you need to write some traces to it and then query the traces from within Grafana.
This procedure uses Tempo in microservices mode.
For example, if you &lt;a href="../../deploy/kubernetes/tanka/">set up Tempo using the Kubernetes with Tanka procedure&lt;/a>, then you can use this procedure to validate your set up.&lt;/p></description></item></channel></rss>