Un Rollup Job est une tâche périodique qui consiste à agréger des données provenant d’indices spécifiés par un modèle d’indice, puis à les intégrer dans un nouvel indice. Les indices de rollup sont un bon moyen de stocker de manière compacte des mois ou des années de données historiques pour les utiliser dans des visualisations et des rapports.
Dans le contexte de cet exemple, je réalise un rollup job sur l’index système d’Elasticsearch. Par défaut cette index est crée avec un horodatage journalier et une rétention de 7 jours. C’est un exemple parfait de rollup job pour stocker des données du système Elasticsearch au delas des 7 jours de rétention. Cela va permettre des crées une rétention plus importante avec uniquement les données pertinantes pour créer par exemple un tableau de bord de capaplanning.
PUT _rollup/job/rollup-cluster-stats-v1
{
"index_pattern" : ".monitoring-es-7-*",
"rollup_index" : "rollup-cluster-stats",
"cron" : "1 * * * * ?",
"groups" : {
"date_histogram" : {
"calendar_interval" : "1m",
"field" : "timestamp",
"delay" : "5m",
"time_zone" : "Europe/Paris"
},
"terms" : {
"fields" : [
"cluster_settings.cluster.metadata.display_name",
"cluster_state.status",
"cluster_uuid"
]
}
},
"metrics" : [
{
"field" : "cluster_stats.nodes.jvm.mem.heap_used_in_bytes",
"metrics" : [
"avg"
]
},
{
"field" : "cluster_stats.nodes.jvm.mem.heap_max_in_bytes",
"metrics" : [
"max"
]
},
{
"field" : "cluster_stats.indices.shards.primaries",
"metrics" : [
"max"
]
},
{
"field" : "cluster_stats.indices.shards.replication",
"metrics" : [
"max"
]
},
{
"field" : "cluster_stats.indices.shards.total",
"metrics" : [
"max"
]
},
{
"field" : "cluster_stats.nodes.fs.free_in_bytes",
"metrics" : [
"min"
]
},
{
"field" : "cluster_stats.nodes.fs.total_in_bytes",
"metrics" : [
"max"
]
}
],
"timeout" : "20s",
"page_size" : 10000
}
Dans cette exemple, on définit :
.monitoring-es-7-*rolllup-cluster-statsEnsuite on définit des paramètres pour l’aggrégation des données :
1mtimestamps5mPuis on définit les champs texte ou keyword dans terms et on définit les champs numériques dans metrics. Enfin on définit le nombre de page_size qui correspond au nombre de document simultanée pour le traitement du rollup job.
En conséquence que plus le paramètre page_size est grand et plus le processus prendra de la JVM et sera rapide.
En complément voici les configurations des rollup job pour les données nodes et index.
PUT _rollup/job/rollup-node-stats-v1
{
"index_pattern" : ".monitoring-es-7-*",
"rollup_index" : "test-rollup",
"cron" : "1 * * * * ?",
"groups" : {
"date_histogram" : {
"calendar_interval" : "1m",
"field" : "timestamp",
"delay" : "5m",
"time_zone" : "Europe/Paris"
},
"terms" : {
"fields" : [
"cluster_uuid",
"node_stats.node_id"
]
}
},
"metrics" : [
{
"field" : "node_stats.jvm.mem.heap_used_in_bytes",
"metrics" : [
"max"
]
},
{
"field" : "node_stats.jvm.mem.heap_max_in_bytes",
"metrics" : [
"max"
]
},
{
"field" : "node_stats.jvm.mem.heap_used_percent",
"metrics" : [
"max"
]
},
{
"field" : "node_stats.os.cpu.load_average.5m",
"metrics" : [
"max",
"min",
"avg"
]
},
{
"field" : "node_stats.os.cpu.load_average.1m",
"metrics" : [
"max",
"min",
"avg"
]
},
{
"field" : "node_stats.os.cpu.load_average.15m",
"metrics" : [
"max",
"min",
"avg"
]
},
{
"field" : "node_stats.fs.total.free_in_bytes",
"metrics" : [
"min"
]
},
{
"field" : "node_stats.fs.total.total_in_bytes",
"metrics" : [
"max"
]
}
],
"timeout" : "20s",
"page_size" : 10000
}
PUT _rollup/job/rollup-index-stats-v1
{
"index_pattern" : ".monitoring-es-7-*",
"rollup_index" : "test-rollup",
"cron" : "1 * * * * ?",
"groups" : {
"date_histogram" : {
"calendar_interval" : "1m",
"field" : "timestamp",
"delay" : "5m",
"time_zone" : "Europe/Paris"
},
"terms" : {
"fields" : [
"cluster_uuid",
"source_node.uuid"
]
}
},
"metrics" : [
{
"field" : "index_stats.primaries.store.size_in_bytes",
"metrics" : [
"max"
]
},
{
"field" : "index_stats.total.store.size_in_bytes",
"metrics" : [
"max"
]
},
{
"field" : "index_stats.total.segments.memory_in_bytes",
"metrics" : [
"max"
]
},
{
"field" : "index_stats.total.segments.terms_memory_in_bytes",
"metrics" : [
"max"
]
}
],
"timeout" : "20s",
"page_size" : 10000
}
### Affiche la configuration du rollup job
GET _rollup/job/rollup-cluster-stats-v1
### Affiche les données du rollup job
GET rollup-cluster-stats-v1/_rollup/data
### Start un rollup job
POST _rollup/job/rollup-cluster-stats-v1/_start
### Stop un rollup job
POST _rollup/job/rollup-cluster-stats-v1/_stop