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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  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. Every document indexed to a data stream must have a `@timestamp` field. This
  85. field can be mapped as a <<date,`date`>> or <<date_nanos,`date_nanos`>> field
  86. data type by the stream's index template. This mapping can include other
  87. <<mapping-params,mapping parameters>>, such as <<mapping-date-format,`format`>>.
  88. If the template does not specify a mapping, the `@timestamp` field is mapped as
  89. a `date` field with default options.
  90. We recommend using {ilm-init} to manage a data stream's backing indices. Specify
  91. the name of the lifecycle policy with the `index.lifecycle.name` setting.
  92. TIP: We recommend you carefully consider which mappings and settings to include
  93. in this template before creating a data stream. Later changes to the mappings or
  94. settings of a stream's backing indices may require reindexing. See
  95. <<data-streams-change-mappings-and-settings>>.
  96. You can create an index template through the Kibana UI:
  97. . From Kibana, open the menu and go to *Stack Management > Index Management*.
  98. . In the *Index Templates* tab, click *Create template*.
  99. . In the Create template wizard, use the *Data stream* toggle to indicate the
  100. template is used exclusively for data streams.
  101. [role="screenshot"]
  102. image::images/data-streams/create-index-template.png[Create template page]
  103. You can also create a template using the <<indices-put-template,put index
  104. template API>>. The template must include a `data_stream` object with an empty
  105. body (`{ }`). This object indicates the template is used exclusively for data
  106. streams.
  107. The following request configures the `my-data-stream-template` index template.
  108. Because no field mapping is specified, the `@timestamp` field uses the `date`
  109. field data type by default.
  110. [source,console]
  111. ----
  112. PUT /_index_template/my-data-stream-template
  113. {
  114. "index_patterns": [ "my-data-stream*" ],
  115. "data_stream": { },
  116. "template": {
  117. "settings": {
  118. "index.lifecycle.name": "my-data-stream-policy"
  119. }
  120. }
  121. }
  122. ----
  123. // TEST[continued]
  124. Alternatively, the following template maps `@timestamp` as a `date_nanos` field.
  125. [source,console]
  126. ----
  127. PUT /_index_template/my-data-stream-template
  128. {
  129. "index_patterns": [ "my-data-stream*" ],
  130. "data_stream": { },
  131. "template": {
  132. "mappings": {
  133. "properties": {
  134. "@timestamp": { "type": "date_nanos" } <1>
  135. }
  136. },
  137. "settings": {
  138. "index.lifecycle.name": "my-data-stream-policy"
  139. }
  140. }
  141. }
  142. ----
  143. // TEST[continued]
  144. <1> Maps `@timestamp` as a `date_nanos` field. You can include other supported
  145. mapping parameters in this field mapping.
  146. NOTE: You cannot delete an index template that's in use by a data stream.
  147. This would prevent the data stream from creating new backing indices.
  148. [discrete]
  149. [[create-a-data-stream]]
  150. === Create a data stream
  151. You can create a data stream using one of two methods:
  152. * <<index-documents-to-create-a-data-stream>>
  153. * <<manually-create-a-data-stream>>
  154. [discrete]
  155. [[index-documents-to-create-a-data-stream]]
  156. ==== Index documents to create a data stream
  157. You can automatically create a data stream using an indexing request. Submit
  158. an <<add-documents-to-a-data-stream,indexing request>> to a target
  159. matching the index pattern defined in the template's `index_patterns`
  160. property.
  161. If the indexing request's target doesn't exist, {es} creates the data stream and
  162. uses the target name as the name for the stream.
  163. NOTE: Data streams support only specific types of indexing requests. See
  164. <<add-documents-to-a-data-stream>>.
  165. The following <<docs-index_,index API>> request targets `my-data-stream`, which
  166. matches the index pattern for `my-data-stream-template`. Because
  167. no existing index or data stream uses this name, this request creates the
  168. `my-data-stream` data stream and indexes the document to it.
  169. [source,console]
  170. ----
  171. POST /my-data-stream/_doc/
  172. {
  173. "@timestamp": "2020-12-06T11:04:05.000Z",
  174. "user": {
  175. "id": "vlb44hny"
  176. },
  177. "message": "Login attempt failed"
  178. }
  179. ----
  180. // TEST[continued]
  181. The API returns the following response. Note the `_index` property contains
  182. `.ds-my-data-stream-000001`, indicating the document was indexed to the write
  183. index of the new data stream.
  184. [source,console-result]
  185. ----
  186. {
  187. "_index": ".ds-my-data-stream-000001",
  188. "_id": "qecQmXIBT4jB8tq1nG0j",
  189. "_version": 1,
  190. "result": "created",
  191. "_shards": {
  192. "total": 2,
  193. "successful": 1,
  194. "failed": 0
  195. },
  196. "_seq_no": 0,
  197. "_primary_term": 1
  198. }
  199. ----
  200. // TESTRESPONSE[s/"_id": "qecQmXIBT4jB8tq1nG0j"/"_id": $body._id/]
  201. [discrete]
  202. [[manually-create-a-data-stream]]
  203. ==== Manually create a data stream
  204. You can use the <<indices-create-data-stream,create data stream API>> to
  205. manually create a data stream. The name of the data stream must match the index
  206. pattern defined in the template's `index_patterns` property.
  207. The following create data stream request targets `my-data-stream-alt`, which
  208. matches the index pattern for `my-data-stream-template`. Because
  209. no existing index or data stream uses this name, this request creates the
  210. `my-data-stream-alt` data stream.
  211. [source,console]
  212. ----
  213. PUT /_data_stream/my-data-stream-alt
  214. ----
  215. // TEST[continued]
  216. [discrete]
  217. [[get-info-about-a-data-stream]]
  218. === Get information about a data stream
  219. To view information about a data stream in Kibana, open the menu and go to
  220. *Stack Management > Index Management*. In the *Data Streams* tab, click a data
  221. stream's name to view information about the stream.
  222. [role="screenshot"]
  223. image::images/data-streams/data-streams-list.png[Data Streams tab]
  224. You can also use the <<indices-get-data-stream,get data stream API>> to retrieve
  225. the following information about one or more data streams:
  226. * The current backing indices, which is returned as an array. The last item in
  227. the array contains information about the stream's current write index.
  228. * The current generation
  229. * The data stream's health status
  230. * The index template used to create the stream's backing indices
  231. * The current {ilm-init} lifecycle policy in the stream's matching index
  232. template
  233. The following get data stream API request retrieves information about
  234. `my-data-stream`.
  235. ////
  236. [source,console]
  237. ----
  238. POST /my-data-stream/_rollover/
  239. ----
  240. // TEST[continued]
  241. ////
  242. [source,console]
  243. ----
  244. GET /_data_stream/my-data-stream
  245. ----
  246. // TEST[continued]
  247. The API returns the following response. Note the `indices` property contains an
  248. array of the stream's current backing indices. The last item in this array
  249. contains information about the stream's write index, `.ds-my-data-stream-000002`.
  250. [source,console-result]
  251. ----
  252. {
  253. "data_streams": [
  254. {
  255. "name": "my-data-stream",
  256. "timestamp_field": {
  257. "name": "@timestamp"
  258. },
  259. "indices": [
  260. {
  261. "index_name": ".ds-my-data-stream-000001",
  262. "index_uuid": "krR78LfvTOe6gr5dj2_1xQ"
  263. },
  264. {
  265. "index_name": ".ds-my-data-stream-000002", <1>
  266. "index_uuid": "C6LWyNJHQWmA08aQGvqRkA"
  267. }
  268. ],
  269. "generation": 2,
  270. "status": "GREEN",
  271. "template": "my-data-stream-template",
  272. "ilm_policy": "my-data-stream-policy"
  273. }
  274. ]
  275. }
  276. ----
  277. // TESTRESPONSE[s/"index_uuid": "krR78LfvTOe6gr5dj2_1xQ"/"index_uuid": $body.data_streams.0.indices.0.index_uuid/]
  278. // TESTRESPONSE[s/"index_uuid": "C6LWyNJHQWmA08aQGvqRkA"/"index_uuid": $body.data_streams.0.indices.1.index_uuid/]
  279. // TESTRESPONSE[s/"status": "GREEN"/"status": "YELLOW"/]
  280. <1> Last item in the `indices` array for `my-data-stream`. This
  281. item contains information about the stream's current write index,
  282. `.ds-my-data-stream-000002`.
  283. [discrete]
  284. [[secure-a-data-stream]]
  285. === Secure a data stream
  286. You can use {es} {security-features} to control access to a data stream and its
  287. data. See <<data-stream-privileges>>.
  288. [discrete]
  289. [[delete-a-data-stream]]
  290. === Delete a data stream
  291. You can use the Kibana UI to delete a data stream and its backing indices. In
  292. Kibana, open the menu and go to *Stack Management > Index Management*. In the
  293. *Data Streams* tab, click the trash can icon to delete a stream and its backing
  294. indices.
  295. [role="screenshot"]
  296. image::images/data-streams/data-streams-list.png[Data Streams tab]
  297. You can also use the the <<indices-delete-data-stream,delete data stream API>>
  298. to delete a data stream. The following delete data stream API request deletes
  299. `my-data-stream`. This request also deletes the stream's backing
  300. indices and any data they contain.
  301. [source,console]
  302. ----
  303. DELETE /_data_stream/my-data-stream
  304. ----
  305. // TEST[continued]
  306. ////
  307. [source,console]
  308. ----
  309. DELETE /_data_stream/*
  310. DELETE /_index_template/*
  311. DELETE /_ilm/policy/my-data-stream-policy
  312. ----
  313. // TEST[continued]
  314. ////