[role="xpack"]
[testenv="basic"]
[[get-inference-stats]]
= Get trained model statistics API
[subs="attributes"]
++++
<titleabbrev>Get trained model stats</titleabbrev>
++++

Retrieves usage information for trained models.

experimental[]


[[ml-get-inference-stats-request]]
== {api-request-title}

`GET _ml/inference/_stats` +

`GET _ml/inference/_all/_stats` +

`GET _ml/inference/<model_id>/_stats` +

`GET _ml/inference/<model_id>,<model_id_2>/_stats` +

`GET _ml/inference/<model_id_pattern*>,<model_id_2>/_stats`


[[ml-get-inference-stats-prereq]]
== {api-prereq-title}

Required privileges which should be added to a custom role:

* cluster: `monitor_ml`

For more information, see <<security-privileges>> and {ml-docs-setup-privileges}.

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

You can get usage information for multiple trained models in a single API 
request by using a comma-separated list of model IDs or a wildcard expression.


[[ml-get-inference-stats-path-params]]
== {api-path-parms-title}

`<model_id>`::
(Optional, string) 
include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=model-id]


[[ml-get-inference-stats-query-params]]
== {api-query-parms-title}

`allow_no_match`::
(Optional, boolean) 
include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=allow-no-match-models]

`from`::
(Optional, integer) 
include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=from]

`size`::
(Optional, integer) 
include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=size]

[role="child_attributes"]
[[ml-get-inference-stats-results]]
== {api-response-body-title}

`count`::
(integer)
The total number of trained model statistics that matched the requested ID 
patterns. Could be higher than the number of items in the `trained_model_stats` 
array as the size of the array is restricted by the supplied `size` parameter.

`trained_model_stats`::
(array)
An array of trained model statistics, which are sorted by the `model_id` value 
in ascending order.
+
.Properties of trained model stats
[%collapsible%open]
====
`model_id`:::
(string)
include::{es-repo-dir}/ml/ml-shared.asciidoc[tag=model-id]

`pipeline_count`:::
(integer)
The number of ingest pipelines that currently refer to the model.

`inference_stats`:::
(object)
A collection of inference stats fields.
+
.Properties of inference stats
[%collapsible%open]
=====

`missing_all_fields_count`:::
(integer)
The number of inference calls where all the training features for the model
were missing.

`inference_count`:::
(integer)
The total number of times the model has been called for inference.
This is across all inference contexts, including all pipelines.

`cache_miss_count`:::
(integer)
The number of times the model was loaded for inference and was not retrieved 
from the cache. If this number is close to the `inference_count`, then the cache 
is not being appropriately used. This can be solved by increasing the cache size 
or its time-to-live (TTL). See <<general-ml-settings>> for the appropriate 
settings.

`failure_count`:::
(integer)
The number of failures when using the model for inference.

`timestamp`:::
(<<time-units,time units>>)
The time when the statistics were last updated.
=====

`ingest`:::
(object)
A collection of ingest stats for the model across all nodes. The values are
summations of the individual node statistics. The format matches the `ingest`
section in <<cluster-nodes-stats>>.

====

[[ml-get-inference-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.

[[ml-get-inference-stats-example]]
== {api-examples-title}

The following example gets usage information for all the trained models:

[source,console]
--------------------------------------------------
GET _ml/inference/_stats
--------------------------------------------------
// TEST[skip:TBD]


The API returns the following results:

[source,console-result]
----
{
  "count": 2,
  "trained_model_stats": [
    {
      "model_id": "flight-delay-prediction-1574775339910",
      "pipeline_count": 0,
      "inference_stats": {
        "failure_count": 0,
        "inference_count": 4,
        "cache_miss_count": 3,
        "missing_all_fields_count": 0,
        "timestamp": 1592399986979
      }
    },
    {
      "model_id": "regression-job-one-1574775307356",
      "pipeline_count": 1,
      "inference_stats": {
        "failure_count": 0,
        "inference_count": 178,
        "cache_miss_count": 3,
        "missing_all_fields_count": 0,
        "timestamp": 1592399986979
      },
      "ingest": {
        "total": {
          "count": 178,
          "time_in_millis": 8,
          "current": 0,
          "failed": 0
        },
        "pipelines": {
          "flight-delay": {
            "count": 178,
            "time_in_millis": 8,
            "current": 0,
            "failed": 0,
            "processors": [
              {
                "inference": {
                  "type": "inference",
                  "stats": {
                    "count": 178,
                    "time_in_millis": 7,
                    "current": 0,
                    "failed": 0
                  }
                }
              }
            ]
          }
        }
      }
    }
  ]
}
----
// NOTCONSOLE