[role="xpack"]
[testenv="basic"]
[[get-transform-stats]]
=== Get {transform} statistics API

[subs="attributes"]
++++
<titleabbrev>Get {transform} statistics</titleabbrev>
++++

Retrieves usage information for {transforms}.


[[get-transform-stats-request]]
==== {api-request-title}

`GET _transform/<transform_id>/_stats`

`GET _transform/<transform_id>,<transform_id>/_stats` +

`GET _transform/_stats` +

`GET _transform/_all/_stats` +

`GET _transform/*/_stats` +


[[get-transform-stats-prereqs]]
==== {api-prereq-title}

* If the {es} {security-features} are enabled, you must have `monitor_transform` 
cluster privileges to use this API. The built-in `transform_user` role has these 
privileges. For more information, see <<security-privileges>> and 
<<built-in-roles>>.


[[get-transform-stats-desc]]
==== {api-description-title}

You can get statistics for multiple {transforms} in a single API
request by using a comma-separated list of identifiers or a wildcard expression.
You can get statistics for all {transforms} by using `_all`, by
specifying `*` as the `<transform_id>`, or by omitting the
`<transform_id>`.


[[get-transform-stats-path-parms]]
==== {api-path-parms-title}

`<transform_id>`::
(Optional, string)
include::{docdir}/rest-api/common-parms.asciidoc[tag=transform-id-wildcard]
  

[[get-transform-stats-query-parms]]
==== {api-query-parms-title}

`allow_no_match`::
(Optional, boolean)
include::{docdir}/rest-api/common-parms.asciidoc[tag=allow-no-match-transforms1]

`from`::
(Optional, integer)
include::{docdir}/rest-api/common-parms.asciidoc[tag=from-transforms]

`size`::
(Optional, integer)
include::{docdir}/rest-api/common-parms.asciidoc[tag=size-transforms]

[[get-transform-stats-response]]
==== {api-response-body-title}

The API returns an array of statistics objects for {transforms}, which are
sorted by the `id` value in ascending order. All of these properties are
informational; you cannot update their values.

`checkpointing`::
(object) Contains statistics about <<transform-checkpoints,checkpoints>>.
`checkpointing`.`changes_last_detected_at`:::
(date) The timestamp when changes were last detected in the source indices.
`checkpointing`.`last`:::
(object) Contains statistics about the last completed checkpoint. 
`checkpointing`.`last`.`checkpoint`::::
(integer) The sequence number for the checkpoint.
`checkpointing`.`last`.`time_upper_bound_millis`::::
(date) When using time-based synchronization, this timestamp indicates the
upper bound of data that is included in the checkpoint.
`checkpointing`.`last`.`timestamp_millis`::::
(date) The timestamp of the checkpoint, which indicates when the checkpoint
was created.
`checkpointing`.`next`:::
(object) Contains statistics about the next checkpoint that is currently in
progress. This object appears only when the {transform} `state` is `indexing`.
`checkpointing`.`next`.`checkpoint`::::
(integer) The sequence number for the checkpoint.
`checkpointing`.`next`.`checkpoint_progress`::::
(object) Contains statistics about the progress of the checkpoint. For example,
it lists the `total_docs`, `docs_remaining`, `percent_complete`,
`docs_processed`, and `docs_indexed`. This information is available only for
batch {transforms} and the first checkpoint of {ctransforms}.
`checkpointing`.`next`.`time_upper_bound_millis`::::
(date) When using time-based synchronization, this timestamp indicates the
upper bound of data that is included in the checkpoint.
`checkpointing`.`next`.`timestamp_millis`::::
(date) The timestamp of the checkpoint, which indicates when the checkpoint was
created.
`checkpointing`.`operations_behind`:::
(integer) The number of operations that have occurred on the source index but
have not been applied to the destination index yet. A high number can indicate
that the {transform} is failing to keep up. 

`id`::
(string)
include::{docdir}/rest-api/common-parms.asciidoc[tag=transform-id]

