Migration vers un datastream

Description de l’API de migration de flux de données

Comment utiliser l’API de migration de flux de données pour convertir des indices réguliers en flux de données.

Exemple

Nous allons commencer par configurer les index de manière à ce qu’ils ressemblent à un scénario réel.

Je crée 5 index différents, chacun avec un seul document, avec quelques paramètres d’allocation de routage pour ressembler à un scénario réel :

# Create first index
PUT test-migrate-000001
       
# Update settings
PUT test-migrate-000001/_settings
{
  "index": {
    "routing": {
      "allocation": {
        "include": {
          "_tier_preference": "data_warm"
        }
      }
    }
  }
}
# Add data
POST test-migrate-000001/_doc
{
  "@timestamp" : "2023-06-20T14:35:21.643Z"
}
POST test-migrate-000002/_doc
{
  "@timestamp" : "2023-06-20T14:35:21.643Z"
}
POST test-migrate-000003/_doc
{
  "@timestamp" : "2023-06-20T14:35:21.643Z"
}
POST test-migrate-000004/_doc
{
  "@timestamp" : "2023-06-20T14:35:21.643Z"
}
POST test-migrate-000005/_doc
{
  "@timestamp" : "2023-06-20T14:35:21.643Z"
}
  1. J’ai ensuite créé des alias, de sorte que test-migrate-000005 soit accessible en écriture, et le reste non :
POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "test-migrate-000001",
        "alias": "test-migrate",
        "is_write_index": false
      }
    },
    {
      "add": {
        "index": "test-migrate-000002",
        "alias": "test-migrate",
        "is_write_index": false
      }
    },
    {
      "add": {
        "index": "test-migrate-000003",
        "alias": "test-migrate",
        "is_write_index": false
      }
    },
    {
      "add": {
        "index": "test-migrate-000004",
        "alias": "test-migrate",
        "is_write_index": false
      }
    },
    {
      "add": {
        "index": "test-migrate-000005",
        "alias": "test-migrate",
        "is_write_index": true
      }
    }
  ]
}
  1. Je m’assure que l’alias d’écriture a fonctionné :
POST test-migrate/_doc
{
  "@timestamp" : "2023-06-20T14:35:21.643Z"
}

À ce stade, j’ai quelque chose qui ressemble à un scénario réel, où il y a un index inscriptible et divers autres index faisant partie du même ensemble de données. Vous pouvez confirmer dans Kibana Index Management que vous avez 5 index réguliers, test-migrate-000001 à test-migrate-000005.

À partir de ce point, nous suivrons https://www.elastic.co/guide/en/elasticsearch/reference/8.8/set-up-a-data-stream.html.

  1. Je crée une politique ILM :
PUT _ilm/policy/migrate-lifecycle-policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "80gb"
          }
        }
      },
      "warm": {
        "min_age": "0d",
        "actions": {
          "shrink": {
            "number_of_shards": 1
          },
          "forcemerge": {
            "max_num_segments": 1
          }
        }
      },
      "cold": {
        "min_age": "10d",
        "actions": {
          "searchable_snapshot": {
            "snapshot_repository": "found-snapshots"
          }
        }
      },
      "frozen": {
        "min_age": "10d",
        "actions": {
          "searchable_snapshot": {
            "snapshot_repository": "found-snapshots"
          }
        }
      },
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}
  1. Je crée les modèles de composants (paramètres généraux et mappings généraux, plus paramètres/mappings spécifiques) :
PUT /_component_template/general_settings
{
  "template": {
    "settings": {
      "index.number_of_shards": 1,
      "index.number_of_replicas": 0
    }
  }
}
PUT /_component_template/general_mappings
{
  "template": {
    "mappings": {
      "properties": {
        "@timestamp": {
          "type": "date",
          "format": "date_optional_time||epoch_millis"
        }
      }
    }
  }
}
PUT /_component_template/specifics
{
  "template": {
    "settings": {
      "index.lifecycle.name": "migrate-lifecycle-policy"
    }
  }
}
PUT _index_template/migrate-template
{
  "index_patterns": ["test-migrate*"],
  "data_stream": { },
  "composed_of": ["general_settings", "general_mappings", "specifics"],
  "priority": 500,
  "_meta": {
    "description": "Template for my time series data",
    "my-custom-meta-field": "More arbitrary metadata"
  }
}

L’échafaudage pour le flux de données a maintenant été mis en place. La documentation parle maintenant de la réindexation, des données, pour cet exemple nous allons tester la migration. Nous utiliserons donc l’API migrate data stream (https://www.elastic.co/guide/en/elasticsearch/reference/8.8/indices-migrate-to-data-stream.html).

  1. Exécutez l’API migrate data stream pour créer le flux de données. Le flux de données s’appelle désormais test-migrate (il s’agissait auparavant de notre alias), et tous les index individuels habituels, de test-migrate-000001 à test-migrate-000005, deviennent les index de sauvegarde.
POST _data_stream/_migrate/test-migrate
  1. Testez que l’écriture fonctionne toujours, en écrivant dans le flux de données :
POST test-migrate/_doc
{
  "@timestamp" : "2023-06-20T14:35:21.643Z"
}

Vous pouvez maintenant confirmer dans Kibana Index Management que le flux de données test-migrate existe, et que les index de sauvegarde sont test-migrate-000001 à test-migrate-000005.

Références https://www.elastic.co/guide/en/elasticsearch/reference/8.8/set-up-a-data-stream.html https://www.elastic.co/guide/en/elasticsearch/reference/8.8/indices-migrate-to-data-stream.html