Type to search.

Set up a time series data stream

Serverless Elasticsearch

Elastic Cloud Serverless projects are autoscaled environments, fully managed by Elastic and available on Elastic Cloud.

Availability

  • Generally available

    This functionality is generally available and ready for production usage.

Serverless Observability

Elastic Cloud Serverless projects are autoscaled environments, fully managed by Elastic and available on Elastic Cloud.

Availability

  • Generally available

    This functionality is generally available and ready for production usage.

Serverless Security

Elastic Cloud Serverless projects are autoscaled environments, fully managed by Elastic and available on Elastic Cloud.

Availability

  • Generally available

    This functionality is generally available and ready for production usage.

Serverless Vector Database Unavailable

Elastic Cloud Serverless projects are autoscaled environments, fully managed by Elastic and available on Elastic Cloud.

Availability

  • Unavailable

    This functionality is not available in Serverless Elasticsearch Vector Database projects.

Stack

The Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats.

Availability

  • Generally available

    This functionality is generally available and ready for production usage.

Unless stated otherwise on the page, this functionality is available when your Elastic Stack is deployed on Elastic Cloud Hosted, Elastic Cloud Enterprise, Elastic Cloud on Kubernetes, and self-managed environments.

This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes.

This page shows you how to manually set up a time series data stream (TSDS).

  • Before you create a time series data stream, review Data streams in Elasticsearch and TSDS concepts. You can also try the quickstart for a hands-on introduction.
  • Make sure you have the following permissions:
    • Cluster privileges
      • manage_index_templates for creating a template to base the TSDS on
      • The Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats. Availability Generally available This functionality is generally available and ready for production usage. Unless stated otherwise on the page, this functionality is available when your Elastic Stack is deployed on Elastic Cloud Hosted, Elastic Cloud Enterprise, Elastic Cloud on Kubernetes, and self-managed environments. This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes. manage_ilm if you're using index lifecycle management
    • Index privileges
      • create_doc and create_index for creating or converting a TSDS
      • manage to roll over a TSDS
      • auto_configure if you choose to turn on past index creation
Note

