Get rollup jobs API
Deprecated in 8.11.0.
Rollups will be removed in a future version. Use downsampling instead.
Retrieves the configuration, stats, and status of rollup jobs.
Request
GET _rollup/job/<job_id>
Prerequisites
- If the Elasticsearch security features are enabled, you must have
monitor,monitor_rollup,manageormanage_rollupcluster privileges to use this API. For more information, see Security privileges.
Description
The API can return the details for a single rollup job or for all rollup jobs.
This API returns only active (both STARTED and STOPPED) jobs. If a job was created, ran for a while then deleted, this API does not return any details about that job.
For details about a historical rollup job, the rollup capabilities API may be more useful.
Path parameters
-
<job_id> - (Optional, string) Identifier for the rollup job. If it is
_allor omitted, the API returns all rollup jobs.
Response body
-
jobs -
(array) An array of rollup job resources.
Properties of rollup job resources
-
config - (object) Contains the configuration for the rollup job. This information is identical to the configuration that was supplied when creating the job via the create job API.
-
stats - (object) Contains transient statistics about the rollup job, such as how many documents have been processed and how many rollup summary docs have been indexed. These stats are not persisted. If a node is restarted, these stats are reset.
-
status -
(object) Contains the current status of the indexer for the rollup job. The possible values and their meanings are:
-
stoppedmeans the indexer is paused and will not process data, even if its cron interval triggers. -
startedmeans the indexer is running, but not actively indexing data. When the cron interval triggers, the job’s indexer will begin to process data. -
indexingmeans the indexer is actively processing data and creating new rollup documents. When in this state, any subsequent cron interval triggers will be ignored because the job is already active with the prior trigger. -
abortis a transient state, which is usually not witnessed by the user. It is used if the task needs to be shut down for some reason (job has been deleted, an unrecoverable error has been encountered, etc). Shortly after theabortstate is set, the job will remove itself from the cluster.
-
-
Examples
If we have already created a rollup job named sensor, the details about the job can be retrieved with:
resp = client.rollup.get_jobs(
id="sensor",
)
print(resp) response = client.rollup.get_jobs( id: 'sensor' ) puts response
const response = await client.rollup.getJobs({
id: "sensor",
});
console.log(response); GET _rollup/job/sensor
The API yields the following response:
{
"jobs": [
{
"config": {
"id": "sensor",
"index_pattern": "sensor-*",
"rollup_index": "sensor_rollup",
"cron": "*/30 * * * * ?",
"groups": {
"date_histogram": {
"fixed_interval": "1h",
"delay": "7d",
"field": "timestamp",
"time_zone": "UTC"
},
"terms": {
"fields": [
"node"
]
}
},
"metrics": [
{
"field": "temperature",
"metrics": [
"min",
"max",
"sum"
]
},
{
"field": "voltage",
"metrics": [
"avg"
]
}
],
"timeout": "20s",
"page_size": 1000
},
"status": {
"job_state": "stopped"
},
"stats": {
"pages_processed": 0,
"documents_processed": 0,
"rollups_indexed": 0,
"trigger_count": 0,
"index_failures": 0,
"index_time_in_ms": 0,
"index_total": 0,
"search_failures": 0,
"search_time_in_ms": 0,
"search_total": 0,
"processing_time_in_ms": 0,
"processing_total": 0
}
}
]
} The jobs array contains a single job (id: sensor) since we requested a single job in the endpoint’s URL. If we add another job, we can see how multi-job responses are handled:
resp = client.rollup.put_job(
id="sensor2",
index_pattern="sensor-*",
rollup_index="sensor_rollup",
cron="*/30 * * * * ?",
page_size=1000,
groups={
"date_histogram": {
"field": "timestamp",
"fixed_interval": "1h",
"delay": "7d"
},
"terms": {
"fields": [
"node"
]
}
},
metrics=[
{
"field": "temperature",
"metrics": [
"min",
"max",
"sum"
]
},
{
"field": "voltage",
"metrics": [
"avg"
]
}
],
)
print(resp)
resp1 = client.rollup.get_jobs(
id="_all",
)
print(resp1) const response = await client.rollup.putJob({
id: "sensor2",
index_pattern: "sensor-*",
rollup_index: "sensor_rollup",
cron: "*/30 * * * * ?",
page_size: 1000,
groups: {
date_histogram: {
field: "timestamp",
fixed_interval: "1h",
delay: "7d",
},
terms: {
fields: ["node"],
},
},
metrics: [
{
field: "temperature",
metrics: ["min", "max", "sum"],
},
{
field: "voltage",
metrics: ["avg"],
},
],
});
console.log(response);
const response1 = await client.rollup.getJobs({
id: "_all",
});
console.log(response1); PUT _rollup/job/sensor2
{
"index_pattern": "sensor-*",
"rollup_index": "sensor_rollup",
"cron": "*/30 * * * * ?",
"page_size": 1000,
"groups": {
"date_histogram": {
"field": "timestamp",
"fixed_interval": "1h",
"delay": "7d"
},
"terms": {
"fields": [ "node" ]
}
},
"metrics": [
{
"field": "temperature",
"metrics": [ "min", "max", "sum" ]
},
{
"field": "voltage",
"metrics": [ "avg" ]
}
]
}
GET _rollup/job/_all | We create a second job with name | |
| Then request all jobs by using |
Which will yield the following response:
{
"jobs": [
{
"config": {
"id": "sensor2",
"index_pattern": "sensor-*",
"rollup_index": "sensor_rollup",
"cron": "*/30 * * * * ?",
"groups": {
"date_histogram": {
"fixed_interval": "1h",
"delay": "7d",
"field": "timestamp",
"time_zone": "UTC"
},
"terms": {
"fields": [
"node"
]
}
},
"metrics": [
{
"field": "temperature",
"metrics": [
"min",
"max",
"sum"
]
},
{
"field": "voltage",
"metrics": [
"avg"
]
}
],
"timeout": "20s",
"page_size": 1000
},
"status": {
"job_state": "stopped"
},
"stats": {
"pages_processed": 0,
"documents_processed": 0,
"rollups_indexed": 0,
"trigger_count": 0,
"index_failures": 0,
"index_time_in_ms": 0,
"index_total": 0,
"search_failures": 0,
"search_time_in_ms": 0,
"search_total": 0,
"processing_time_in_ms": 0,
"processing_total": 0
}
},
{
"config": {
"id": "sensor",
"index_pattern": "sensor-*",
"rollup_index": "sensor_rollup",
"cron": "*/30 * * * * ?",
"groups": {
"date_histogram": {
"fixed_interval": "1h",
"delay": "7d",
"field": "timestamp",
"time_zone": "UTC"
},
"terms": {
"fields": [
"node"
]
}
},
"metrics": [
{
"field": "temperature",
"metrics": [
"min",
"max",
"sum"
]
},
{
"field": "voltage",
"metrics": [
"avg"
]
}
],
"timeout": "20s",
"page_size": 1000
},
"status": {
"job_state": "stopped"
},
"stats": {
"pages_processed": 0,
"documents_processed": 0,
"rollups_indexed": 0,
"trigger_count": 0,
"index_failures": 0,
"index_time_in_ms": 0,
"index_total": 0,
"search_failures": 0,
"search_time_in_ms": 0,
"search_total": 0,
"processing_time_in_ms": 0,
"processing_total": 0
}
}
]
}
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/rollup-get-job.html