Comment utiliser l’API de migration de flux de données pour convertir des indices réguliers en flux de données.
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"
}
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
}
}
]
}
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.
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": {}
}
}
}
}
}
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).
POST _data_stream/_migrate/test-migrate
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