If you're working with OpenTelemetry data, try the OpenTelemetry quickstarts.

  1. Create an index lifecycle policy (optional)

    Serverless Unavailable

    Elastic Cloud Serverless projects are autoscaled environments, fully managed by Elastic and available on Elastic Cloud.

    Availability

    • Unavailable

      This functionality is not available in Elastic Cloud Serverless.

    Stack

    The Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats.

    Availability

    • Generally available

      This functionality is generally available and ready for production usage.

    Unless stated otherwise on the page, this functionality is available when your Elastic Stack is deployed on Elastic Cloud Hosted, Elastic Cloud Enterprise, Elastic Cloud on Kubernetes, and self-managed environments.

    This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes.

    In most cases, you can use a data stream lifecycle to manage your time series data stream. If you're using data tiers in Elastic Stack, you can use index lifecycle management.

    Note The Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats. Availability Generally available since 9.5 This functionality is generally available and ready for production usage. Unless stated otherwise on the page, this functionality is available when your Elastic Stack is deployed on Elastic Cloud Hosted, Elastic Cloud Enterprise, Elastic Cloud on Kubernetes, and self-managed environments. This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes.

    ILM isn't required for frozen-tier searchable snapshots. Data stream lifecycle can manage them directly. Refer to Searchable snapshots for data streams.

    Create an ILM policy

    If you're using Elastic Stack, ILM can help you manage the time series data stream backing indices. ILM requires an index lifecycle policy.

    For best results, specify a max_age for the rollover action in the policy. This ensures the timestamp ranges for the backing indices are consistent. For example, setting a max_age of 1d for the rollover action ensures your backing indices consistently contain one day's worth of data.

    Example:

    JSON
    PUT _ilm/policy/my-weather-sensor-lifecycle-policy
    {
      "policy": {
        "phases": {
          "hot": {
            "actions": {
              "rollover": {
                "max_age": "1d",
                "max_primary_shard_size": "50gb"
              }
            }
          }
          // Additional phases (warm, cold, delete) as needed
        }
      }
    }
  2. Create an index template

    The structure of a time series data stream is defined by an index template. Create an index template with the following required elements and settings:

    • Index patterns: One or more wildcard patterns matching the name of your TSDS, such as weather-sensors-*. For best results, use the data stream naming scheme.
    • Data stream object: The template must include "data_stream": {}.
    • Time series mode: Set index.mode: time_series.
    • Field mappings: Define at least one dimension field and typically one or more metric fields:
      • Dimensions: To define a dimension, set time_series_dimension to true. For details, refer to Dimensions.
      • Metrics: To define a metric, use the time_series_metric mapping parameter. For details, refer to Metrics.
      • Timestamp (optional): Define a date or date_nanos mapping for the @timestamp field. If you don't specify a mapping, Elasticsearch maps @timestamp as a date field with default options.
      • Elastic Cloud Serverless projects are autoscaled environments, fully managed by Elastic and available on Elastic Cloud. Availability Unavailable This functionality is not available in Elastic Cloud Serverless. The Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats. Availability Generally available This functionality is generally available and ready for production usage. Unless stated otherwise on the page, this functionality is available when your Elastic Stack is deployed on Elastic Cloud Hosted, Elastic Cloud Enterprise, Elastic Cloud on Kubernetes, and self-managed environments. This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes. Lifecycle management: If you're using Elastic Stack, define a lifecycle to enable automatic rollover and prevent indices from growing too large.
        • Add a lifecycle object and specify "enabled": true.
        • If you created an ILM policy in step 1, reference it in the settings with index.lifecycle.name.
      • Settings (optional): Define any relevant index settings, such as index.number_of_replicas, for the data stream's backing indices.
    • Priority: Set the priority higher than 200 to avoid collisions with built-in templates.

    Example index template PUT request:

    JSON
    PUT _index_template/my-weather-sensor-index-template
    {
      "index_patterns": ["metrics-weather_sensors-*"],
      "data_stream": { },
      "template": {
        "settings": {
          "index.mode": "time_series",
          "index.lifecycle.name": "my-lifecycle-policy"
        },
        "lifecycle": { 
          "enabled": true
        },
        "mappings": {
          "properties": {
            "sensor_id": {
              "type": "keyword",
              "time_series_dimension": true
            },
            "location": {
              "type": "keyword",
              "time_series_dimension": true
            },
            "temperature": {
              "type": "half_float",
              "time_series_metric": "gauge"
            },
            "humidity": {
              "type": "half_float",
              "time_series_metric": "gauge"
            },
            "@timestamp": {
              "type": "date"
            }
          }
        }
      },
      "priority": 500,
      "_meta": {
        "description": "Template for my weather sensor data"
      }
    }
    1. Elastic Stack only
    2. Elastic Stack only, enabled by default in Serverless
    Important The Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats. Availability Generally available This functionality is generally available and ready for production usage. Unless stated otherwise on the page, this functionality is available when your Elastic Stack is deployed on Elastic Cloud Hosted, Elastic Cloud Enterprise, Elastic Cloud on Kubernetes, and self-managed environments. This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes.

    Without lifecycle management enabled, a time series data stream can grow into very large indices that never roll over. This can lead to performance issues. Always configure lifecycle management for Elastic Stack production deployments.

    Component templates (optional)

    If you're using component templates with a time series data stream, check the following requirements:

    • Each component template is valid on its own
    • The index.routing_path setting and its referenced dimension fields are defined in the same component template
    • The time_series_dimension attribute is enabled for fields referenced in index.routing_path
  3. Turn on past index creation (optional)

    Stack 9.5+

    The Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats.

    Availability

    • Generally available since 9.5

      This functionality is generally available and ready for production usage.

    Unless stated otherwise on the page, this functionality is available when your Elastic Stack is deployed on Elastic Cloud Hosted, Elastic Cloud Enterprise, Elastic Cloud on Kubernetes, and self-managed environments.

    This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes.

    Elasticsearch can create missing backing indices when you add data that precedes existing time ranges. To enable this feature, update the cluster settings:

    JSON
    PUT _cluster/settings
    {
      "persistent": {
        "data_stream.past_tsdb_index_creation_enabled": true,
        "data_streams.past_tsdb_index_interval": "2d"
      }
    }
    1. These settings are persistent and apply to all data streams in the cluster.
    2. By default, each past backing index covers one day of data. Refer to data_streams.past_tsdb_index_interval.
  4. Create the time series data stream and add data

    You can create a time series data stream explicitly with the create a data stream API. You must give it a name that matches the index_patterns in your index template. For example:

    JSON
    PUT _data_stream/metrics-weather-sensors

    Alternatively, you can create it implicitly by indexing a document. The TSDS is created automatically as long as the index name in your API matches the index template pattern.

    Important

    To add data to your data stream with the following bulk API request or POST request, you must update the timestamps to within two hours of your current time. Data added to a TSDS must fit the accepted time range.

    The Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats. Availability Generally available since 9.5 This functionality is generally available and ready for production usage. Unless stated otherwise on the page, this functionality is available when your Elastic Stack is deployed on Elastic Cloud Hosted, Elastic Cloud Enterprise, Elastic Cloud on Kubernetes, and self-managed environments. This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes. If you turned on past index creation, Elasticsearch creates backing indices automatically as historical documents are added within the eligible write window. For more details, go to How time-bound indices work.

    JSON
    PUT metrics-weather-sensors/_bulk
    { "create":{ } }
    { "@timestamp": "2099-05-06T16:21:15.000Z", "sensor_id": "SENSOR-001", "location": "warehouse-A", "temperature": 26.7,"humidity": 49.9 }
    { "create":{ } }
    { "@timestamp": "2099-05-06T16:25:42.000Z", "sensor_id": "SENSOR-002", "location": "warehouse-B", "temperature": 32.4, "humidity": 88.9 }
    POST metrics-weather-sensors/_doc
    {
      "@timestamp": "2099-05-06T16:21:15.000Z",
      "sensor_id": "SENSOR-00002",
      "location": "warehouse-B",
      "temperature": 32.4,
      "humidity": 88.9
    }

    For more information about adding documents to data streams, go to Use a data stream > Add documents to a data stream.

  5. Verify setup

    To make sure your time series data stream is working, try some GET requests.

    View data stream details:

    JSON
    GET _data_stream/metrics-weather-sensors

    Check the document count in a time series data stream:

    JSON
    GET metrics-weather-sensors/_count 

    Query the time series data:

    JSON
    GET metrics-weather-sensors/_search 
    {
      "size": 5,
      "sort": ["@timestamp"]
    }

