<?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 - TSDB</title>
        <link>https://www.elastic.co/observability-labs</link>
        <description>Trusted security news &amp; research from the team at Elastic.</description>
        <lastBuildDate>Wed, 22 Apr 2026 15:41:03 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Elastic Observability Labs - TSDB</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[Elastic's metrics analytics gets 5x faster]]></title>
            <link>https://www.elastic.co/observability-labs/blog/elastic-metrics-analytics</link>
            <guid isPermaLink="false">elastic-metrics-analytics</guid>
            <pubDate>Wed, 28 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore Elastic's metrics analytics enhancements, including faster ES|QL queries, TSDS updates and OpenTelemetry exponential histogram support.]]></description>
            <content:encoded><![CDATA[<p>In our <a href="https://www.elastic.co/observability-labs/blog/metrics-explore-analyze-with-esql-discover">previous blog in this series</a>, we explored the fundamentals of analyzing metrics using the Elasticsearch Query Language (ES|QL) and the interactive power of Discover. Building on that foundation, we are excited to announce a suite of powerful enhancements to Time Series Data Streams (Elastic’s TSDB) and ES|QL designed to provide even more comprehensive and blazingly faster metrics analytics capabilities!</p>
<p>These latest updates, available in v9.3 and in Serverless, introduce significant performance gains, sophisticated time series functions, and native OpenTelemetry exponential histogram support that directly benefit SREs and Observability practitioners.</p>
<h2>Query Performance and Storage Optimizations</h2>
<p>Speed is paramount when diagnosing incidents. Compared to prior releases, we have achieved a 5x+ improvement in query latency when wildcarding or filtering by dimensions. Additionally, storage efficiency for OpenTelemetry metrics data has improved by approximately 2x, significantly reducing the infrastructure footprint required to retain high-volume observability data. If you’re hungry to learn more about what architectural updates are driving these optimizations, stay tuned… Tech blogs are on their way! </p>
<h2>Expanded Time Series Analytics in ES|QL</h2>
<p>The <a href="https://www.elastic.co/docs/reference/query-languages/esql/commands/ts">ESQL TS source command</a>, which targets time series indices and enables <a href="https://www.elastic.co/docs/reference/query-languages/esql/functions-operators/time-series-aggregation-functions">time series aggregation functions</a>, has been significantly enhanced to support complex analytics capabilities.</p>
<p>We have expanded the <a href="https://www.elastic.co/docs/reference/query-languages/esql/esql-functions-operators">library of time series functions</a> to include essential tools for identifying anomalies and trends.</p>
<ul>
<li><code>PERCENTILE_OVER_TIME</code>, <code>STDDEV_OVER_TIME</code>, <code>VARIANCE_OVER_TIME</code>: Calculate the percentile, standard deviation, or variance of a field over time, which is critical for understanding distribution and variability in service latency or resource usage.</li>
</ul>
<p>Example: Seeing the worst-case latency in 5-minute intervals.</p>
<pre><code class="language-bash">TS metrics*  | STATS MAX(PERCENTILE_OVER_TIME(kafka.consumer.fetch_latency_avg, 99))
  BY TBUCKET(5m)
</code></pre>
<ul>
<li><code>DERIV</code>: This command calculates the derivative of a numeric field over time using linear regression, useful for analyzing the rate of change in system metrics.</li>
</ul>
<p>Example: trending gauge values over time.</p>
<pre><code class="language-bash">TS metrics*  | STATS AVG(DERIV(container.memory.available))
  BY TBUCKET(1 hour)
</code></pre>
<ul>
<li><code>CLAMP</code>: To handle noisy data or outliers, this function limits sample values to a specified lower and upper bound.</li>
</ul>
<p>Example: handling saturation metrics (like CPU or Memory utilization) where spikes or measurement errors can occasionally report values over 100%, making the rest of the data look like a flat line at the bottom of the chart.\</p>
<pre><code class="language-bash">TS metrics*  | STATS AVG(CLAMP(k8s.pod.memory.node.utilization, 0, 100))
  BY k8s.pod.name
</code></pre>
<ul>
<li><code>TRANGE</code>: This new filter function allows you to filter data for a specific time range using the <code>@timestamp</code> attribute, simplifying query syntax for time-bound investigations.</li>
</ul>
<p>Example: Filtering and showing metrics for the last 4 hours.</p>
<pre><code class="language-bash">TS metrics*  | WHERE TRANGE(4h) | STATS AVG(host.cpu.pct)
  BY TBUCKET(5m)
</code></pre>
<p><strong>Window Functions</strong> To smoothen results over specific periods, ES|QL now introduces window functions. Most time series aggregation functions now accept an optional second argument that specifies a sliding time window. For example, you can calculate a rate over a 10-minute sliding window while bucketing results by minute.</p>
<p>Example: Calculating the average rate of requests per host for every minute, using values over a sliding window of 5 minutes.</p>
<pre><code class="language-bash">TS metrics*  | STATS AVG(RATE(app.frontend.requests, 5m))
  BY TBUCKET(1m)
</code></pre>
<p>Accepted window values are currently limited to multiples of the time bucket interval in the BY clause. Windows that are smaller than the time bucket interval or larger but not a multiple of the time bucket interval will be supported in feature releases. </p>
<h2>Native OpenTelemetry Exponential Histograms</h2>
<p>Elastic now provides native support for OpenTelemetry exponential histograms, enabling efficient ingest, querying, and downsampling of high-fidelity distribution data.</p>
<p>We have introduced a new <a href="https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/exponential-histogram">exponential_histogram</a> field type designed to capture distributions with fixed, exponentially spaced bucket boundaries. Because these fields are primarily intended for aggregations, the histogram is stored as compact doc values and is not indexed, optimizing storage efficiency. These fields are fully supported in ES|QL aggregation functions such as <code>PERCENTILES</code>, <code>AVG</code>, <code>MIN</code>, <code>MAX</code>, and <code>SUM</code>.</p>
<p>You can index documents with exponential histograms automatically through our <a href="https://www.elastic.co/docs/manage-data/data-store/data-streams/tsds-ingest-otlp#configure-histogram-handling">OTLP endpoint</a> or manually. For example, let’s create an index with an exponential histogram field and a keyword field:</p>
<pre><code class="language-bash">PUT my-index-000001
{
  &quot;settings&quot;: {
    &quot;index&quot;: {
      &quot;mode&quot;: &quot;time_series&quot;,
      &quot;routing_path&quot;: [&quot;http.path&quot;],
      &quot;time_series&quot;: {
        &quot;start_time&quot;: &quot;2026-01-21T00:00:00Z&quot;,
        &quot;end_time&quot;: &quot;2026-01-25T00:00:00Z&quot;
     }
    }
  },
  &quot;mappings&quot;: {
    &quot;properties&quot;: {
      &quot;@timestamp&quot;: {
        &quot;type&quot;: &quot;date&quot;
      },
      &quot;http.path&quot;: {
        &quot;type&quot;: &quot;keyword&quot;,
        &quot;time_series_dimension&quot;: true
      },
      &quot;responseTime&quot;: {
        &quot;type&quot;: &quot;exponential_histogram&quot;,
        &quot;time_series_metric&quot;: &quot;histogram&quot;
      }
    }
  }
}
</code></pre>
<p>Index a document with a full exponential histogram payload:</p>
<pre><code class="language-bash">POST my-index-000001/_doc
{
  &quot;@timestamp&quot;: &quot;2026-01-22T21:25:00.000Z&quot;,
  &quot;http.path&quot;: &quot;/foo&quot;,
  &quot;responseTime&quot;: {
    &quot;scale&quot;:3,
    &quot;sum&quot;:73.2,
    &quot;min&quot;:3.12,
    &quot;max&quot;:7.02,
    &quot;positive&quot;: {
      &quot;indices&quot;:[13,14,15,16,17,18,19,20,21,22],
      &quot;counts&quot;:[1,1,2,2,1,2,1,3,1,1]
    }
  }
}

POST my-index-000001/_doc
{
  &quot;@timestamp&quot;: &quot;2026-01-22T21:26:00.000Z&quot;,
  &quot;http.path&quot;: &quot;/bar&quot;,
  &quot;responseTime&quot;: {
    &quot;scale&quot;:3,
    &quot;sum&quot;:45.86,
    &quot;min&quot;:2.15,
    &quot;max&quot;:5.1,
    &quot;positive&quot;: {
      &quot;indices&quot;:[8,9,10,11,12,13,14,15,16,17,18],
      &quot;counts&quot;:[1,1,1,1,1,1,1,2,1,1,2]
    }
  }
}
</code></pre>
<p>And finally, query the time series index using ES|QL and the TS source command:</p>
<pre><code class="language-bash">TS my-index-000001  | STATS MIN(responseTime), MAX(responseTime),
        AVG(responseTime), MEDIAN(responseTime),
        PERCENTILE(responseTime, 90)
  BY http.path
</code></pre>
<p><img src="https://www.elastic.co/observability-labs/assets/images/elastic-metrics-analytics/exponential_histogram_esql_example.png" alt="Alt text" /></p>
<h2>Enhanced Downsampling</h2>
<p>Downsampling is essential for long-term data retention. We have introduced a new <a href="https://www.elastic.co/docs/manage-data/data-store/data-streams/downsampling-concepts#downsampling-methods">&quot;last value&quot; downsampling mode</a>. This method exchanges accuracy for storage efficiency and performance by keeping only the last sample value, providing a lightweight alternative to calculating aggregate metrics.</p>
<p>You can <a href="https://www.elastic.co/docs/manage-data/data-store/data-streams/run-downsampling">configure a time series data stream</a> for last value downsampling in a similar way as regular downsampling, just by setting the <code>downsampling_method</code> to <code>last_value</code>. For example, by using a data stream lifecycle:</p>
<pre><code class="language-bash">PUT _data_stream/my-data-stream/_lifecycle
{
  &quot;data_retention&quot;: &quot;7d&quot;,
  &quot;downsampling_method&quot;: &quot;last_value&quot;,
  &quot;downsampling&quot;: [
     {
       &quot;after&quot;: &quot;1m&quot;,
       &quot;fixed_interval&quot;: &quot;10m&quot;
      },
      {
        &quot;after&quot;: &quot;1d&quot;,
        &quot;fixed_interval&quot;: &quot;1h&quot;
      }
   ]
}
</code></pre>
<h2>In Conclusion</h2>
<p>These enhancements mark a significant step forward in Elastic's metrics analytics capabilities, delivering 5x+ faster query latency, 2x storage efficiency and specialized commands like <code>DERIV</code>, <code>CLAMP</code>, and <code>PERCENTILE_OVER_TIME</code>. With native support for OpenTelemetry exponential histograms and expanded downsampling options, SREs can now perform richer, more cost-effective analysis on their observability data. This release empowers teams to detect anomalies faster and manage long-term metrics retention with greater efficiency.</p>
<p>We welcome you to <a href="https://cloud.elastic.co/serverless-registration?onboarding_token=observability">try the new features</a> today!</p>
]]></content:encoded>
            <category>observability-labs</category>
            <enclosure url="https://www.elastic.co/observability-labs/assets/images/elastic-metrics-analytics/elastic_metrics_leaner_blog_image.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[How to use Elasticsearch and Time Series Data Streams for observability metrics]]></title>
            <link>https://www.elastic.co/observability-labs/blog/time-series-data-streams-observability-metrics</link>
            <guid isPermaLink="false">time-series-data-streams-observability-metrics</guid>
            <pubDate>Thu, 04 May 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[With Time Series Data Streams (TSDS), Elasticsearch introduces optimized storage for metrics time series. Check out how we use it for Elastic Observability.]]></description>
            <content:encoded><![CDATA[<p>Elasticsearch is used for a wide variety of data types — one of these is metrics. With the introduction of Metricbeat many years ago and later our APM Agents, the metric use case has become more popular. Over the years, Elasticsearch has made many improvements on how to handle things like metrics aggregations and sparse documents. At the same time, <a href="https://www.elastic.co/guide/en/kibana/current/tsvb.html">TSVB visualizations</a> were introduced to make visualizing metrics easier. One concept that was missing that exists for most other metric solutions is the concept of time series with dimensions.</p>
<p>Mid 2021, the Elasticsearch team <a href="https://github.com/elastic/elasticsearch/issues/74660">embarked</a> on making Elasticsearch a much better fit for metrics. The team created <a href="https://www.elastic.co/guide/en/elasticsearch/reference/master/tsds.html">Time Series Data Streams (TSDS)</a>, which were released in 8.7 as generally available (GA).</p>
<p>This blog post dives into how TSDS works and how we use it in Elastic Observability, as well as how you can use it for your own metrics.</p>
<h2>A quick introduction to TSDS</h2>
<p><a href="https://www.elastic.co/guide/en/elasticsearch/reference/master/tsds.html">Time Series Data Streams (TSDS)</a> are built on top of data streams in Elasticsearch that are optimized for time series. To create a data stream for metrics, an additional setting on the data stream is needed. As we are using data streams, first an Index Template has to be created:</p>
<pre><code class="language-json">PUT _index_template/metrics-laptop
{
  &quot;index_patterns&quot;: [
    &quot;metrics-laptop-*&quot;
  ],
  &quot;data_stream&quot;: {},
  &quot;priority&quot;: 200,
  &quot;template&quot;: {
    &quot;settings&quot;: {
      &quot;index.mode&quot;: &quot;time_series&quot;
    },
    &quot;mappings&quot;: {
      &quot;properties&quot;: {
        &quot;host.name&quot;: {
          &quot;type&quot;: &quot;keyword&quot;,
          &quot;time_series_dimension&quot;: true
        },
        &quot;packages.sent&quot;: {
          &quot;type&quot;: &quot;integer&quot;,
          &quot;time_series_metric&quot;: &quot;counter&quot;
        },
        &quot;memory.usage&quot;: {
          &quot;type&quot;: &quot;double&quot;,
          &quot;time_series_metric&quot;: &quot;gauge&quot;
        }
      }
    }
  }
}
</code></pre>
<p>Let's have a closer look at this template. On the top part, we mark the index pattern with metrics-laptop-*. Any pattern can be selected, but it is recommended to use the <a href="https://www.elastic.co/blog/an-introduction-to-the-elastic-data-stream-naming-scheme">data stream naming scheme</a> for all your metrics. The next section sets the &quot;index.mode&quot;: &quot;time_series&quot; in combination with making sure it is a data_stream: &quot;data_stream&quot;: {}.</p>
<h3>Dimensions</h3>
<p>Each time series data stream needs at least one dimension. In the example above, host.name is set as a dimension field with &quot;time_series_dimension&quot;: true. You can have up to 16 dimensions by default. Not every dimension must show up in each document. The dimensions define the time series. The general rule is to pick fields as dimensions that uniquely identify your time series. Often this is a unique description of the host/container, but for some metrics like disk metrics, the disk id is needed in addition. If you are curious about default recommended dimensions, have a look at this <a href="https://github.com/elastic/ecs/pull/2172">ECS contribution</a> with dimension properties.</p>
<h2>Reduced storage and increased query speed</h2>
<p>At this point, you already have a functioning time series data stream. Setting the index mode to time series automatically turns on <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#synthetic-source">synthetic source</a>. By default, Elasticsearch typically duplicates data three times:</p>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Column-oriented_DBMS#Row-oriented_systems">row-oriented storage</a> (_source field)</li>
<li><a href="https://en.wikipedia.org/wiki/Column-oriented_DBMS#Column-oriented_systems">column-oriented storage</a> (doc_values: true for aggregations)</li>
<li>indices (index: true for filtering and search)</li>
</ul>
<p>With synthetic source, the _source field is not persisted; instead, it is reconstructed from the doc values. Especially in the metrics use case, there are little benefits to keeping the source.</p>
<p>Not storing it means a significant reduction in storage. Time series data streams sort the data based on the dimensions and the time stamp. This means data that is usually queried together is stored together, which speeds up query times. It also means that the data points for a single time series are stored alongside each other on disk. This enables further compression of the data as the rate at which a counter increases is often relatively constant.</p>
<h2>Metric types</h2>
<p>But to benefit from all the advantages of TSDS, the field properties of the metrics fields must be extended with the <code>time_series_metric: {type}</code>. Several <a href="https://www.elastic.co/guide/en/elasticsearch/reference/master/tsds.html#time-series-metric">types are supported</a> — as an example, gauge and counter were used above. Giving Elasticsearch knowledge about the metric type allows Elasticsearch to offer more optimized queries for the different types and reduce storage usage further.</p>
<p>When you create your own templates for data streams under the <a href="https://www.elastic.co/blog/an-introduction-to-the-elastic-data-stream-naming-scheme">data stream naming scheme</a>, it is important that you set &quot;priority&quot;: 200 or higher, as otherwise the built-in default template will apply.</p>
<h2>Ingest a document</h2>
<p>Ingesting a document into a TSDS isn't in any way different from ingesting documents into Elasticsearch. You can use the following commands in Dev Tools to add a document, and then search for it and also check out the mappings. Note: You have to adjust the @timestamp field to be close to your current date and time.</p>
<pre><code class="language-bash"># Add a document with `host.name` as the dimension
POST metrics-laptop-default/_doc
{
  # This timestamp neesd to be adjusted to be current
  &quot;@timestamp&quot;: &quot;2023-03-30T12:26:23+00:00&quot;,
  &quot;host.name&quot;: &quot;ruflin.com&quot;,
  &quot;packages.sent&quot;: 1000,
  &quot;memory.usage&quot;: 0.8
}

# Search for the added doc, _source will show up but is reconstructed
GET metrics-laptop-default/_search

# Check out the mappings
GET metrics-laptop-default
</code></pre>
<p>If you do search, it still shows _source but this is reconstructed from the doc values. The additional field added above is @timestamp. This is important as it is a required field for any data stream.</p>
<h2>Why is this all important for Observability?</h2>
<p>One of the advantages of the Elastic Observability solution is that in a single storage engine, all signals are brought together in a single place. Users can query logs, metrics, and traces together without having to jump from one system to another. Because of this, having a great storage and query engine not only for logs but also metrics is key for us.</p>
<h2>Usage of TSDS in integrations</h2>
<p>With <a href="https://www.elastic.co/integrations/data-integrations">integrations</a>, we give our users an out of the box experience to integrate with their infrastructure and services. If you are using our integrations, eventually you will automatically get all the benefits of TSDS for your metrics assuming you are on version 8.7 or newer.</p>
<p>Currently we are working through the list of our integration packages, add the dimensions, metric type fields and then turn on TSDS for the metrics data streams. What this means is as soon as the package has all properties enabled, the only thing you have to do is upgrade the integration and everything else will happen automatically in the background.</p>
<p>To visualize your time series in Kibana, use <a href="https://www.elastic.co/guide/en/kibana/current/lens.html">Lens</a>, which has native support built in for TSDS.</p>
<h2>Learn more</h2>
<p>If you switch over to TSDS, you will automatically benefit from all the future improvements Elasticsearch is making for metrics time series, be it more efficient storage, query performance, or new aggregation capabilities. If you want to learn more about how TSDS works under the hood and all available config options, check out the <a href="https://www.elastic.co/guide/en/elasticsearch/reference/master/tsds.html">TSDS documentation</a>. What Elasticsearch supports in 8.7 is only the first iteration of the metrics time series in Elasticsearch.</p>
<p><a href="https://www.elastic.co/blog/whats-new-elasticsearch-8-7-0">TSDS can be used since 8.7</a> and will be in more and more of our integrations automatically when integrations are upgraded. All you will notice is lower storage usage and faster queries. Enjoy!</p>
]]></content:encoded>
            <category>observability-labs</category>
            <enclosure url="https://www.elastic.co/observability-labs/assets/images/time-series-data-streams-observability-metrics/ebpf-monitoring.jpeg" length="0" type="image/jpeg"/>
        </item>
        <item>
            <title><![CDATA[Exploring metrics from a new time series data stream in Discover]]></title>
            <link>https://www.elastic.co/observability-labs/blog/exploring-metrics-new-data-source-discover</link>
            <guid isPermaLink="false">exploring-metrics-new-data-source-discover</guid>
            <pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Discover helps you see and understand the metrics in a time series stream, with no manual work required. Once you see that your metrics data is flowing, you're ready to build dashboards, alerts, SLOs, and more.]]></description>
            <content:encoded><![CDATA[<p>Getting data into Elastic is the first step toward observability. Once you start ingesting it, the next question is: <strong>what metrics are we actually collecting, and do they look right?</strong></p>
<p>Whether you've added a new integration, set up an OpenTelemetry pipeline, or configured a custom agent for your infrastructure, you need to see what's landing in the cluster before you build dashboards, alerts, or SLOs on top of it. Discover gives you that view: the metrics in a time series stream, each rendered as a time series chart for your desired time range. No dashboard to build, no exploratory queries to write. Just the raw picture of what you have.</p>
<h2>Discover your data streams</h2>
<p>In the left navigation under <strong>Observability</strong>, open <strong>Streams</strong>. That page lists every data stream in your cluster, wherever it comes from: integrations, OpenTelemetry pipelines, custom agents, and similar sources. Each source you monitor (Docker, Kubernetes, Nginx, and so on) produces one or more data streams. Here you can see exactly what streams exist and what you can build on.</p>
<p>Open a stream to see its detail page.</p>
<p><img src="https://www.elastic.co/observability-labs/assets/images/exploring-metrics-new-data-source-discover/data-streams-view.png" alt="Streams detail page with Time series badge (top left) and View in Discover (top right)" /></p>
<p>On the top left, a <strong>&quot;Time series&quot;</strong> badge means the stream is a <strong>time series stream</strong> (optimized for metrics and more efficient); if the badge isn't there, the stream is regular. Click <strong>View in Discover</strong> in the top right to open Discover with the right query for that stream. The query depends on the stream type:</p>
<ul>
<li><strong><code>TS</code></strong> (time series): <code>TS</code> is an ES|QL source command that selects a time series data stream and enables time series aggregation functions (such as <code>RATE</code> or <code>AVG_OVER_TIME</code>). When Discover recognizes metrics data from <strong>time series metrics data streams</strong> (for example streams whose names match <code>metrics-*</code>), it shows each metric as a chart. See the <a href="https://www.elastic.co/docs/reference/query-languages/esql/commands/ts">ES|QL TS command documentation</a> for the full reference.</li>
<li><strong><code>FROM</code></strong> (regular, document-based streams): use for document-style queries. Discover shows documents in a table rather than the per-metric chart grid you get with time series metrics streams.</li>
</ul>
<p>Because our example is a time series stream, Discover opens with:</p>
<pre><code class="language-esql">TS metrics-docker.cpu-default
</code></pre>
<h2>See all your metrics, automatically visualized</h2>
<p>This is where it gets useful. Instead of a table of documents, Discover shows you the metrics in that stream, each rendered as a time series chart for the selected time range. No configuration needed. This capability, metrics in Discover, is currently in technical preview.</p>
<p><img src="https://www.elastic.co/observability-labs/assets/images/exploring-metrics-new-data-source-discover/discover-ts-metrics.png" alt="Discover with TS query showing all CPU metrics as time series charts" /></p>
<p>Each metric (<code>docker.cpu.total.pct</code>, <code>docker.cpu.system.pct</code>, <code>docker.cpu.user.pct</code>, and others) appears with a chart that shows its behavior over time. Discover recognizes different metric types and renders them accordingly: gauges as averages, counters as rates, and histograms as P95 distributions. You get an instant, at-a-glance view of what's being collected and whether the values look reasonable.</p>
<p>When you're onboarding a new source, that removes the guesswork: which metrics are active, which have data, what the values look like. You can confirm coverage and sanity-check the pipeline before you rely on that data for dashboards or alerting.</p>
<h2>Iterate quickly</h2>
<p>From here, you can adjust to get the view you need:</p>
<p><strong>Change the time range.</strong> The default 15-minute window might catch a quiet period and make healthy data look flat. Expanding to 1 hour or more reveals patterns you care about: periodic spikes from batch jobs, daily traffic curves, or the ramp-up after a new deployment. Picking the right window matters when you're validating that a new pipeline or integration is behaving as expected.</p>
<p><strong>Switch data streams.</strong> You don't need to go back to the Streams page to explore another data source. Update the query to a different data stream, or use a pattern like <code>metrics-docker.*</code> to see metrics across all your Docker data streams at once: CPU, memory, network, disk I/O, all in one view.</p>
<p><img src="https://www.elastic.co/observability-labs/assets/images/exploring-metrics-new-data-source-discover/discover-docker-all.png" alt="Discover showing TS metrics-docker.* pattern with metrics across data streams" /></p>
<p><strong>Search for specific metrics.</strong> With many metrics in a stream, the search on the top right of the grid lets you filter by name. Need to confirm that memory limits or request rates are present? Type the metric name and you either find it or confirm it's missing, so you can fix the pipeline or agent before you depend on that metric elsewhere.</p>
<h2>Validate at a glance</h2>
<p>The automatic visualizations also serve as a health check for data ingestion:</p>
<ul>
<li><strong>Data is flowing:</strong> charts show recent, continuous values, not gaps or stale data.</li>
<li><strong>Values are reasonable:</strong> CPU in expected ranges, memory tracking activity, network I/O reflecting traffic.</li>
<li><strong>Coverage is what you expect:</strong> if you enabled Docker monitoring but don't see network I/O metrics, the agent policy or module likely needs a change.</li>
</ul>
<p>This kind of quick validation replaces manual doc checks, mapping inspection, and one-off exploratory queries. You get a clear picture of what's in the stream before you wire it into dashboards, alerts, or SLOs. Once you've confirmed the data looks healthy, you can add panels to dashboards or use it for alerting and SLOs.</p>
]]></content:encoded>
            <category>observability-labs</category>
            <enclosure url="https://www.elastic.co/observability-labs/assets/images/exploring-metrics-new-data-source-discover/cover.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Explore and Analyze Metrics with Ease in Elastic Observability]]></title>
            <link>https://www.elastic.co/observability-labs/blog/metrics-explore-analyze-with-esql-discover</link>
            <guid isPermaLink="false">metrics-explore-analyze-with-esql-discover</guid>
            <pubDate>Thu, 23 Oct 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[The latest enhancements to ES|QL and Discover based metrics exploration unleash a potent set of tools for quick and effective metrics analytics.]]></description>
            <content:encoded><![CDATA[<h2>Metrics are critical in identifying the “what”</h2>
<p>As a core pillar of Observability, metrics offer a highly structured, quantitative view of system performance and health. They provide a crucial symptomatic perspective—revealing <em>what</em> is happening, such as high application latency, increasing service errors, or spiking container CPU utilization, which is essential for initiating alerting and triaging efforts. This capability for effective monitoring, alerting, and triaging is paramount to ensuring robust service delivery and achieving successful business outcomes.</p>
<p>Elastic Observability provides a comprehensive, end-to-end experience for metrics data. Elastic ensures that metrics data can be collected from numerous sources, enriched as needed and shipped to the Elastic Stack. Elastic efficiently stores this time series data, including high-cardinality metrics, utilizing the <a href="https://www.elastic.co/observability-labs/blog/time-series-data-streams-observability-metrics">TSDS index mode</a> (Time Series Data Stream), introduced in <a href="https://www.elastic.co/blog/whats-new-elasticsearch-8-7-0#efficient-storage-of-metrics-with-tsdb,-now-generally-available">prior versions</a> and used across Elastic time series <a href="https://www.elastic.co/blog/70-percent-storage-savings-for-metrics-with-elastic-observability">integrations</a>. This foundation ensures comprehensive observability through out-of-the-box dashboards, alerts, SLOs, and streamlined data management.</p>
<p>Elastic Observability 9.2 provides enhancements to metrics exploration and analysis through powerful query language extensions and expanded UI capabilities. These enhancements focus on making analysis on TSDS data via counter rates and common aggregations over time easier and faster than ever before.</p>
<p>The main metrics enhancements center on these key features, offered as Tech Preview:</p>
<ol>
<li>Metrics analytics with TSDS and ES|QL</li>
<li>Interactive metrics exploration in Discover</li>
<li>OTLP endpoint for metrics</li>
</ol>
<h2>Metrics analytics with TSDS and ES|QL</h2>
<p>The introduction of the new <a href="https://www.elastic.co/docs/reference/query-languages/esql/commands/ts"><code>TS</code> source command</a> in <a href="https://www.elastic.co/docs/reference/query-languages/esql">ES|QL</a> (Elasticsearch Query Language) on TSDS metrics dramatically simplifies time series analysis.</p>
<p>The <code>TS</code> command is specifically designed to target only time series indices, differentiating it from the general <code>FROM</code> command. Its core power lies in enabling a dedicated suite of time series aggregation functions within the <code>STATS</code> command.</p>
<p>This mechanism utilizes a dual aggregation paradigm, which is standard for time series querying. These queries involve two aggregation functions:</p>
<ul>
<li>
<p><strong>Inner (Time Series) function:</strong> Applied implicitly per time series, often over bucketed time intervals.</p>
</li>
<li>
<p><strong>Outer (Regular) function:</strong> Used to aggregate the results of the inner function across groups. For instance, if you use <code>STATS SUM(RATE(search_requests)) BY TBUCKET(1 hour), host</code>, the <code>RATE()</code> function is the inner function applied per time series in hourly buckets, and <code>SUM()</code> is the outer function, summing these rates for each host and hourly bucket.</p>
</li>
</ul>
<p>If an ES|QL query using the <code>TS</code> command is missing an inner (time series) aggregation function, <code>LAST_OVER_TIME()</code> is implicitly assumed and used. For example, <code>TS metrics | STATS AVG(memory_usage)</code> is equivalent to <code>TS metrics | STATS AVG(LAST_OVER_TIME(memory_usage))</code>.</p>
<h3>Key time series aggregation functions available in ES|QL via <code>TS</code> command</h3>
<p>These functions allow for powerful analysis on time-series data:</p>
<table>
<thead>
<tr>
<th align="center"></th>
<th align="center"></th>
<th align="center"></th>
</tr>
</thead>
<tbody>
<tr>
<td align="center"><strong>Function</strong></td>
<td align="center"><strong>Description</strong></td>
<td align="center"><strong>Example Use Case</strong></td>
</tr>
<tr>
<td align="center"><code>RATE()</code> <strong>/</strong> <code>IRATE()</code></td>
<td align="center">Calculates the per-second average rate of increase of a counter (<code>RATE</code>), accounting for non-monotonic breaks like counter resets, making it the most appropriate function for counters, or the per-second rate of increase between the last two data points (<code>IRATE</code>), ignoring all but the last two points for high responsiveness.</td>
<td align="center">Calculating request per second (RPS) or throughput.</td>
</tr>
<tr>
<td align="center"><code>AVG_OVER_TIME()</code></td>
<td align="center">Calculates the average of a numeric field over the defined time range.</td>
<td align="center">Determining average resource usage over an hour.</td>
</tr>
<tr>
<td align="center"><code>SUM_OVER_TIME()</code></td>
<td align="center">Calculates the sum of a field over the time range.</td>
<td align="center">Total errors over a specific time window.</td>
</tr>
<tr>
<td align="center"><code>MAX_OVER_TIME()</code> <strong>/</strong> <code>MIN_OVER_TIME()</code></td>
<td align="center">Calculates the maximum or minimum value of a field over time.</td>
<td align="center">Identifying peak resource consumption.</td>
</tr>
<tr>
<td align="center"><code>DELTA()</code> <strong>/</strong> <code>IDELTA()</code></td>
<td align="center">Calculates the absolute change of a gauge field over a time window (<code>DELTA</code>) or specifically between the last two data points (<code>IDELTA</code>), making <code>IDELTA</code> more responsive to recent changes.</td>
<td align="center">Tracking changes in system gauge metrics (e.g., buffer size).</td>
</tr>
<tr>
<td align="center"><code>INCREASE()</code></td>
<td align="center">Calculates the absolute increase of a counter (<code>INCREASE</code>).</td>
<td align="center">Analyzing immediate rate changes in fast-moving counters.</td>
</tr>
<tr>
<td align="center"><code>FIRST_OVER_TIME()</code> <strong>/</strong> <code>LAST_OVER_TIME()</code></td>
<td align="center">Calculates the earliest or latest recorded value of a field, determined by the <code>@timestamp</code> field.</td>
<td align="center">Inspecting initial and final metric states within a bucket.</td>
</tr>
<tr>
<td align="center"><code>ABSENT_OVER_TIME()</code> <strong>/</strong> <code>PRESENT_OVER_TIME()</code></td>
<td align="center">Calculates the absence or presence of a field in the result over the time range.</td>
<td align="center">Identifying monitoring coverage gaps.</td>
</tr>
<tr>
<td align="center"><code>COUNT_OVER_TIME()</code> <strong>/</strong> <code>COUNT_DISTINCT_OVER_TIME()</code></td>
<td align="center">Calculates the total count or the count of distinct values of a field over time.</td>
<td align="center">Measuring frequency or cardinality changes.</td>
</tr>
</tbody>
</table>
<p>These functions, available with the <code>TS</code> command, allow SREs and Ops teams to easily perform rate calculations and other common aggregations, enabling efficient metrics analysis as a routine part of observability workflows. And it’s much faster, too! Internal performance testing has revealed that TS commands outperform other ways of querying metrics data by an order of magnitude or more, and consistently! </p>
<h2>Interactive metrics exploration in Discover</h2>
<p>The 9.2 release introduces the capability to explore and analyze metrics directly and interactively within the Discover interface. In addition to exploring and analyzing logs and raw events, Discover now provides a dedicated environment for metrics exploration:</p>
<ul>
<li>
<p><strong>Easy start:</strong> Begin exploration simply by querying metrics ingested via <code>TS metrics-*</code>.</p>
</li>
<li>
<p><strong>Grid view and pre-applied aggregations:</strong> This command displays all metrics in a grid format at a glance, immediately applying the appropriate aggregations based on the metric type, such as <code>rate</code> versus <code>avg</code>.</p>
</li>
<li>
<p><strong>Search and group-by:</strong> Quickly search for specific metrics by name. Also easily group and analyze metrics by dimensions (labels) and specific values. This allows narrowing down to metrics and dimensions of choice for targeted analysis.</p>
</li>
<li>
<p><strong>Quick access to details:</strong> Furthermore, the interface provides access to crucial details, including query and response details, the underlying ES|QL commands, the metric field type, and applicable dimensions, for each metric.</p>
</li>
<li>
<p><strong>Easy tweaking and dashboarding:</strong> The system automatically populates ES|QL queries, aiding in making easy tweaks, slicing, and dicing the data. Once analyzed, metrics and resulting analyses can be added to new or existing dashboards with ease.</p>
</li>
</ul>
<p><img src="https://www.elastic.co/observability-labs/assets/images/metrics-explore-analyze-with-esql-discover/metrics-discover-ts-command.png" alt="Interactive metrics exploration in Discover" /></p>
<h2>OTLP endpoint for metrics</h2>
<p>We are also introducing a native OpenTelemetry Protocol (OTLP) endpoint specifically for metrics ingest directly into Elasticsearch. The endpoint especially benefits self-managed customers, and will be integrated into our <a href="https://www.elastic.co/docs/reference/opentelemetry/motlp">Elastic Cloud Managed OTLP Endpoint</a> for Elastic-managed offerings. The native endpoint and related updates improve ingest performance and scalability of OTel metrics, providing up to 60% higher throughput via <code>_otlp</code>, and up to 25% higher throughput when using classic <code>_bulk</code> methods. </p>
<h2>In Conclusion</h2>
<p>By merging the power of ES|QL's new time series aggregations with the familiar interactive experience of Discover, Elastic 9.2 enables a potent set of metrics analytics tools. The tools significantly boost the exploration and analysis phase of any observability workflow. And we’re just getting started on unleashing the full power of metrics in Elastic Observability!</p>
<p>We welcome you to <a href="https://cloud.elastic.co/serverless-registration?onboarding_token=observability">try the new features</a> today!</p>
<p>Also learn more about how we provide metrics analytics for AWS, Azure, GCP, Kubernetes, and LLMs on <a href="https://www.elastic.co/observability-labs">Observability Labs</a></p>
]]></content:encoded>
            <category>observability-labs</category>
            <enclosure url="https://www.elastic.co/observability-labs/assets/images/metrics-explore-analyze-with-esql-discover/metrics-blog-image-ts-discover.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Exploring Nginx metrics with Elastic time series data streams]]></title>
            <link>https://www.elastic.co/observability-labs/blog/nginx-metrics-elastic-time-series-data-streams</link>
            <guid isPermaLink="false">nginx-metrics-elastic-time-series-data-streams</guid>
            <pubDate>Mon, 10 Jul 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Elasticsearch recently released time series metrics as GA. In this blog, we dive into details of what a time series metric document is and the mapping used for enabling time series by using an existing OOTB Nginx integration.]]></description>
            <content:encoded><![CDATA[<p>Elasticsearch&lt;sup&gt;®&lt;/sup&gt; recently released time series data streams for metrics. This not only provides better metrics support in Elastic Observability, but it also helps reduce <a href="https://www.elastic.co/blog/whats-new-elasticsearch-8-7-0">storage costs</a>. We discussed this in a <a href="https://www.elastic.co/blog/elasticsearch-time-series-data-streams-observability-metrics">previous blog</a>.</p>
<p>In this blog, we dive into how to enable and use time series data streams by reviewing what a time series metrics <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/documents-indices.html">document</a> is and the <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html">mapping</a> used for enabling time series. In particular, we will showcase this by using Elastic Observability’s Nginx integration. As Elastic&lt;sup&gt;®&lt;/sup&gt; <a href="https://www.elastic.co/guide/en/elasticsearch/reference/8.8/tsds.html">time series data stream (TSDS)</a> metrics capabilities evolve, some of the scenarios below will change.</p>
<p>Elastic TSDS stores metrics in indices optimized for a time series database (<a href="https://en.wikipedia.org/wiki/Time_series_database">TSDB</a>), which is used to store time series metrics. <a href="https://www.elastic.co/blog/whats-new-elasticsearch-8-7-0">Elastic’s TSDB also got a significant optimization in 8.7</a> by reducing storage costs by upward of 70%.</p>
<h2>What is an Elastic time series data stream?</h2>
<p>A time series data stream (TSDS) models timestamped metrics data as one or more time series. In a TSDS, each Elasticsearch document represents an observation or data point in a specific time series. Although a TSDS can contain multiple time series, a document can only belong to one time series. A time series can’t span multiple data streams.</p>
<p>A regular <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/data-streams.html">data stream</a> can have different usages including logs. For metrics usage, however, a time series data stream is recommended. A time series data stream is different from a regular data stream in <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/tsds.html#differences-from-regular-data-stream">multiple ways</a>. A TSDS contains more than one predefined dimension and multiple metrics.</p>
<h2>Nginx metrics as an example</h2>
<p><a href="https://www.elastic.co/integrations/data-integrations?solution=observability">Integrations</a> provide an easy way to ingest observability metrics for a large number of services and systems. We use the <a href="https://docs.elastic.co/en/integrations/nginx">Nginx</a> integration <a href="https://docs.elastic.co/en/integrations/nginx#metrics-reference">metrics</a> data set as an example here. This is one of the integrations, on which time series has been recently enabled.</p>
<h2>Process of enabling TSDS on a package</h2>
<p>Time series is <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/tsds.html#time-series-mode">enabled</a> on a metrics data stream of an <a href="https://www.elastic.co/integrations/">integration</a> package, after adding the relevant time series <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/tsds.html#time-series-metric">metrics</a> and <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/tsds.html#time-series-dimension">dimension</a> mappings. Existing integrations with metrics data streams will come with time series metrics enabled, so that users can use them as-is without any additional configuration.</p>
<p>The image below captures a high-level summary of a time series data stream, the corresponding index template, the time series indices and a single document. We will shortly dive into the details of each of the fields in the document.</p>
<p><img src="https://www.elastic.co/observability-labs/assets/images/nginx-metrics-elastic-time-series-data-streams/elastic-blog-1-time-series-data-stream-2.png" alt="time series data stream" /></p>
<h2>TSDS metric document</h2>
<p>Below we provide a snippet of an ingested Elastic document with time series metrics and dimension together.</p>
<pre><code class="language-json">{
  &quot;@timestamp&quot;: &quot;2023-06-29T03:58:12.772Z&quot;,

  &quot;nginx&quot;: {
    &quot;stubstatus&quot;: {
      &quot;accepts&quot;: 202,
      &quot;active&quot;: 2,
      &quot;current&quot;: 3,
      &quot;dropped&quot;: 0,
      &quot;handled&quot;: 202,
      &quot;hostname&quot;: &quot;host.docker.internal:80&quot;,
      &quot;reading&quot;: 0,
      &quot;requests&quot;: 10217,
      &quot;waiting&quot;: 1,
      &quot;writing&quot;: 1
    }
  }
}
</code></pre>
<p><strong>Multiple metrics per document:</strong><br />
An ingested <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/documents-indices.html">document</a> has a collection of fields, including metrics fields. Multiple related metrics fields can be part of a single document. A document is part of a single <a href="https://www.elastic.co/guide/en/fleet/current/data-streams.html">data stream</a>, and typically all the metrics it contains are related. All the metrics in a document are part of the same time series.</p>
<p><strong>Metric type and dimensions as mapping:</strong><br />
While the document contains the metrics details, the metric types and dimension details are defined as part of the field <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html">mapping</a>. All the time series relevant field mappings are defined collectively for a given datastream, as part of the package development. All the integrations released with time series data stream, contain all the relevant time series field mappings, as part of the package release. There are two additional mappings needed in particular: <strong>time_series_metric</strong> mapping and <strong>time_series_dimension</strong> mapping.</p>
<h2>Metrics types fields</h2>
<p>A document contains the metric type fields (as shown above). The mappings for the metric type fields is done using <strong>time_series_metric</strong> mapping in the <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index-templates.html">index templates</a> as given below:</p>
<pre><code class="language-json">&quot;nginx&quot;: {
    &quot;properties&quot;: {
       &quot;stubstatus&quot;: {
           &quot;properties&quot;: {
                &quot;accepts&quot;: {
                  &quot;type&quot;: &quot;long&quot;,
                  &quot;time_series_metric&quot;: &quot;counter&quot;
                },
                &quot;active&quot;: {
                  &quot;type&quot;: &quot;long&quot;,
                  &quot;time_series_metric&quot;: &quot;gauge&quot;
                },
                &quot;current&quot;: {
                  &quot;type&quot;: &quot;long&quot;,
                  &quot;time_series_metric&quot;: &quot;gauge&quot;
                },
                &quot;dropped&quot;: {
                  &quot;type&quot;: &quot;long&quot;,
                  &quot;time_series_metric&quot;: &quot;counter&quot;
                },
                &quot;handled&quot;: {
                  &quot;type&quot;: &quot;long&quot;,
                  &quot;time_series_metric&quot;: &quot;counter&quot;
                },
                &quot;reading&quot;: {
                  &quot;type&quot;: &quot;long&quot;,
                  &quot;time_series_metric&quot;: &quot;gauge&quot;
                },
                &quot;requests&quot;: {
                  &quot;type&quot;: &quot;long&quot;,
                  &quot;time_series_metric&quot;: &quot;counter&quot;
                },
                &quot;waiting&quot;: {
                  &quot;type&quot;: &quot;long&quot;,
                  &quot;time_series_metric&quot;: &quot;gauge&quot;
                },
                &quot;writing&quot;: {
                  &quot;type&quot;: &quot;long&quot;,
                  &quot;time_series_metric&quot;: &quot;gauge&quot;
                }
           }
       }
    }
}
</code></pre>
<h2>Dimension fields</h2>
<p><a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/tsds.html#time-series-dimension">Dimensions</a> are field names and values that, in combination, identify a document’s time series.</p>
<p>In Elastic time series, there are some additional considerations for dimensions:</p>
<ul>
<li>Dimension fields need to be defined for each time series. There will be no time series with zero dimension fields.</li>
<li>Keyword (or similar) type fields can be defined as dimensions.</li>
<li>There is a current limit on the number of dimensions that can be defined in a data stream. The limit restrictions will likely be lifted going forward.</li>
</ul>
<p>Dimension is common for all the metrics in a single document, as part of a data stream. Each time series data stream of a package (example: Nginx) already comes with a predefined set of dimension fields as below.</p>
<p>The document would contain more than one dimension field. In the case of Nginx, <em>agend.id</em> and <em>nginx.stubstatus.hostname</em> are some of the dimension fields. The mappings for the dimension fields is done using <strong>time_series_dimension</strong> mapping as below:</p>
<pre><code class="language-json">&quot;agent&quot;: {
   &quot;properties&quot;: {
      &quot;id&quot;: {
         &quot;type&quot;: &quot;keyword&quot;,
         &quot;time_series_dimension&quot;: true
       }
    }
 },

&quot;nginx&quot;: {
   &quot;properties&quot;: {
       &quot;stubstatus&quot;: {
            &quot;properties&quot;: {
                &quot;hostname&quot;: {
                  &quot;type&quot;: &quot;keyword&quot;,
                  &quot;time_series_dimension&quot;: true
                },
            }
       }
    }
}
</code></pre>
<h2>Meta fields</h2>
<p>Documents ingested also have additional meta fields apart from the <em>metric</em> and <em>dimension</em> fields explained above. These additional fields provide richer query capabilities for the metrics.</p>
<p><strong>Example Elastic meta fields</strong></p>
<pre><code class="language-json">&quot;data_stream&quot;: {
      &quot;dataset&quot;: &quot;nginx.stubstatus&quot;,
      &quot;namespace&quot;: &quot;default&quot;,
      &quot;type&quot;: &quot;metrics&quot;
 }
</code></pre>
<h2>Discover and visualization in Kibana</h2>
<p>Elastic provides comprehensive search and visualization for the time series metrics. Time series metrics can be searched as-is in <a href="https://www.elastic.co/guide/en/kibana/current/discover.html">Discover</a>. In the search below, the counter and gauges metrics are captured as <em>different icons</em>. Below we also provide examples of visualization for the time series metrics using <a href="https://www.elastic.co/kibana/kibana-lens">Lens</a> and OOTB dashboard included as part of the Nginx integration package.</p>
<p><img src="https://www.elastic.co/observability-labs/assets/images/nginx-metrics-elastic-time-series-data-streams/elastic-blog-2-discover-search-tsds.png" alt="Discover search for TSDS metrics" /></p>
<p><img src="https://www.elastic.co/observability-labs/assets/images/nginx-metrics-elastic-time-series-data-streams/elastic-blog-3-lens.png" alt="Maximum of counter field nginx.stubstatus.accepts visualized using Lens" /></p>
<p><img src="https://www.elastic.co/observability-labs/assets/images/nginx-metrics-elastic-time-series-data-streams/elastic-blog-4-median-gauge.png" alt="Median of gauge field nginx.stubstatus.active visualized using Lens" /></p>
<p><img src="https://www.elastic.co/observability-labs/assets/images/nginx-metrics-elastic-time-series-data-streams/elastic-blog-5-multiple-line-graphs.png" alt="OOTB Nginx dashboard with the TSDS metrics visualizations " /></p>
<h2>Try it out!</h2>
<p>We have provided a detailed example of a time series document ingested by the Elastic Nginx integration. We have walked through how time series metrics are modeled in Elastic and the additional time series mappings with examples. We provided details of dimension requirements for Elastic time series, as well as brief examples of search/visualization/dashboard of TSDS metrics in Kibana&lt;sup&gt;®&lt;/sup&gt;.</p>
<p>Don’t have an Elastic Cloud account yet? <a href="https://cloud.elastic.co/registration">Sign up for Elastic Cloud</a> and try out the auto-instrumentation capabilities that I discussed above. I would be interested in getting your feedback about your experience in gaining visibility into your application stack with Elastic.</p>
<blockquote>
<ul>
<li><a href="https://www.elastic.co/blog/elasticsearch-time-series-data-streams-observability-metrics">How to use Elasticsearch and Time Series Data Streams for observability metrics</a></li>
<li><a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/tsds.html">Time Series Data Stream in Elastic documentation</a> </li>
<li><a href="https://www.elastic.co/blog/whats-new-elasticsearch-8-7-0">Efficient storage with Elastic Time Series Database</a><a href="https://www.elastic.co/integrations/">Elastic integrations catalog</a></li>
<li><a href="https://www.elastic.co/integrations/">Elastic integrations catalog</a></li>
</ul>
</blockquote>
]]></content:encoded>
            <category>observability-labs</category>
            <enclosure url="https://www.elastic.co/observability-labs/assets/images/nginx-metrics-elastic-time-series-data-streams/time-series-data-streams-blog-720x420-1.jpg" length="0" type="image/jpg"/>
        </item>
    </channel>
</rss>