`node`::
(object) For started {transforms} only, the node upon which the {transform} is
started.
`node`.`attributes`:::
(object) A list of attributes for the node.
`node`.`ephemeral_id`:::
(string) The node ephemeral ID.
`node`.`id`:::
(string) The unique identifier of the node. For example, "0-o0tOoRTwKFZifatTWKNw".
`node`.`name`:::
(string) The node name. For example, `0-o0tOo`.
`node`.`transport_address`:::
(string) The host and port where transport HTTP connections are accepted. For
example, `127.0.0.1:9300`.
`state`::
(string) The status of the {transform}, which can be one of the following values:
+
--
* `aborting`: The {transform} is aborting.
* `failed`: The {transform} failed. For more information about the failure,
check the reason field.
* `indexing`: The {transform} is actively processing data and creating new
documents.
* `started`: The {transform} is running but not actively indexing data.
* `stopped`: The {transform} is stopped.
* `stopping`: The {transform} is stopping.
--

`stats`::
(object) An object that provides statistical information about the {transform}.
`stats`.`documents_indexed`:::
(long) The number of documents that have been indexed into the destination index
for the {transform}.
`stats`.`documents_processed`:::
(long) The number of documents that have been processed from the source index of
the {transform}.
`stats`.`exponential_avg_checkpoint_duration_ms`:::
(double) Exponential moving average of the duration of the checkpoint, in milliseconds.
`stats`.`exponential_avg_documents_indexed`:::
(double) Exponential moving average of the number of new documents that have been
indexed.
`stats`.`exponential_avg_documents_processed`:::
(double) Exponential moving average of the number of documents that have been
processed.
`stats`.`index_failures`:::
(long) The number of indexing failures.
`stats`.`index_time_in_ms`:::
(long) The amount of time spent indexing, in milliseconds.
`stats`.`index_total`:::
(long) The number of indices created.
`stats`.`pages_processed`:::
(long) The number of search or bulk index operations processed. Documents are
processed in batches instead of individually.
`stats`.`search_failures`:::
(long) The number of search failures. 
`stats`.`search_time_in_ms`:::
(long) The amount of time spent searching, in milliseconds.
`stats`.`search_total`:::
(long) The number of search operations on the source index for the {transform}. 
`stats`.`trigger_count`:::
(long) The number of times the {transform} has been triggered by the scheduler.
For example, the scheduler triggers the {transform} indexer to check for updates
or ingest new data at an interval specified in the
<<put-transform-request-body,`frequency` property>>.
  
[[get-transform-stats-response-codes]]
==== {api-response-codes-title}

`404` (Missing resources)::
  If `allow_no_match` is `false`, this code indicates that there are no
  resources that match the request or only partial matches for the request. 

[[get-transform-stats-example]]
==== Examples

The following example skips for the first five {transforms} and
gets usage information for a maximum of ten results: 

[source,console]
--------------------------------------------------
GET _transform/_stats?from=5&size=10
--------------------------------------------------
// TEST[skip:todo]

The following example gets usage information for the `ecommerce_transform`
{transform}:

[source,console]
--------------------------------------------------
GET _transform/ecommerce_transform/_stats
--------------------------------------------------
// TEST[skip:todo]

The API returns the following results:

[source,console-result]
----
{
  "count" : 1,
  "transforms" : [
    {
      "id" : "ecommerce_transform",
      "state" : "indexing",
      "stats" : {
        "pages_processed" : 2,
        "documents_processed" : 1220,
        "documents_indexed" : 13,
        "trigger_count" : 1,
        "index_time_in_ms" : 19,
        "index_total" : 1,
        "index_failures" : 0,
        "search_time_in_ms" : 52,
        "search_total" : 2,
        "search_failures" : 0,
        "exponential_avg_checkpoint_duration_ms" : 77,
        "exponential_avg_documents_indexed" : 2,
        "exponential_avg_documents_processed" : 12
      },
      "checkpointing" : {
        "last" : {
          "checkpoint" : 100,
          "timestamp_millis" : 1561740252497,
          "time_upper_bound_millis" : 1561740192497
        },
        "next" : {
          "checkpoint" : 101,
          "position" : {
            "indexer_position" : {
              "hashtag" : "abcd1234"
            },
            "buckets_position" : {
              "hashtag" : "abcd5678"
            }
          },
          "checkpoint_progress" : {
            "documents_processed": 100,
            "documents_indexed": 1
          },
          "changes_last_detected_at": 1561740629170,
          "timestamp_millis" : 1561740629172,
          "time_upper_bound_millis" : 1561740569172
        },
        "operations_behind": 27000
      }
    }
  ]
}
----
