- スナップショットからの復元
- Python
- Ruby
- Js
- Console
- Console-Result
- Python
- Ruby
- Js
- Console
- Console-Result
- Python
- Ruby
- Js
- Console
- Console-Result
- Ruby
- Js
- Console
- Python
- Ruby
- Js
- Console
- Python
- Ruby
- Js
- Console
- Console-Result
- Python
- Ruby
- Js
- Console
- Python
- Ruby
- Js
- Console
- Python
- Ruby
- Js
- Console
- Console-Result
- Python
- Ruby
- Js
- Console
- Console-Result
- Python
- Ruby
- Js
- Console
- Console-Result
- Python
- Ruby
- Js
- Console
- Console-Result
- Ruby
- Js
- Console
- Python
- Ruby
- Js
- Console
- Python
- Ruby
- Js
- Console
- Console-Result
- Python
- Ruby
- Js
- Console
- Python
- Ruby
- Js
- Console
- Python
- Ruby
- Js
- Console
- Console-Result
スナップショットからの復元
Elasticsearchは、クラスターの外部にデータのコピーを保存するためにスナップショットを使用しています。スナップショットを復元することで、クラスター内にシャードのコピーがないインデックスやデータストリームを回復できます。これは、データ(インデックスまたはデータストリーム)が削除された場合や、クラスターのメンバーシップが変更され、システム内の現在のノードにデータのコピーが含まれていない場合に発生する可能性があります。
欠落しているデータを復元するには、影響を受けたインデックスとデータストリームのバックアップが、使用ケースに対して十分に最新である必要があります。これを確認せずに進まないでください。
欠落しているデータを持つインデックスとデータストリームを復元するには:
Kibanaを使用する
- 1. Elastic Cloudコンソールにログインします。
- 2. Elasticsearchサービスパネルで、デプロイメントの名前をクリックします。
デプロイメントの名前が無効になっている場合、Kibanaインスタンスが正常でない可能性があります。その場合は、Elasticサポートに連絡してください。デプロイメントにKibanaが含まれていない場合は、最初に有効にするだけで済みます。 - 3. デプロイメントのサイドナビゲーションメニュー(左上隅のElasticロゴの下に配置)を開き、**Dev Tools
Console**に移動します。
- 4. cat indices APIを使用して影響を受けたインデックスを表示します。
Python
resp = client.cat.indices(
v=True,
health="red",
h="index,status,health",
)
print(resp)
Ruby
response = client.cat.indices(
v: true,
health: 'red',
h: 'index,status,health'
)
puts response
Js
const response = await client.cat.indices({
v: "true",
health: "red",
h: "index,status,health",
});
console.log(response);
Console
GET _cat/indices?v&health=red&h=index,status,health
Console-Result
index status health
.ds-my-data-stream-2022.06.17-000001 open red
kibana_sample_data_flights open red
上記のred
インデックスの健康状態は、これらのインデックスがプライマリシャードを欠いていることを示しており、つまりデータが欠落していることを意味します。
- 5. データを復元するためには、これらの2つのインデックスを含むスナップショットを見つける必要があります。そのようなスナップショットを見つけるには、get snapshot APIを使用します。
Python
resp = client.snapshot.get(
repository="my_repository",
snapshot="*",
verbose=False,
)
print(resp)
Ruby
response = client.snapshot.get(
repository: 'my_repository',
snapshot: '*',
verbose: false
)
puts response
Js
const response = await client.snapshot.get({
repository: "my_repository",
snapshot: "*",
verbose: "false",
});
console.log(response);
Console
GET _snapshot/my_repository/*?verbose=false
Console-Result
{
"snapshots" : [
{
"snapshot" : "snapshot-20200617",
"uuid" : "dZyPs1HyTwS-cnKdH08EPg",
"repository" : "my_repository",
"indices" : [
".apm-agent-configuration",
".apm-custom-link",
".ds-ilm-history-5-2022.06.17-000001",
".ds-my-data-stream-2022.06.17-000001",
".geoip_databases",
".kibana-event-log-8.2.2-000001",
".kibana_8.2.2_001",
".kibana_task_manager_8.2.2_001",
"kibana_sample_data_ecommerce",
"kibana_sample_data_flights",
"kibana_sample_data_logs"
],
"data_streams" : [ ],
"state" : "SUCCESS"
}
],
"total" : 1,
"remaining" : 0
}
スナップショットの名前。 | |
スナップショットのリポジトリ。 | |
スナップショットにバックアップされたインデックス。 | |
スナップショットが成功したかどうか。 |
- 6. スナップショット
snapshot-20200617
には、復元したい2つのインデックスが含まれています。ターゲットインデックスを復元できるスナップショットが複数ある場合があります。最新のスナップショットを選択してください。 - 7. スナップショットを見つけたので、失われたデータを復元するためのデータストリームの準備を進めます。インデックスメタデータを確認して、インデックスがデータストリームの一部であるかどうかを確認します:
Python
resp = client.indices.get(
index="kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
features="settings",
flat_settings=True,
)
print(resp)
Ruby
response = client.indices.get(
index: 'kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001',
features: 'settings',
flat_settings: true
)
puts response
Js
const response = await client.indices.get({
index: "kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
features: "settings",
flat_settings: "true",
});
console.log(response);
Console
GET kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001?features=settings&flat_settings
Console-Result
{
".ds-my-data-stream-2022.06.17-000001" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index.creation_date" : "1658406121699",
"index.hidden" : "true",
"index.lifecycle.name" : "my-lifecycle-policy",
"index.number_of_replicas" : "1",
"index.number_of_shards" : "1",
"index.provided_name" : ".ds-my-data-stream-2022.06.17-000001",
"index.routing.allocation.include._tier_preference" : "data_hot",
"index.uuid" : "HmlFXp6VSu2XbQ-O3hVrwQ",
"index.version.created" : "8020299"
},
"data_stream" : "my-data-stream"
},
"kibana_sample_data_flights" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index.creation_date" : "1655121541454",
"index.number_of_replicas" : "0",
"index.number_of_shards" : "1",
"index.provided_name" : "kibana_sample_data_flights",
"index.routing.allocation.include._tier_preference" : "data_content",
"index.uuid" : "jMOlwKPPSzSraeeBWyuoDA",
"index.version.created" : "8020299"
}
}
}
インデックスの名前。 | |
私たちが探しているメタデータを含むこのインデックスの設定。 | |
このインデックスがデータストリームの一部であることを示し、データストリーム名を表示します。 | |
リクエストした他のインデックスの名前。 |
上記の応答は、kibana_sample_data_flights
がデータストリームの一部ではないことを示しています。なぜなら、設定にdata_stream
というフィールドがないからです。
逆に、.ds-my-data-stream-2022.06.17-000001
はmy-data-stream
というデータストリームの一部です。このようなインデックスを見つけた場合、そのインデックスにデータがまだインデックスされているかどうかを確認する必要があります。settings
を確認することでそれを確認できます。このプロパティ"index.lifecycle.indexing_complete" : "true"
が見つかれば、インデックス内のインデックス作成が完了しており、次のステップに進むことができます。
#### Python
``````python
resp = client.indices.rollover(
alias="my-data-stream",
)
print(resp)
`
Ruby
response = client.indices.rollover(
alias: 'my-data-stream'
)
puts response
Js
const response = await client.indices.rollover({
alias: "my-data-stream",
});
console.log(response);
Console
POST my-data-stream/_rollover
- 8. データストリームの準備が完了したので、close indices APIを使用してターゲットインデックスを閉じます。
Python
resp = client.indices.close(
index="kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
)
print(resp)
Ruby
response = client.indices.close(
index: 'kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001'
)
puts response
Js
const response = await client.indices.close({
index: "kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
});
console.log(response);
Console
POST kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001/_close
cat indices APIを使用して、インデックスが閉じられていることを確認できます。
Python
resp = client.cat.indices(
v=True,
health="red",
h="index,status,health",
)
print(resp)
Ruby
response = client.cat.indices(
v: true,
health: 'red',
h: 'index,status,health'
)
puts response
Js
const response = await client.cat.indices({
v: "true",
health: "red",
h: "index,status,health",
});
console.log(response);
Console
GET _cat/indices?v&health=red&h=index,status,health
Console-Result
index status health
.ds-my-data-stream-2022.06.17-000001 close red
kibana_sample_data_flights close red
- 9. インデックスは閉じられています。これで、restore snapshot APIを使用してスナップショットから復元できます。
Python
resp = client.snapshot.restore(
repository="my_repository",
snapshot="snapshot-20200617",
indices="kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
include_aliases=True,
)
print(resp)
Ruby
response = client.snapshot.restore(
repository: 'my_repository',
snapshot: 'snapshot-20200617',
body: {
indices: 'kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001',
include_aliases: true
}
)
puts response
Js
const response = await client.snapshot.restore({
repository: "my_repository",
snapshot: "snapshot-20200617",
indices: "kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
include_aliases: true,
});
console.log(response);
Console
POST _snapshot/my_repository/snapshot-20200617/_restore
{
"indices": "kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
"include_aliases": true
}
復元するインデックス。 | |
エイリアスも復元したい。 |
復元する必要がある機能状態がある場合は、feature_states
フィールドを使用してそれらを指定する必要があります。復元する機能状態に属するインデックスは、indices
の下に指定されてはいけません。Health APIは、スナップショットからの復元診断のために復元する必要があるindices
とfeature_states
の両方を返します。例:
Python
resp = client.snapshot.restore(
repository="my_repository",
snapshot="snapshot-20200617",
feature_states=[
"geoip"
],
indices="kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
include_aliases=True,
)
print(resp)
Ruby
response = client.snapshot.restore(
repository: 'my_repository',
snapshot: 'snapshot-20200617',
body: {
feature_states: [
'geoip'
],
indices: 'kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001',
include_aliases: true
}
)
puts response
Js
const response = await client.snapshot.restore({
repository: "my_repository",
snapshot: "snapshot-20200617",
feature_states: ["geoip"],
indices: "kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
include_aliases: true,
});
console.log(response);
Console
POST _snapshot/my_repository/snapshot-20200617/_restore
{
"feature_states": [ "geoip" ],
"indices": "kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
"include_aliases": true
}
- 10. 最後に、cat indices APIを介してインデックスの健康状態が
green
であることを確認できます。
Python
resp = client.cat.indices(
v=True,
index=".ds-my-data-stream-2022.06.17-000001,kibana_sample_data_flightsh=index,status,health",
)
print(resp)
Ruby
response = client.cat.indices(
v: true,
index: '.ds-my-data-stream-2022.06.17-000001,kibana_sample_data_flightsh=index,status,health'
)
puts response
Js
const response = await client.cat.indices({
v: "true",
index:
".ds-my-data-stream-2022.06.17-000001,kibana_sample_data_flightsh=index,status,health",
});
console.log(response);
Console
GET _cat/indices?v&index=.ds-my-data-stream-2022.06.17-000001,kibana_sample_data_flightsh=index,status,health
Console-Result
index status health
.ds-my-data-stream-2022.06.17-000001 open green
kibana_sample_data_flights open green
上記のように、インデックスはgreen
で開いています。問題は解決されました。
スナップショットの作成と復元に関する詳細なガイダンスについては、このガイドを参照してください。
シャードが欠落しているインデックスを復元するには:
- 1. cat indices APIを使用して影響を受けたインデックスを表示します。
Python
resp = client.cat.indices(
v=True,
health="red",
h="index,status,health",
)
print(resp)
Ruby
response = client.cat.indices(
v: true,
health: 'red',
h: 'index,status,health'
)
puts response
Js
const response = await client.cat.indices({
v: "true",
health: "red",
h: "index,status,health",
});
console.log(response);
Console
GET _cat/indices?v&health=red&h=index,status,health
Console-Result
index status health
.ds-my-data-stream-2022.06.17-000001 open red
kibana_sample_data_flights open red
上記のred
インデックスの健康状態は、これらのインデックスがプライマリシャードを欠いていることを示しており、つまりデータが欠落していることを意味します。
- 2. データを復元するためには、これらの2つのインデックスを含むスナップショットを見つける必要があります。そのようなスナップショットを見つけるには、get snapshot APIを使用します。
Python
resp = client.snapshot.get(
repository="my_repository",
snapshot="*",
verbose=False,
)
print(resp)
Ruby
response = client.snapshot.get(
repository: 'my_repository',
snapshot: '*',
verbose: false
)
puts response
Js
const response = await client.snapshot.get({
repository: "my_repository",
snapshot: "*",
verbose: "false",
});
console.log(response);
Console
GET _snapshot/my_repository/*?verbose=false
Console-Result
{
"snapshots" : [
{
"snapshot" : "snapshot-20200617",
"uuid" : "dZyPs1HyTwS-cnKdH08EPg",
"repository" : "my_repository",
"indices" : [
".apm-agent-configuration",
".apm-custom-link",
".ds-ilm-history-5-2022.06.17-000001",
".ds-my-data-stream-2022.06.17-000001",
".geoip_databases",
".kibana-event-log-8.2.2-000001",
".kibana_8.2.2_001",
".kibana_task_manager_8.2.2_001",
"kibana_sample_data_ecommerce",
"kibana_sample_data_flights",
"kibana_sample_data_logs"
],
"data_streams" : [ ],
"state" : "SUCCESS"
}
],
"total" : 1,
"remaining" : 0
}
スナップショットの名前。 | |
スナップショットのリポジトリ。 | |
スナップショットにバックアップされたインデックス。 | |
スナップショットが成功したかどうか。 |
- 3. スナップショット
snapshot-20200617
には、復元したい2つのインデックスが含まれています。ターゲットインデックスを復元できるスナップショットが複数ある場合があります。最新のスナップショットを選択してください。 - 4. スナップショットを見つけたので、失われたデータを復元するためのデータストリームの準備を進めます。インデックスメタデータを確認して、インデックスがデータストリームの一部であるかどうかを確認します:
Python
resp = client.indices.get(
index="kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
features="settings",
flat_settings=True,
)
print(resp)
Ruby
response = client.indices.get(
index: 'kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001',
features: 'settings',
flat_settings: true
)
puts response
Js
const response = await client.indices.get({
index: "kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
features: "settings",
flat_settings: "true",
});
console.log(response);
Console
GET kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001?features=settings&flat_settings
Console-Result
{
".ds-my-data-stream-2022.06.17-000001" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index.creation_date" : "1658406121699",
"index.hidden" : "true",
"index.lifecycle.name" : "my-lifecycle-policy",
"index.number_of_replicas" : "1",
"index.number_of_shards" : "1",
"index.provided_name" : ".ds-my-data-stream-2022.06.17-000001",
"index.routing.allocation.include._tier_preference" : "data_hot",
"index.uuid" : "HmlFXp6VSu2XbQ-O3hVrwQ",
"index.version.created" : "8020299"
},
"data_stream" : "my-data-stream"
},
"kibana_sample_data_flights" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index.creation_date" : "1655121541454",
"index.number_of_replicas" : "0",
"index.number_of_shards" : "1",
"index.provided_name" : "kibana_sample_data_flights",
"index.routing.allocation.include._tier_preference" : "data_content",
"index.uuid" : "jMOlwKPPSzSraeeBWyuoDA",
"index.version.created" : "8020299"
}
}
}
インデックスの名前。 | |
私たちが探しているメタデータを含むこのインデックスの設定。 | |
このインデックスがデータストリームの一部であることを示し、データストリーム名を表示します。 | |
リクエストした他のインデックスの名前。 |
上記の応答は、kibana_sample_data_flights
がデータストリームの一部ではないことを示しています。なぜなら、設定にdata_stream
というフィールドがないからです。
逆に、.ds-my-data-stream-2022.06.17-000001
はmy-data-stream
というデータストリームの一部です。このようなインデックスを見つけた場合、そのインデックスにデータがまだインデックスされているかどうかを確認する必要があります。settings
を確認することでそれを確認できます。このプロパティ"index.lifecycle.indexing_complete" : "true"
が見つかれば、インデックス内のインデックス作成が完了しており、次のステップに進むことができます。
#### Python
``````python
resp = client.indices.rollover(
alias="my-data-stream",
)
print(resp)
`
Ruby
response = client.indices.rollover(
alias: 'my-data-stream'
)
puts response
Js
const response = await client.indices.rollover({
alias: "my-data-stream",
});
console.log(response);
Console
POST my-data-stream/_rollover
- 5. データストリームの準備が完了したので、close indices APIを使用してターゲットインデックスを閉じます。
Python
resp = client.indices.close(
index="kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
)
print(resp)
Ruby
response = client.indices.close(
index: 'kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001'
)
puts response
Js
const response = await client.indices.close({
index: "kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
});
console.log(response);
Console
POST kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001/_close
cat indices APIを使用して、インデックスが閉じられていることを確認できます。
Python
resp = client.cat.indices(
v=True,
health="red",
h="index,status,health",
)
print(resp)
Ruby
response = client.cat.indices(
v: true,
health: 'red',
h: 'index,status,health'
)
puts response
Js
const response = await client.cat.indices({
v: "true",
health: "red",
h: "index,status,health",
});
console.log(response);
Console
GET _cat/indices?v&health=red&h=index,status,health
Console-Result
index status health
.ds-my-data-stream-2022.06.17-000001 close red
kibana_sample_data_flights close red
- 6. インデックスは閉じられています。これで、restore snapshot APIを使用してスナップショットから復元できます。
Python
resp = client.snapshot.restore(
repository="my_repository",
snapshot="snapshot-20200617",
indices="kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
include_aliases=True,
)
print(resp)
Ruby
response = client.snapshot.restore(
repository: 'my_repository',
snapshot: 'snapshot-20200617',
body: {
indices: 'kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001',
include_aliases: true
}
)
puts response
Js
const response = await client.snapshot.restore({
repository: "my_repository",
snapshot: "snapshot-20200617",
indices: "kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
include_aliases: true,
});
console.log(response);
Console
POST _snapshot/my_repository/snapshot-20200617/_restore
{
"indices": "kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
"include_aliases": true
}
復元するインデックス。 | |
エイリアスも復元したい。 |
復元する必要がある機能状態がある場合は、feature_states
フィールドを使用してそれらを指定する必要があります。復元する機能状態に属するインデックスは、indices
の下に指定されてはいけません。Health APIは、スナップショットからの復元診断のために復元する必要があるindices
とfeature_states
の両方を返します。例:
Python
resp = client.snapshot.restore(
repository="my_repository",
snapshot="snapshot-20200617",
feature_states=[
"geoip"
],
indices="kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
include_aliases=True,
)
print(resp)
Ruby
response = client.snapshot.restore(
repository: 'my_repository',
snapshot: 'snapshot-20200617',
body: {
feature_states: [
'geoip'
],
indices: 'kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001',
include_aliases: true
}
)
puts response
Js
const response = await client.snapshot.restore({
repository: "my_repository",
snapshot: "snapshot-20200617",
feature_states: ["geoip"],
indices: "kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
include_aliases: true,
});
console.log(response);
Console
POST _snapshot/my_repository/snapshot-20200617/_restore
{
"feature_states": [ "geoip" ],
"indices": "kibana_sample_data_flights,.ds-my-data-stream-2022.06.17-000001",
"include_aliases": true
}
- 7. 最後に、cat indices APIを介してインデックスの健康状態が
green
であることを確認できます。
Python
resp = client.cat.indices(
v=True,
index=".ds-my-data-stream-2022.06.17-000001,kibana_sample_data_flightsh=index,status,health",
)
print(resp)
Ruby
response = client.cat.indices(
v: true,
index: '.ds-my-data-stream-2022.06.17-000001,kibana_sample_data_flightsh=index,status,health'
)
puts response
Js
const response = await client.cat.indices({
v: "true",
index:
".ds-my-data-stream-2022.06.17-000001,kibana_sample_data_flightsh=index,status,health",
});
console.log(response);
Console
GET _cat/indices?v&index=.ds-my-data-stream-2022.06.17-000001,kibana_sample_data_flightsh=index,status,health
Console-Result
index status health
.ds-my-data-stream-2022.06.17-000001 open green
kibana_sample_data_flights open green
上記のように、インデックスはgreen
で開いています。問題は解決されました。
スナップショットの作成と復元に関する詳細なガイダンスについては、このガイドを参照してください。