<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Elastic Observability Labs - Articles by Edward Lewis</title>
        <link>https://www.elastic.co/observability-labs</link>
        <description>Trusted security news &amp; research from the team at Elastic.</description>
        <lastBuildDate>Tue, 02 Jun 2026 15:14:47 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Elastic Observability Labs - Articles by Edward Lewis</title>
            <url>https://www.elastic.co/observability-labs/assets/observability-labs-thumbnail.png</url>
            <link>https://www.elastic.co/observability-labs</link>
        </image>
        <copyright>© 2026. Elasticsearch B.V. All Rights Reserved</copyright>
        <item>
            <title><![CDATA[Configure downsampling directly in Elastic Streams, no more JSON editing needed]]></title>
            <link>https://www.elastic.co/observability-labs/blog/configure-downsampling-elastic-streams</link>
            <guid isPermaLink="false">configure-downsampling-elastic-streams</guid>
            <pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Configure downsampling in Elastic Streams alongside retention and tiers, with a live preview and validation. No more editing ILM or lifecycle JSON.]]></description>
            <content:encoded><![CDATA[<p>Starting in Elastic 9.4 (generally available), <a href="https://www.elastic.co/docs/solutions/observability/streams/streams">Streams</a> lets you view and configure downsampling directly in the Retention tab, alongside retention periods, data tiers, and ingestion context. Open a stream, see how it ages, and change it in one place.</p>
<p>Elasticsearch has supported downsampling for a while, through <a href="https://www.elastic.co/docs/manage-data/data-store/data-streams/run-downsampling">ILM policies and data stream lifecycle</a>. But configuring it meant leaving the stream you were looking at, finding the right policy or lifecycle definition, editing JSON, and hoping the intervals were valid. That round trip is gone.</p>
<h2>ILM-backed streams</h2>
<p>ILM ties downsampling to phases. Each phase (hot, warm, cold) can carry one downsample action with a <code>fixed_interval</code>. Streams now shows these actions on the data lifecycle timeline. Click a phase to open a flyout, set the interval, and watch the timeline update before you save.</p>
<p><img src="https://www.elastic.co/observability-labs/assets/images/configure-downsampling-elastic-streams/ilm-phase-flyout.png" alt="ILM phase flyout with downsample interval and live timeline preview in Elastic Streams" /></p>
<p>Here's the same policy as JSON. This is what Streams is reading and writing when you use the flyout:</p>
<pre><code class="language-json">{
  &quot;phases&quot;: {
    &quot;hot&quot;: {
      &quot;min_age&quot;: &quot;0ms&quot;,
      &quot;actions&quot;: {
        &quot;rollover&quot;: { &quot;max_age&quot;: &quot;1d&quot; },
        &quot;downsample&quot;: {
          &quot;fixed_interval&quot;: &quot;5m&quot;,
          &quot;wait_timeout&quot;: &quot;1d&quot;
        }
      }
    },
    &quot;warm&quot;: {
      &quot;min_age&quot;: &quot;2d&quot;,
      &quot;actions&quot;: {}
    },
    &quot;cold&quot;: {
      &quot;min_age&quot;: &quot;4d&quot;,
      &quot;actions&quot;: {
        &quot;downsample&quot;: {
          &quot;fixed_interval&quot;: &quot;10m&quot;,
          &quot;wait_timeout&quot;: &quot;1d&quot;
        }
      }
    },
    &quot;frozen&quot;: {
      &quot;min_age&quot;: &quot;8d&quot;,
      &quot;actions&quot;: {
        &quot;searchable_snapshot&quot;: {
          &quot;snapshot_repository&quot;: &quot;found-snapshots&quot;,
          &quot;force_merge_index&quot;: true
        }
      }
    },
    &quot;delete&quot;: {
      &quot;min_age&quot;: &quot;30d&quot;,
      &quot;actions&quot;: {
        &quot;delete&quot;: {
          &quot;delete_searchable_snapshot&quot;: true
        }
      }
    }
  }
}
</code></pre>
<p>ILM policies are often shared across multiple streams. If you edit one that's in use elsewhere, Streams warns you and offers <strong>Save as new policy</strong> so you can fork instead of changing the original.</p>
<p><img src="https://www.elastic.co/observability-labs/assets/images/configure-downsampling-elastic-streams/save-as-new-policy.png" alt="Save as new policy prompt when editing a shared ILM policy in Elastic Streams" /></p>
<h2>Data stream lifecycle (DLM) streams</h2>
<p><a href="https://www.elastic.co/docs/manage-data/data-store/data-streams">Data stream</a> lifecycle takes a different approach: instead of one downsample per phase, you define a sequence of steps (up to 10), each with an <code>after</code> delay and a <code>fixed_interval</code>. Streams shows this as a visual ladder you can build up step by step.</p>
<p><img src="https://www.elastic.co/observability-labs/assets/images/configure-downsampling-elastic-streams/dlm-downsample-steps.png" alt="DLM-backed stream showing multiple downsample steps in sequence on the lifecycle timeline" /></p>
<p>This is the same configuration, but as an API call. Each step in the UI maps to one object in the downsampling array:</p>
<pre><code class="language-json">{
  &quot;data_retention&quot;: &quot;14d&quot;,
  &quot;downsampling&quot;: [
    { &quot;after&quot;: &quot;1d&quot;, &quot;fixed_interval&quot;: &quot;5m&quot; },
    { &quot;after&quot;: &quot;3d&quot;, &quot;fixed_interval&quot;: &quot;1h&quot; },
    { &quot;after&quot;: &quot;7d&quot;, &quot;fixed_interval&quot;: &quot;4h&quot; }
  ]
}
</code></pre>
<h2>Get started</h2>
<ul>
<li>Open <strong>Streams</strong> in Kibana and select a stream backed by a <a href="https://www.elastic.co/docs/manage-data/data-store/data-streams/time-series-data-stream-tsds">time series data stream</a> (TSDS).</li>
<li>Go to the <strong>Retention</strong> tab. The data lifecycle timeline shows your current downsampling configuration (if any).</li>
<li>For ILM streams, click a phase on the timeline to open the flyout and configure the downsample interval.</li>
<li>For DLM streams, add or edit downsample steps directly in the lifecycle view.</li>
</ul>
<h2>Learn more</h2>
<ul>
<li><a href="https://www.elastic.co/docs/manage-data/data-store/data-streams/downsampling-concepts">Downsampling concepts</a></li>
<li><a href="https://www.elastic.co/docs/manage-data/data-store/data-streams/run-downsampling">Configuring downsampling (ILM and data stream lifecycle)</a></li>
<li><a href="https://www.elastic.co/docs/solutions/observability/streams/management/retention">Manage data retention for Streams</a></li>
</ul>
<p><em>The release and timing of any features or functionality described in this post remain at Elastic's sole discretion. Any features or functionality not currently available may not be delivered on time or at all.</em></p>
]]></content:encoded>
            <category>observability-labs</category>
            <enclosure url="https://www.elastic.co/observability-labs/assets/images/configure-downsampling-elastic-streams/article.jpg" length="0" type="image/jpg"/>
        </item>
    </channel>
</rss>