Set up a time series data stream
Elastic Cloud Serverless projects are autoscaled environments, fully managed by Elastic and available on Elastic Cloud. Availability This functionality is generally available and ready for production usage. Elastic Cloud Serverless projects are autoscaled environments, fully managed by Elastic and available on Elastic Cloud. Availability This functionality is generally available and ready for production usage. Elastic Cloud Serverless projects are autoscaled environments, fully managed by Elastic and available on Elastic Cloud. Availability This functionality is generally available and ready for production usage. Elastic Cloud Serverless projects are autoscaled environments, fully managed by Elastic and available on Elastic Cloud. Availability This functionality is not available in Serverless Elasticsearch Vector Database projects. The Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats. Availability 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.
Serverless Elasticsearch
Generally available
Serverless Observability
Generally available
Serverless Security
Generally available
Serverless Vector Database
Unavailable
Unavailable
Stack
Generally available
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_templatesfor 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_ilmif you're using index lifecycle management
- Index privileges
create_docandcreate_indexfor creating or converting a TSDSmanageto roll over a TSDSauto_configureif you choose to turn on past index creation
- Cluster privileges
If you're working with OpenTelemetry data, try the OpenTelemetry quickstarts.
-
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_agefor therolloveraction in the policy. This ensures thetimestampranges for the backing indices are consistent. For example, setting amax_ageof1dfor therolloveraction 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 } } } -
-
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_dimensiontotrue. For details, refer to Dimensions.- To define dimensions dynamically, you can use a pass-through object. For details, refer to Defining sub-fields as time series dimensions.
- Metrics: To define a metric, use the
time_series_metricmapping parameter. For details, refer to Metrics. - Timestamp (optional): Define a
dateordate_nanosmapping for the@timestampfield. If you don't specify a mapping, Elasticsearch maps@timestampas adatefield 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
lifecycleobject and specify"enabled": true. - If you created an ILM policy in step 1, reference it in the settings with
index.lifecycle.name.
- Add a
- Settings (optional): Define any relevant index settings, such as
index.number_of_replicas, for the data stream's backing indices.
- Dimensions: To define a dimension, set
- Priority: Set the priority higher than
200to 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" } }- Elastic Stack only
- 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_pathsetting and its referenced dimension fields are defined in the same component template - The
time_series_dimensionattribute is enabled for fields referenced inindex.routing_path
- Index patterns: One or more wildcard patterns matching the name of your TSDS, such as
-
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" } }- These settings are persistent and apply to all data streams in the cluster.
- By default, each past backing index covers one day of data. Refer to
data_streams.past_tsdb_index_interval.
-
-
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_patternsin your index template. For example:JSON PUT _data_stream/metrics-weather-sensorsAlternatively, 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.
ImportantTo 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.
-
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-sensorsCheck the document count in a time series data stream:
JSON GET metrics-weather-sensors/_countQuery 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:
- Update your existing index template and component templates (if any) to include time series settings. For Elastic Stack, configure lifecycle management.
- Use the rollover API to manually roll over the existing data stream's write index, to apply the changes you made in step 1:
POST metrics-weather-sensors/_rollover
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
TScommand - 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