You can convert an existing regular data stream to a TSDS. Follow these steps:

  1. Update your existing index template and component templates (if any) to include time series settings. For Elastic Stack, configure lifecycle management.
  2. Use the rollover API to manually roll over the existing data stream's write index, to apply the changes you made in step 1:
JSON
POST metrics-weather-sensors/_rollover
Note

After the rollover, new backing indices will have time series functionality. Existing backing indices are not affected by the rollover because their index.mode cannot be changed.

To control access to a TSDS, use index privileges. Privileges set on a TSDS also apply to the backing indices.

For an example, refer to Data stream privileges.

The Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats. Availability Generally available since 9.5 This functionality is generally available and ready for production usage. Unless stated otherwise on the page, this functionality is available when your Elastic Stack is deployed on Elastic Cloud Hosted, Elastic Cloud Enterprise, Elastic Cloud on Kubernetes, and self-managed environments. This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes. Users who write documents that trigger creation of past backing indices need the auto_configure index privilege on the data stream, in addition to privileges that allow indexing (such as create_doc or index). Users with only the index privilege receive a security_exception when a write would create a past backing index.

Now that you've set up a time series data stream, you can manage and use it like a regular data stream. For more information, refer to:

  • Use a data stream for indexing and searching
  • Change data stream settings as needed
  • Query time series data using the ES|QL TS command
  • The Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats. Availability Generally available since 9.5 This functionality is generally available and ready for production usage. Unless stated otherwise on the page, this functionality is available when your Elastic Stack is deployed on Elastic Cloud Hosted, Elastic Cloud Enterprise, Elastic Cloud on Kubernetes, and self-managed environments. This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes. Load historical data into a TSDS
  • Use data stream APIs