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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. [[set-up-a-data-stream]]
  2. == Set up a data stream
  3. To set up a data stream, follow these steps:
  4. . Check the <<data-stream-prereqs, prerequisites>>.
  5. . <<configure-a-data-stream-ilm-policy>>.
  6. . <<create-a-data-stream-template>>.
  7. . <<create-a-data-stream>>.
  8. . <<get-info-about-a-data-stream>> to verify it exists.
  9. After you set up a data stream, you can <<use-a-data-stream, use the data
  10. stream>> for indexing, searches, and other supported operations.
  11. If you no longer need it, you can <<delete-a-data-stream,delete a data stream>>
  12. and its backing indices.
  13. [discrete]
  14. [[data-stream-prereqs]]
  15. === Prerequisites
  16. * {es} data streams are intended for time-series data only. Each document
  17. indexed to a data stream must contain a shared timestamp field.
  18. +
  19. TIP: Data streams work well with most common log formats. While no schema is
  20. required to use data streams, we recommend the {ecs-ref}[Elastic Common Schema
  21. (ECS)].
  22. * Data streams are designed to be <<data-streams-append-only,append-only>>.
  23. While you can index new documents directly to a data stream, you cannot use a
  24. data stream to directly update or delete individual documents. To update or
  25. delete specific documents in a data stream, submit a <<docs-delete,delete>> or
  26. <<docs-update,update>> API request to the backing index containing the document.
  27. [discrete]
  28. [[configure-a-data-stream-ilm-policy]]
  29. === Optional: Configure an {ilm-init} lifecycle policy for a data stream
  30. You can use <<index-lifecycle-management,{ilm} ({ilm-init})>> to automatically
  31. manage a data stream's backing indices. For example, you could use {ilm-init}
  32. to:
  33. * Spin up a new write index for the data stream when the current one reaches a
  34. certain size or age.
  35. * Move older backing indices to slower, less expensive hardware.
  36. * Delete stale backing indices to enforce data retention standards.
  37. To use {ilm-init} with a data stream, you must
  38. <<set-up-lifecycle-policy,configure a lifecycle policy>>. This lifecycle policy
  39. should contain the automated actions to take on backing indices and the
  40. triggers for such actions.
  41. TIP: While optional, we recommend using {ilm-init} to scale data streams in
  42. production.
  43. .*Example*
  44. [%collapsible]
  45. ====
  46. The following <<ilm-put-lifecycle,create lifecycle policy API>> request
  47. configures the `logs_policy` lifecycle policy.
  48. The `logs_policy` policy uses the <<ilm-rollover,`rollover` action>> to create a
  49. new <<data-stream-write-index,write index>> for the data stream when the current
  50. one reaches 25GB in size. The policy also deletes backing indices 30 days after
  51. their rollover.
  52. [source,console]
  53. ----
  54. PUT /_ilm/policy/logs_policy
  55. {
  56. "policy": {
  57. "phases": {
  58. "hot": {
  59. "actions": {
  60. "rollover": {
  61. "max_size": "25GB"
  62. }
  63. }
  64. },
  65. "delete": {
  66. "min_age": "30d",
  67. "actions": {
  68. "delete": {}
  69. }
  70. }
  71. }
  72. }
  73. }
  74. ----
  75. ====
  76. [discrete]
  77. [[create-a-data-stream-template]]
  78. === Create an index template for a data stream
  79. Each data stream requires an <<indices-templates,index template>>. The data
  80. stream uses this template to create its backing indices.
  81. Index templates for data streams must contain:
  82. * A name or wildcard (`*`) pattern for the data stream in the `index_patterns`
  83. property.
  84. +
  85. You can use the resolve index API to check if the name or pattern
  86. matches any existing indices, index aliases, or data streams. If so, you should
  87. consider using another name or pattern.
  88. +
  89. .*Example*
  90. [%collapsible]
  91. ====
  92. The following resolve index API request checks for any existing indices, index
  93. aliases, or data streams that start with `logs`. If not, the `logs*`
  94. wildcard pattern can be used to create a new data stream.
  95. [source,console]
  96. ----
  97. GET /_resolve/index/logs*
  98. ----
  99. // TEST[continued]
  100. The API returns the following response, indicating no existing targets match
  101. this pattern.
  102. [source,console-result]
  103. ----
  104. {
  105. "indices" : [ ],
  106. "aliases" : [ ],
  107. "data_streams" : [ ]
  108. }
  109. ----
  110. ====
  111. * A `data_stream` definition containing the `timestamp_field` property.
  112. This timestamp field must be included in every document indexed to the data
  113. stream.
  114. * A <<date,`date`>> or <<date_nanos,`date_nanos`>> field mapping for the
  115. timestamp field specified in the `timestamp_field` property.
  116. +
  117. IMPORTANT: Carefully consider the timestamp field's mapping, including
  118. <<mapping-params,mapping parameters>> such as <<mapping-date-format,`format`>>.
  119. Once the stream is created, you can only update the timestamp field's mapping by
  120. reindexing the data stream. See
  121. <<data-streams-use-reindex-to-change-mappings-settings>>.
  122. * If you intend to use {ilm-init}, you must specify the
  123. <<configure-a-data-stream-ilm-policy,lifecycle policy>> in the
  124. `index.lifecycle.name` setting.
  125. You can also specify other mappings and settings you'd like to apply to the
  126. stream's backing indices.
  127. TIP: We recommend you carefully consider which mappings and settings to include
  128. in this template before creating a data stream. Later changes to the mappings or
  129. settings of a stream's backing indices may require reindexing. See
  130. <<data-streams-change-mappings-and-settings>>.
  131. .*Example*
  132. [%collapsible]
  133. ====
  134. The following <<indices-templates,put index template API>> request
  135. configures the `logs_data_stream` template.
  136. [source,console]
  137. ----
  138. PUT /_index_template/logs_data_stream
  139. {
  140. "index_patterns": [ "logs*" ],
  141. "data_stream": {
  142. "timestamp_field": "@timestamp"
  143. },
  144. "template": {
  145. "mappings": {
  146. "properties": {
  147. "@timestamp": {
  148. "type": "date"
  149. }
  150. }
  151. },
  152. "settings": {
  153. "index.lifecycle.name": "logs_policy"
  154. }
  155. }
  156. }
  157. ----
  158. // TEST[continued]
  159. ====
  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. With an index template, you can create a data stream using one of two
  166. methods:
  167. * Submit an <<add-documents-to-a-data-stream,indexing request>> to a target
  168. matching the name or wildcard pattern defined in the template's `index_patterns`
  169. property.
  170. +
  171. --
  172. If the indexing request's target doesn't exist, {es} creates the data stream and
  173. uses the target name as the name for the stream.
  174. NOTE: Data streams support only specific types of indexing requests. See
  175. <<add-documents-to-a-data-stream>>.
  176. [[index-documents-to-create-a-data-stream]]
  177. .*Example: Index documents to create a data stream*
  178. [%collapsible]
  179. ====
  180. The following <<docs-index_,index API>> request targets `logs`, which matches
  181. the wildcard pattern for the `logs_data_stream` template. Because no existing
  182. index or data stream uses this name, this request creates the `logs` data stream
  183. and indexes the document to it.
  184. [source,console]
  185. ----
  186. POST /logs/_doc/
  187. {
  188. "@timestamp": "2020-12-06T11:04:05.000Z",
  189. "user": {
  190. "id": "vlb44hny"
  191. },
  192. "message": "Login attempt failed"
  193. }
  194. ----
  195. // TEST[continued]
  196. The API returns the following response. Note the `_index` property contains
  197. `.ds-logs-000001`, indicating the document was indexed to the write index of the
  198. new `logs` data stream.
  199. [source,console-result]
  200. ----
  201. {
  202. "_index": ".ds-logs-000001",
  203. "_id": "qecQmXIBT4jB8tq1nG0j",
  204. "_version": 1,
  205. "result": "created",
  206. "_shards": {
  207. "total": 2,
  208. "successful": 1,
  209. "failed": 0
  210. },
  211. "_seq_no": 0,
  212. "_primary_term": 1
  213. }
  214. ----
  215. // TESTRESPONSE[s/"_id": "qecQmXIBT4jB8tq1nG0j"/"_id": $body._id/]
  216. ====
  217. --
  218. * Use the <<indices-create-data-stream,create data stream API>> to manually
  219. create a data stream. The name of the data stream must match the
  220. name or wildcard pattern defined in the template's `index_patterns` property.
  221. +
  222. --
  223. .*Example: Manually create a data stream*
  224. [%collapsible]
  225. ====
  226. The following <<indices-create-data-stream,create data stream API>> request
  227. targets `logs_alt`, which matches the wildcard pattern for the
  228. `logs_data_stream` template. Because no existing index or data stream uses this
  229. name, this request creates the `logs_alt` data stream.
  230. [source,console]
  231. ----
  232. PUT /_data_stream/logs_alt
  233. ----
  234. // TEST[continued]
  235. ====
  236. --
  237. ////
  238. [source,console]
  239. ----
  240. DELETE /_data_stream/logs
  241. DELETE /_data_stream/logs_alt
  242. DELETE /_index_template/logs_data_stream
  243. DELETE /_ilm/policy/logs_policy
  244. ----
  245. // TEST[continued]
  246. ////
  247. [discrete]
  248. [[get-info-about-a-data-stream]]
  249. === Get information about a data stream
  250. You can use the <<indices-get-data-stream,get data stream API>> to get
  251. information about one or more data streams, including:
  252. * The timestamp field
  253. * The current backing indices, which is returned as an array. The last item in
  254. the array contains information about the stream's current write index.
  255. * The current generation
  256. This is also handy way to verify that a recently created data stream exists.
  257. .*Example*
  258. [%collapsible]
  259. ====
  260. The following get data stream API request retrieves information about any data
  261. streams starting with `logs`.
  262. [source,console]
  263. ----
  264. GET /_data_stream/logs*
  265. ----
  266. // TEST[skip: shard failures]
  267. The API returns the following response, which includes information about the
  268. `logs` data stream. Note the `indices` property contains an array of the
  269. stream's current backing indices. The last item in this array contains
  270. information for the `logs` stream's write index, `.ds-logs-000002`.
  271. [source,console-result]
  272. ----
  273. [
  274. {
  275. "name": "logs",
  276. "timestamp_field": "@timestamp",
  277. "indices": [
  278. {
  279. "index_name": ".ds-logs-000001",
  280. "index_uuid": "DXAE-xcCQTKF93bMm9iawA"
  281. },
  282. {
  283. "index_name": ".ds-logs-000002",
  284. "index_uuid": "Wzxq0VhsQKyPxHhaK3WYAg"
  285. }
  286. ],
  287. "generation": 2
  288. }
  289. ]
  290. ----
  291. // TESTRESPONSE[skip:unable to assert responses with top level array]
  292. ====
  293. [discrete]
  294. [[delete-a-data-stream]]
  295. === Delete a data stream
  296. You can use the <<indices-delete-data-stream,delete data stream API>> to delete
  297. a data stream and its backing indices.
  298. .*Example*
  299. [%collapsible]
  300. ====
  301. The following delete data stream API request deletes the `logs` data stream. This
  302. request also deletes the stream's backing indices and any data they contain.
  303. ////
  304. [source,console]
  305. ----
  306. PUT /_index_template/logs_data_stream
  307. {
  308. "index_patterns": [ "logs*" ],
  309. "data_stream": {
  310. "timestamp_field": "@timestamp"
  311. },
  312. "template": {
  313. "mappings": {
  314. "properties": {
  315. "@timestamp": {
  316. "type": "date"
  317. }
  318. }
  319. }
  320. }
  321. }
  322. PUT /_data_stream/logs
  323. ----
  324. ////
  325. [source,console]
  326. ----
  327. DELETE /_data_stream/logs
  328. ----
  329. // TEST[continued]
  330. ====
  331. ////
  332. [source,console]
  333. ----
  334. DELETE /_index_template/logs_data_stream
  335. ----
  336. // TEST[continued]
  337. ////