put-job.asciidoc 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. [role="xpack"]
  2. [testenv="platinum"]
  3. [[ml-put-job]]
  4. = Create {anomaly-jobs} API
  5. ++++
  6. <titleabbrev>Create jobs</titleabbrev>
  7. ++++
  8. Instantiates an {anomaly-job}.
  9. [[ml-put-job-request]]
  10. == {api-request-title}
  11. `PUT _ml/anomaly_detectors/<job_id>`
  12. [[ml-put-job-prereqs]]
  13. == {api-prereq-title}
  14. Requires the `manage_ml` cluster privilege. This privilege is included in the
  15. `machine_learning_admin` built-in role.
  16. If you include a `datafeed_config`, you must also have `read` index privileges
  17. on the source index.
  18. [[ml-put-job-desc]]
  19. == {api-description-title}
  20. [IMPORTANT]
  21. ====
  22. * You must use {kib} or this API to create an {anomaly-job}. Do not put
  23. a job directly to the `.ml-config` index using the {es} index API. If {es}
  24. {security-features} are enabled, do not give users `write` privileges on the
  25. `.ml-config` index.
  26. * If you include a `datafeed_config` and {es} {security-features} are enabled,
  27. your {dfeed} remembers which roles the user who created it had at the time of
  28. creation and runs the query using those same roles. If you provide
  29. <<http-clients-secondary-authorization,secondary authorization headers>>, those
  30. credentials are used instead.
  31. ====
  32. [[ml-put-job-path-parms]]
  33. == {api-path-parms-title}
  34. `<job_id>`::
  35. (Required, string)
  36. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=job-id-anomaly-detection-define]
  37. [role="child_attributes"]
  38. [[ml-put-job-request-body]]
  39. == {api-request-body-title}
  40. `allow_lazy_open`::
  41. (Optional, Boolean)
  42. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=allow-lazy-open]
  43. //Begin analysis_config
  44. [[put-analysisconfig]]`analysis_config`::
  45. (Required, object)
  46. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=analysis-config]
  47. +
  48. .Properties of `analysis_config`
  49. [%collapsible%open]
  50. ====
  51. `bucket_span`:::
  52. (<<time-units,time units>>)
  53. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=bucket-span]
  54. `categorization_analyzer`:::
  55. (object or string)
  56. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=categorization-analyzer]
  57. `categorization_field_name`:::
  58. (string)
  59. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=categorization-field-name]
  60. `categorization_filters`:::
  61. (array of strings)
  62. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=categorization-filters]
  63. //Begin analysis_config.detectors
  64. `detectors`:::
  65. (array) An array of detector configuration objects. Detector configuration
  66. objects specify which data fields a job analyzes. They also specify which
  67. analytical functions are used. You can specify multiple detectors for a job.
  68. +
  69. NOTE: If the `detectors` array does not contain at least one detector,
  70. no analysis can occur and an error is returned.
  71. +
  72. .Properties of `detectors`
  73. [%collapsible%open]
  74. =====
  75. `by_field_name`::::
  76. (string)
  77. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=by-field-name]
  78. //Begin analysis_config.detectors.custom_rules
  79. [[put-customrules]]`custom_rules`::::
  80. (array)
  81. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=custom-rules]
  82. +
  83. .Properties of `custom_rules`
  84. [%collapsible%open]
  85. ======
  86. `actions`:::
  87. (array)
  88. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=custom-rules-actions]
  89. //Begin analysis_config.detectors.custom_rules.conditions
  90. `conditions`:::
  91. (array)
  92. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=custom-rules-conditions]
  93. +
  94. .Properties of `conditions`
  95. [%collapsible%open]
  96. =======
  97. `applies_to`::::
  98. (string)
  99. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=custom-rules-conditions-applies-to]
  100. `operator`::::
  101. (string)
  102. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=custom-rules-conditions-operator]
  103. `value`::::
  104. (double)
  105. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=custom-rules-conditions-value]
  106. =======
  107. //End analysis_config.detectors.custom_rules.conditions
  108. //Begin analysis_config.detectors.custom_rules.scope
  109. `scope`:::
  110. (object)
  111. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=custom-rules-scope]
  112. +
  113. .Properties of `scope`
  114. [%collapsible%open]
  115. =======
  116. `filter_id`::::
  117. (string)
  118. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=custom-rules-scope-filter-id]
  119. `filter_type`::::
  120. (string)
  121. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=custom-rules-scope-filter-type]
  122. =======
  123. //End analysis_config.detectors.custom_rules.scope
  124. ======
  125. //End analysis_config.detectors.custom_rules
  126. `detector_description`::::
  127. (string)
  128. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=detector-description]
  129. `detector_index`::::
  130. (integer)
  131. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=detector-index]
  132. +
  133. If you specify a value for this property, it is ignored.
  134. `exclude_frequent`::::
  135. (string)
  136. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=exclude-frequent]
  137. `field_name`::::
  138. (string)
  139. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=detector-field-name]
  140. `function`::::
  141. (string)
  142. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=function]
  143. `over_field_name`::::
  144. (string)
  145. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=over-field-name]
  146. `partition_field_name`::::
  147. (string)
  148. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=partition-field-name]
  149. `use_null`::::
  150. (Boolean)
  151. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=use-null]
  152. =====
  153. //End analysis_config.detectors
  154. `influencers`:::
  155. (array of strings)
  156. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=influencers]
  157. `latency`:::
  158. (time units)
  159. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=latency]
  160. `model_prune_window`:::
  161. (Optional, <<time-units,time units>>)
  162. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=model-prune-window]
  163. `multivariate_by_fields`:::
  164. (Boolean)
  165. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=multivariate-by-fields]
  166. //Begin analysis_config.per_partition_categorization
  167. `per_partition_categorization`:::
  168. (Optional, object)
  169. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=per-partition-categorization]
  170. +
  171. .Properties of `per_partition_categorization`
  172. [%collapsible%open]
  173. =====
  174. `enabled`::::
  175. (Boolean)
  176. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=per-partition-categorization-enabled]
  177. `stop_on_warn`::::
  178. (Boolean)
  179. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=per-partition-categorization-stop-on-warn]
  180. =====
  181. //End analysis_config.per_partition_categorization
  182. `summary_count_field_name`:::
  183. (string)
  184. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=summary-count-field-name]
  185. ====
  186. //End analysis_config
  187. //Begin analysis_limits
  188. [[put-analysislimits]]`analysis_limits`::
  189. (Optional, object)
  190. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=analysis-limits]
  191. +
  192. .Properties of `analysis_limits`
  193. [%collapsible%open]
  194. ====
  195. `categorization_examples_limit`:::
  196. (long)
  197. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=categorization-examples-limit]
  198. `model_memory_limit`:::
  199. (long or string)
  200. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=model-memory-limit-ad]
  201. ====
  202. //End analysis_limits
  203. `background_persist_interval`::
  204. (Optional, <<time-units, time units>>)
  205. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=background-persist-interval]
  206. [[put-customsettings]]`custom_settings`::
  207. (Optional, object)
  208. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=custom-settings]
  209. `daily_model_snapshot_retention_after_days`::
  210. (Optional, long)
  211. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=daily-model-snapshot-retention-after-days]
  212. //Begin data_description
  213. [[put-datadescription]]`data_description`::
  214. (Required, object)
  215. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=data-description]
  216. //End data_description
  217. `datafeed_config`::
  218. (Optional, object) The {ml-docs}/ml-dfeeds.html[{dfeed}], which retrieves data
  219. from {es} for analysis by the job. You can associate only one {dfeed} with each
  220. {anomaly-job}.
  221. +
  222. .Properties of `datafeed`
  223. [%collapsible%open]
  224. ====
  225. `aggregations`:::
  226. (Optional, object)
  227. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=aggregations]
  228. `chunking_config`:::
  229. (Optional, object)
  230. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=chunking-config]
  231. +
  232. .Properties of `chunking_config`
  233. [%collapsible%open]
  234. =====
  235. `mode`:::
  236. (string)
  237. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=mode]
  238. `time_span`:::
  239. (<<time-units,time units>>)
  240. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=time-span]
  241. =====
  242. `datafeed_id`:::
  243. (Optional, string)
  244. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=datafeed-id]
  245. +
  246. Defaults to the same ID as the {anomaly-job}.
  247. `delayed_data_check_config`:::
  248. (Optional, object)
  249. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=delayed-data-check-config]
  250. +
  251. .Properties of `delayed_data_check_config`
  252. [%collapsible%open]
  253. =====
  254. `check_window`::
  255. (<<time-units,time units>>)
  256. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=delayed-data-check-config-check-window]
  257. `enabled`::
  258. (Boolean)
  259. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=delayed-data-check-config-enabled]
  260. =====
  261. `frequency`:::
  262. (Optional, <<time-units, time units>>)
  263. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=frequency]
  264. `indices`:::
  265. (Required, array)
  266. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=indices]
  267. `indices_options`:::
  268. (Optional, object)
  269. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=indices-options]
  270. `max_empty_searches`:::
  271. (Optional,integer)
  272. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=max-empty-searches]
  273. `query`:::
  274. (Optional, object)
  275. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=query]
  276. `query_delay`:::
  277. (Optional, <<time-units, time units>>)
  278. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=query-delay]
  279. `runtime_mappings`:::
  280. (Optional, object)
  281. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=runtime-mappings]
  282. `script_fields`:::
  283. (Optional, object)
  284. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=script-fields]
  285. `scroll_size`:::
  286. (Optional, unsigned integer)
  287. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=scroll-size]
  288. ====
  289. `description`::
  290. (Optional, string) A description of the job.
  291. `groups`::
  292. (Optional, array of strings)
  293. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=groups]
  294. //Begin model_plot_config
  295. `model_plot_config`::
  296. (Optional, object)
  297. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=model-plot-config]
  298. +
  299. .Properties of `model_plot_config`
  300. [%collapsible%open]
  301. ====
  302. `annotations_enabled`:::
  303. (Boolean)
  304. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=model-plot-config-annotations-enabled]
  305. `enabled`:::
  306. (Boolean)
  307. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=model-plot-config-enabled]
  308. `terms`:::
  309. experimental[] (string)
  310. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=model-plot-config-terms]
  311. ====
  312. //End model_plot_config
  313. `model_snapshot_retention_days`::
  314. (Optional, long)
  315. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=model-snapshot-retention-days]
  316. `renormalization_window_days`::
  317. (Optional, long)
  318. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=renormalization-window-days]
  319. `results_index_name`::
  320. (Optional, string)
  321. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=results-index-name]
  322. `results_retention_days`::
  323. (Optional, long)
  324. include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=results-retention-days]
  325. [[ml-put-job-example]]
  326. == {api-examples-title}
  327. [source,console]
  328. --------------------------------------------------
  329. PUT _ml/anomaly_detectors/total-requests
  330. {
  331. "description" : "Total sum of requests",
  332. "analysis_config" : {
  333. "bucket_span":"10m",
  334. "detectors": [
  335. {
  336. "detector_description": "Sum of total",
  337. "function": "sum",
  338. "field_name": "total"
  339. }
  340. ]
  341. },
  342. "data_description" : {
  343. "time_field":"timestamp",
  344. "time_format": "epoch_ms"
  345. }
  346. }
  347. --------------------------------------------------
  348. When the job is created, you receive the following results:
  349. [source,console-result]
  350. ----
  351. {
  352. "job_id" : "total-requests",
  353. "job_type" : "anomaly_detector",
  354. "job_version" : "8.0.0",
  355. "description" : "Total sum of requests",
  356. "create_time" : 1562352500629,
  357. "analysis_config" : {
  358. "bucket_span" : "10m",
  359. "detectors" : [
  360. {
  361. "detector_description" : "Sum of total",
  362. "function" : "sum",
  363. "field_name" : "total",
  364. "detector_index" : 0
  365. }
  366. ],
  367. "influencers" : [ ]
  368. },
  369. "analysis_limits" : {
  370. "model_memory_limit" : "1024mb",
  371. "categorization_examples_limit" : 4
  372. },
  373. "data_description" : {
  374. "time_field" : "timestamp",
  375. "time_format" : "epoch_ms"
  376. },
  377. "model_snapshot_retention_days" : 10,
  378. "daily_model_snapshot_retention_after_days" : 1,
  379. "results_index_name" : "shared",
  380. "allow_lazy_open" : false
  381. }
  382. ----
  383. // TESTRESPONSE[s/"job_version" : "8.0.0"/"job_version" : $body.job_version/]
  384. // TESTRESPONSE[s/1562352500629/$body.$_path/]