Elasticsearch - Données de cumul

Un travail de cumul est une tâche périodique qui récapitule les données des index spécifiés par un modèle d'index et les roule dans un nouvel index. Dans l'exemple suivant, nous créons un index nommé sensor avec différents horodatages. Ensuite, nous créons une tâche de cumul pour cumuler périodiquement les données de ces index à l'aide de la tâche cron.

PUT /sensor/_doc/1
{
   "timestamp": 1516729294000,
   "temperature": 200,
   "voltage": 5.2,
   "node": "a"
}

En exécutant le code ci-dessus, nous obtenons le résultat suivant -

{
   "_index" : "sensor",
   "_type" : "_doc",
   "_id" : "1",
   "_version" : 1,
   "result" : "created",
   "_shards" : {
      "total" : 2,
      "successful" : 1,
      "failed" : 0
   },
   "_seq_no" : 0,
   "_primary_term" : 1
}

Maintenant, ajoutez un deuxième document et ainsi de suite pour d'autres documents également.

PUT /sensor-2018-01-01/_doc/2
{
   "timestamp": 1413729294000,
   "temperature": 201,
   "voltage": 5.9,
   "node": "a"
}

Créer un travail de cumul

PUT _rollup/job/sensor
{
   "index_pattern": "sensor-*",
   "rollup_index": "sensor_rollup",
   "cron": "*/30 * * * * ?",
   "page_size" :1000,
   "groups" : {
      "date_histogram": {
         "field": "timestamp",
         "interval": "60m"
      },
      "terms": {
         "fields": ["node"]
      }
   },
   "metrics": [
      {
         "field": "temperature",
         "metrics": ["min", "max", "sum"]
      },
      {
         "field": "voltage",
         "metrics": ["avg"]
      }
   ]
}

Le paramètre cron contrôle quand et à quelle fréquence le travail s'active. Lorsque le calendrier cron d'un travail de cumul se déclenche, il commence à remonter là où il s'était arrêté après la dernière activation.

Une fois le travail exécuté et traité certaines données, nous pouvons utiliser la requête DSL pour effectuer des recherches.

GET /sensor_rollup/_rollup_search
{
   "size": 0,
   "aggregations": {
      "max_temperature": {
         "max": {
            "field": "temperature"
         }
      }
   }
}