set-up-a-data-stream.asciidoc 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. [role="xpack"]
  2. [[set-up-a-data-stream]]
  3. == Set up a data stream
  4. To set up a data stream, follow these steps:
  5. . Check the <<data-stream-prereqs, prerequisites>>.
  6. . <<configure-a-data-stream-ilm-policy>>.
  7. . <<create-a-data-stream-template>>.
  8. . <<create-a-data-stream>>.
  9. . <<get-info-about-a-data-stream>> to verify it exists.
  10. . <<secure-a-data-stream>>.
  11. After you set up a data stream, you can <<use-a-data-stream, use the data
  12. stream>> for indexing, searches, and other supported operations.
  13. If you no longer need it, you can <<delete-a-data-stream,delete a data stream>>
  14. and its backing indices.
  15. [discrete]
  16. [[data-stream-prereqs]]
  17. === Prerequisites
  18. * {es} data streams are intended for time series data only. Each document
  19. indexed to a data stream must contain the `@timestamp` field. This field must be
  20. mapped as a <<date,`date`>> or <<date_nanos,`date_nanos`>> field data type.
  21. * Data streams are best suited for time-based,
  22. <<data-streams-append-only,append-only>> use cases. If you frequently need to
  23. update or delete existing documents, we recommend using an index alias and an
  24. index template instead.
  25. [discrete]
  26. [[configure-a-data-stream-ilm-policy]]
  27. === Optional: Configure an {ilm-init} lifecycle policy for a data stream
  28. You can use <<index-lifecycle-management,{ilm} ({ilm-init})>> to automatically
  29. manage a data stream's backing indices. For example, you could use {ilm-init}
  30. to:
  31. * Spin up a new write index for the data stream when the current one reaches a
  32. certain size or age.
  33. * Move older backing indices to slower, less expensive hardware.
  34. * Delete stale backing indices to enforce data retention standards.
  35. To use {ilm-init} with a data stream, you must
  36. <<set-up-lifecycle-policy,configure a lifecycle policy>>. This lifecycle policy
  37. should contain the automated actions to take on backing indices and the
  38. triggers for such actions.
  39. TIP: While optional, we recommend using {ilm-init} to manage the backing indices
  40. associated with a data stream.
  41. You can create the policy through the Kibana UI. In Kibana, open the menu and go
  42. to *Stack Management > Index Lifecycle Policies*. Click *Index Lifecycle
  43. Policies*.
  44. [role="screenshot"]
  45. image::images/ilm/create-policy.png[Index Lifecycle Policies page]
  46. You can also create a policy using the <<ilm-put-lifecycle,create lifecycle
  47. policy API>>.
  48. The following request configures the `my-data-stream-policy` lifecycle policy.
  49. The policy uses the <<ilm-rollover,`rollover` action>> to create a
  50. new <<data-stream-write-index,write index>> for the data stream when the current
  51. one reaches 25GB in size. The policy also deletes backing indices 30 days after
  52. their rollover.
  53. [source,console]
  54. ----
  55. PUT /_ilm/policy/my-data-stream-policy
  56. {
  57. "policy": {
  58. "phases": {
  59. "hot": {
  60. "actions": {
  61. "rollover": {
  62. "max_size": "25GB"
  63. }
  64. }
  65. },
  66. "delete": {
  67. "min_age": "30d",
  68. "actions": {
  69. "delete": {}
  70. }
  71. }
  72. }
  73. }
  74. }
  75. ----
  76. [discrete]
  77. [[create-a-data-stream-template]]
  78. === Create an index template for a data stream
  79. A data stream uses an index template to configure its backing indices. A
  80. template for a data stream must specify:
  81. * One or more index patterns that match the name of the stream.
  82. * The mappings and settings for the stream's backing indices.
  83. * That the template is used exclusively for data streams.
  84. * A priority for the template.
  85. [IMPORTANT]
  86. ====
  87. {es} has built-in index templates for the `metrics-*-*` and `logs-*-*` index
  88. patterns. {ingest-guide}/ingest-management-overview.html[{agent}] uses these
  89. templates to create data streams. If you use {agent}, assign your index
  90. templates a priority lower than `100` to avoid an override of the built-in
  91. templates.
  92. Otherwise, to avoid accidentally applying the built-in templates, use a
  93. non-overlapping index pattern, or assign your templates a `priority` higher or
  94. lower than `100`.
  95. ====
  96. Every document indexed to a data stream must have a `@timestamp` field. This
  97. field can be mapped as a <<date,`date`>> or <<date_nanos,`date_nanos`>> field
  98. data type by the stream's index template. This mapping can include other
  99. <<mapping-params,mapping parameters>>, such as <<mapping-date-format,`format`>>.
  100. If the template does not specify a mapping, the `@timestamp` field is mapped as
  101. a `date` field with default options.
  102. We recommend using {ilm-init} to manage a data stream's backing indices. Specify
  103. the name of the lifecycle policy with the `index.lifecycle.name` setting.
  104. TIP: We recommend you carefully consider which mappings and settings to include
  105. in this template before creating a data stream. Later changes to the mappings or
  106. settings of a stream's backing indices may require reindexing. See
  107. <<data-streams-change-mappings-and-settings>>.
  108. You can create an index template through the Kibana UI:
  109. . From Kibana, open the menu and go to *Stack Management > Index Management*.
  110. . In the *Index Templates* tab, click *Create template*.
  111. . In the Create template wizard, use the *Data stream* toggle to indicate the
  112. template is used exclusively for data streams.
  113. [role="screenshot"]
  114. image::images/data-streams/create-index-template.png[Create template page]
  115. You can also create a template using the <<indices-put-template,put index
  116. template API>>. The template must include a `data_stream` object with an empty
  117. body (`{ }`). This object indicates the template is used exclusively for data
  118. streams.
  119. The following request configures the `my-data-stream-template` index template.
  120. Because no field mapping is specified, the `@timestamp` field uses the `date`
  121. field data type by default.
  122. [source,console]
  123. ----
  124. PUT /_index_template/my-data-stream-template
  125. {
  126. "index_patterns": [ "my-data-stream*" ],
  127. "data_stream": { },
  128. "priority": 200,
  129. "template": {
  130. "settings": {
  131. "index.lifecycle.name": "my-data-stream-policy"
  132. }
  133. }
  134. }
  135. ----
  136. // TEST[continued]
  137. Alternatively, the following template maps `@timestamp` as a `date_nanos` field.
  138. [source,console]
  139. ----
  140. PUT /_index_template/my-data-stream-template
  141. {
  142. "index_patterns": [ "my-data-stream*" ],
  143. "data_stream": { },
  144. "priority": 200,
  145. "template": {
  146. "mappings": {
  147. "properties": {
  148. "@timestamp": { "type": "date_nanos" } <1>
  149. }
  150. },
  151. "settings": {
  152. "index.lifecycle.name": "my-data-stream-policy"
  153. }
  154. }
  155. }
  156. ----
  157. // TEST[continued]
  158. <1> Maps `@timestamp` as a `date_nanos` field. You can include other supported
  159. mapping parameters in this field mapping.
  160. NOTE: You cannot delete an index template that's in use by a data stream.
  161. This would prevent the data stream from creating new backing indices.
  162. [discrete]
  163. [[create-a-data-stream]]
  164. === Create a data stream
  165. You can create a data stream using one of two methods:
  166. * <<index-documents-to-create-a-data-stream>>
  167. * <<manually-create-a-data-stream>>
  168. [discrete]
  169. [[index-documents-to-create-a-data-stream]]
  170. ==== Index documents to create a data stream
  171. You can automatically create a data stream using an indexing request. Submit
  172. an <<add-documents-to-a-data-stream,indexing request>> to a target
  173. matching the index pattern defined in the template's `index_patterns`
  174. property.
  175. If the indexing request's target doesn't exist, {es} creates the data stream and
  176. uses the target name as the name for the stream.
  177. NOTE: Data streams support only specific types of indexing requests. See
  178. <<add-documents-to-a-data-stream>>.
  179. The following <<docs-index_,index API>> request targets `my-data-stream`, which
  180. matches the index pattern for `my-data-stream-template`. Because
  181. no existing index or data stream uses this name, this request creates the
  182. `my-data-stream` data stream and indexes the document to it.
  183. [source,console]
  184. ----
  185. POST /my-data-stream/_doc/
  186. {
  187. "@timestamp": "2020-12-06T11:04:05.000Z",
  188. "user": {
  189. "id": "vlb44hny"
  190. },
  191. "message": "Login attempt failed"
  192. }
  193. ----
  194. // TEST[continued]
  195. The API returns the following response. Note the `_index` property contains
  196. `.ds-my-data-stream-000001`, indicating the document was indexed to the write
  197. index of the new data stream.
  198. [source,console-result]
  199. ----
  200. {
  201. "_index": ".ds-my-data-stream-000001",
  202. "_id": "qecQmXIBT4jB8tq1nG0j",
  203. "_version": 1,
  204. "result": "created",
  205. "_shards": {
  206. "total": 2,
  207. "successful": 1,
  208. "failed": 0
  209. },
  210. "_seq_no": 0,
  211. "_primary_term": 1
  212. }
  213. ----
  214. // TESTRESPONSE[s/"_id": "qecQmXIBT4jB8tq1nG0j"/"_id": $body._id/]
  215. [discrete]
  216. [[manually-create-a-data-stream]]
  217. ==== Manually create a data stream
  218. You can use the <<indices-create-data-stream,create data stream API>> to
  219. manually create a data stream. The name of the data stream must match the index
  220. pattern defined in the template's `index_patterns` property.
  221. The following create data stream request targets `my-data-stream-alt`, which
  222. matches the index pattern for `my-data-stream-template`. Because
  223. no existing index or data stream uses this name, this request creates the
  224. `my-data-stream-alt` data stream.
  225. [source,console]
  226. ----
  227. PUT /_data_stream/my-data-stream-alt
  228. ----
  229. // TEST[continued]
  230. [discrete]
  231. [[get-info-about-a-data-stream]]
  232. === Get information about a data stream
  233. To view information about a data stream in Kibana, open the menu and go to
  234. *Stack Management > Index Management*. In the *Data Streams* tab, click a data
  235. stream's name to view information about the stream.
  236. [role="screenshot"]
  237. image::images/data-streams/data-streams-list.png[Data Streams tab]
  238. You can also use the <<indices-get-data-stream,get data stream API>> to retrieve
  239. the following information about one or more data streams:
  240. * The current backing indices, which is returned as an array. The last item in
  241. the array contains information about the stream's current write index.
  242. * The current generation
  243. * The data stream's health status
  244. * The index template used to create the stream's backing indices
  245. * The current {ilm-init} lifecycle policy in the stream's matching index
  246. template
  247. The following get data stream API request retrieves information about
  248. `my-data-stream`.
  249. ////
  250. [source,console]
  251. ----
  252. POST /my-data-stream/_rollover/
  253. ----
  254. // TEST[continued]
  255. ////
  256. [source,console]
  257. ----
  258. GET /_data_stream/my-data-stream
  259. ----
  260. // TEST[continued]
  261. The API returns the following response. Note the `indices` property contains an
  262. array of the stream's current backing indices. The last item in this array
  263. contains information about the stream's write index, `.ds-my-data-stream-000002`.
  264. [source,console-result]
  265. ----
  266. {
  267. "data_streams": [
  268. {
  269. "name": "my-data-stream",
  270. "timestamp_field": {
  271. "name": "@timestamp"
  272. },
  273. "indices": [
  274. {
  275. "index_name": ".ds-my-data-stream-000001",
  276. "index_uuid": "krR78LfvTOe6gr5dj2_1xQ"
  277. },
  278. {
  279. "index_name": ".ds-my-data-stream-000002", <1>
  280. "index_uuid": "C6LWyNJHQWmA08aQGvqRkA"
  281. }
  282. ],
  283. "generation": 2,
  284. "status": "GREEN",
  285. "template": "my-data-stream-template",
  286. "ilm_policy": "my-data-stream-policy"
  287. }
  288. ]
  289. }
  290. ----
  291. // TESTRESPONSE[s/"index_uuid": "krR78LfvTOe6gr5dj2_1xQ"/"index_uuid": $body.data_streams.0.indices.0.index_uuid/]
  292. // TESTRESPONSE[s/"index_uuid": "C6LWyNJHQWmA08aQGvqRkA"/"index_uuid": $body.data_streams.0.indices.1.index_uuid/]
  293. // TESTRESPONSE[s/"status": "GREEN"/"status": "YELLOW"/]
  294. <1> Last item in the `indices` array for `my-data-stream`. This
  295. item contains information about the stream's current write index,
  296. `.ds-my-data-stream-000002`.
  297. [discrete]
  298. [[secure-a-data-stream]]
  299. === Secure a data stream
  300. You can use {es} {security-features} to control access to a data stream and its
  301. data. See <<data-stream-privileges>>.
  302. [discrete]
  303. [[delete-a-data-stream]]
  304. === Delete a data stream
  305. You can use the Kibana UI to delete a data stream and its backing indices. In
  306. Kibana, open the menu and go to *Stack Management > Index Management*. In the
  307. *Data Streams* tab, click the trash can icon to delete a stream and its backing
  308. indices.
  309. [role="screenshot"]
  310. image::images/data-streams/data-streams-list.png[Data Streams tab]
  311. You can also use the the <<indices-delete-data-stream,delete data stream API>>
  312. to delete a data stream. The following delete data stream API request deletes
  313. `my-data-stream`. This request also deletes the stream's backing
  314. indices and any data they contain.
  315. [source,console]
  316. ----
  317. DELETE /_data_stream/my-data-stream
  318. ----
  319. // TEST[continued]
  320. ////
  321. [source,console]
  322. ----
  323. DELETE /_data_stream/*
  324. DELETE /_index_template/*
  325. DELETE /_ilm/policy/my-data-stream-policy
  326. ----
  327. // TEST[continued]
  328. ////