データストリームの変更

データストリームのマッピングと設定を変更する

data streamには、一致するインデックステンプレートがあります。このテンプレートのマッピングとインデックス設定は、ストリームのために作成された新しいバックインデックスに適用されます。これには、ストリームが作成されたときに自動生成されるストリームの最初のバックインデックスが含まれます。

データストリームを作成する前に、このテンプレートに含めるマッピングと設定を慎重に検討することをお勧めします。

後でデータストリームのマッピングや設定を変更する必要がある場合、いくつかのオプションがあります:

変更に既存のフィールドマッピングや静的インデックス設定の修正が含まれる場合、データストリームのバックインデックスに変更を適用するには、再インデックスが必要になることがよくあります。すでに再インデックスを実行している場合は、同じプロセスを使用して新しいフィールドマッピングを追加し、動的インデックス設定を変更できます。再インデックスを使用してマッピングや設定を変更するを参照してください。

データストリームに新しいフィールドマッピングを追加する

データストリームに新しいフィールドのマッピングを追加するには、次の手順に従います:

  • 1. データストリームで使用されるインデックステンプレートを更新します。これにより、新しいフィールドマッピングがストリームのために作成される将来のバックインデックスに追加されます。
    たとえば、my-data-stream-templatemy-data-streamで使用される既存のインデックステンプレートです。
    次のインデックステンプレートの作成または更新リクエストは、messageという新しいフィールドのマッピングをテンプレートに追加します。

Python

  1. resp = client.indices.put_index_template(
  2. name="my-data-stream-template",
  3. index_patterns=[
  4. "my-data-stream*"
  5. ],
  6. data_stream={},
  7. priority=500,
  8. template={
  9. "mappings": {
  10. "properties": {
  11. "message": {
  12. "type": "text"
  13. }
  14. }
  15. }
  16. },
  17. )
  18. print(resp)

Ruby

  1. response = client.indices.put_index_template(
  2. name: 'my-data-stream-template',
  3. body: {
  4. index_patterns: [
  5. 'my-data-stream*'
  6. ],
  7. data_stream: {},
  8. priority: 500,
  9. template: {
  10. mappings: {
  11. properties: {
  12. message: {
  13. type: 'text'
  14. }
  15. }
  16. }
  17. }
  18. }
  19. )
  20. puts response

Js

  1. const response = await client.indices.putIndexTemplate({
  2. name: "my-data-stream-template",
  3. index_patterns: ["my-data-stream*"],
  4. data_stream: {},
  5. priority: 500,
  6. template: {
  7. mappings: {
  8. properties: {
  9. message: {
  10. type: "text",
  11. },
  12. },
  13. },
  14. },
  15. });
  16. console.log(response);

Console

  1. PUT /_index_template/my-data-stream-template
  2. {
  3. "index_patterns": [ "my-data-stream*" ],
  4. "data_stream": { },
  5. "priority": 500,
  6. "template": {
  7. "mappings": {
  8. "properties": {
  9. "message": {
  10. "type": "text"
  11. }
  12. }
  13. }
  14. }
  15. }
新しいmessageフィールドのマッピングを追加します。
  • 2. 更新マッピングAPIを使用して、新しいフィールドマッピングをデータストリームに追加します。デフォルトでは、これによりストリームの既存のバックインデックス、書き込みインデックスを含むマッピングが追加されます。
    次の更新マッピングAPIリクエストは、messageフィールドマッピングをmy-data-streamに追加します。

Python

  1. resp = client.indices.put_mapping(
  2. index="my-data-stream",
  3. properties={
  4. "message": {
  5. "type": "text"
  6. }
  7. },
  8. )
  9. print(resp)

Ruby

  1. response = client.indices.put_mapping(
  2. index: 'my-data-stream',
  3. body: {
  4. properties: {
  5. message: {
  6. type: 'text'
  7. }
  8. }
  9. }
  10. )
  11. puts response

Js

  1. const response = await client.indices.putMapping({
  2. index: "my-data-stream",
  3. properties: {
  4. message: {
  5. type: "text",
  6. },
  7. },
  8. });
  9. console.log(response);

Console

  1. PUT /my-data-stream/_mapping
  2. {
  3. "properties": {
  4. "message": {
  5. "type": "text"
  6. }
  7. }
  8. }

ストリームの書き込みインデックスにのみマッピングを追加するには、更新マッピングAPIのwrite_index_onlyクエリパラメータをtrueに設定します。
次の更新マッピングリクエストは、my-data-streamの書き込みインデックスにのみ新しいmessageフィールドマッピングを追加します。新しいフィールドマッピングは、ストリームの他のバックインデックスには追加されません。

Python

  1. resp = client.indices.put_mapping(
  2. index="my-data-stream",
  3. write_index_only=True,
  4. properties={
  5. "message": {
  6. "type": "text"
  7. }
  8. },
  9. )
  10. print(resp)

Ruby

  1. response = client.indices.put_mapping(
  2. index: 'my-data-stream',
  3. write_index_only: true,
  4. body: {
  5. properties: {
  6. message: {
  7. type: 'text'
  8. }
  9. }
  10. }
  11. )
  12. puts response

Js

  1. const response = await client.indices.putMapping({
  2. index: "my-data-stream",
  3. write_index_only: "true",
  4. properties: {
  5. message: {
  6. type: "text",
  7. },
  8. },
  9. });
  10. console.log(response);

Console

  1. PUT /my-data-stream/_mapping?write_index_only=true
  2. {
  3. "properties": {
  4. "message": {
  5. "type": "text"
  6. }
  7. }
  8. }

データストリーム内の既存のフィールドマッピングを変更する

mapping parameterのドキュメントには、update mapping APIを使用して既存のフィールドを更新できるかどうかが示されています。既存のフィールドのこれらのパラメータを更新するには、次の手順に従います:

  • 1. データストリームで使用されるインデックステンプレートを更新します。これにより、更新されたフィールドマッピングがストリームのために作成される将来のバックインデックスに追加されます。
    たとえば、my-data-stream-templatemy-data-streamで使用される既存のインデックステンプレートです。
    次のインデックステンプレートの作成または更新リクエストは、host.ipフィールドのignore_malformedマッピングパラメータの引数をtrueに変更します。

Python

  1. resp = client.indices.put_index_template(
  2. name="my-data-stream-template",
  3. index_patterns=[
  4. "my-data-stream*"
  5. ],
  6. data_stream={},
  7. priority=500,
  8. template={
  9. "mappings": {
  10. "properties": {
  11. "host": {
  12. "properties": {
  13. "ip": {
  14. "type": "ip",
  15. "ignore_malformed": True
  16. }
  17. }
  18. }
  19. }
  20. }
  21. },
  22. )
  23. print(resp)

Ruby

  1. response = client.indices.put_index_template(
  2. name: 'my-data-stream-template',
  3. body: {
  4. index_patterns: [
  5. 'my-data-stream*'
  6. ],
  7. data_stream: {},
  8. priority: 500,
  9. template: {
  10. mappings: {
  11. properties: {
  12. host: {
  13. properties: {
  14. ip: {
  15. type: 'ip',
  16. ignore_malformed: true
  17. }
  18. }
  19. }
  20. }
  21. }
  22. }
  23. }
  24. )
  25. puts response

Js

  1. const response = await client.indices.putIndexTemplate({
  2. name: "my-data-stream-template",
  3. index_patterns: ["my-data-stream*"],
  4. data_stream: {},
  5. priority: 500,
  6. template: {
  7. mappings: {
  8. properties: {
  9. host: {
  10. properties: {
  11. ip: {
  12. type: "ip",
  13. ignore_malformed: true,
  14. },
  15. },
  16. },
  17. },
  18. },
  19. },
  20. });
  21. console.log(response);

Console

  1. PUT /_index_template/my-data-stream-template
  2. {
  3. "index_patterns": [ "my-data-stream*" ],
  4. "data_stream": { },
  5. "priority": 500,
  6. "template": {
  7. "mappings": {
  8. "properties": {
  9. "host": {
  10. "properties": {
  11. "ip": {
  12. "type": "ip",
  13. "ignore_malformed": true
  14. }
  15. }
  16. }
  17. }
  18. }
  19. }
  20. }
host.ipフィールドのignore_malformed値をtrueに変更します。
  • 2. update mapping APIを使用して、データストリームにマッピングの変更を適用します。デフォルトでは、これによりストリームの既存のバックインデックス、書き込みインデックスを含む変更が適用されます。
    次のupdate mapping APIリクエストはmy-data-streamをターゲットにします。このリクエストは、host.ipフィールドのignore_malformedマッピングパラメータの引数をtrueに変更します。

Python

  1. resp = client.indices.put_mapping(
  2. index="my-data-stream",
  3. properties={
  4. "host": {
  5. "properties": {
  6. "ip": {
  7. "type": "ip",
  8. "ignore_malformed": True
  9. }
  10. }
  11. }
  12. },
  13. )
  14. print(resp)

Ruby

  1. response = client.indices.put_mapping(
  2. index: 'my-data-stream',
  3. body: {
  4. properties: {
  5. host: {
  6. properties: {
  7. ip: {
  8. type: 'ip',
  9. ignore_malformed: true
  10. }
  11. }
  12. }
  13. }
  14. }
  15. )
  16. puts response

Js

  1. const response = await client.indices.putMapping({
  2. index: "my-data-stream",
  3. properties: {
  4. host: {
  5. properties: {
  6. ip: {
  7. type: "ip",
  8. ignore_malformed: true,
  9. },
  10. },
  11. },
  12. },
  13. });
  14. console.log(response);

Console

  1. PUT /my-data-stream/_mapping
  2. {
  3. "properties": {
  4. "host": {
  5. "properties": {
  6. "ip": {
  7. "type": "ip",
  8. "ignore_malformed": true
  9. }
  10. }
  11. }
  12. }
  13. }

ストリームの書き込みインデックスにのみマッピングの変更を適用するには、put mapping APIのwrite_index_onlyクエリパラメータをtrueに設定します。
次の更新マッピングリクエストは、my-data-streamの書き込みインデックスに対してのみhost.ipフィールドのマッピングを変更します。この変更は、ストリームの他のバックインデックスには適用されません。

Python

  1. resp = client.indices.put_mapping(
  2. index="my-data-stream",
  3. write_index_only=True,
  4. properties={
  5. "host": {
  6. "properties": {
  7. "ip": {
  8. "type": "ip",
  9. "ignore_malformed": True
  10. }
  11. }
  12. }
  13. },
  14. )
  15. print(resp)

Ruby

  1. response = client.indices.put_mapping(
  2. index: 'my-data-stream',
  3. write_index_only: true,
  4. body: {
  5. properties: {
  6. host: {
  7. properties: {
  8. ip: {
  9. type: 'ip',
  10. ignore_malformed: true
  11. }
  12. }
  13. }
  14. }
  15. }
  16. )
  17. puts response

Js

  1. const response = await client.indices.putMapping({
  2. index: "my-data-stream",
  3. write_index_only: "true",
  4. properties: {
  5. host: {
  6. properties: {
  7. ip: {
  8. type: "ip",
  9. ignore_malformed: true,
  10. },
  11. },
  12. },
  13. },
  14. });
  15. console.log(response);

Console

  1. PUT /my-data-stream/_mapping?write_index_only=true
  2. {
  3. "properties": {
  4. "host": {
  5. "properties": {
  6. "ip": {
  7. "type": "ip",
  8. "ignore_malformed": true
  9. }
  10. }
  11. }
  12. }
  13. }

サポートされているマッピングパラメータを除いて、既存のフィールドのマッピングやフィールドデータ型を変更することはお勧めしません。データストリームの一致するインデックステンプレートやそのバックインデックス内であっても、既存のフィールドのマッピングを変更すると、すでにインデックスされたデータが無効になる可能性があります。

既存のフィールドのマッピングを変更する必要がある場合は、新しいデータストリームを作成し、その中にデータを再インデックスする必要があります。再インデックスを使用してマッピングや設定を変更するを参照してください。

データストリームの動的インデックス設定を変更する

動的インデックス設定をデータストリームに対して変更するには、次の手順に従います:

  • 1. データストリームで使用されるインデックステンプレートを更新します。これにより、設定がストリームのために作成される将来のバックインデックスに適用されます。
    たとえば、my-data-stream-templatemy-data-streamで使用される既存のインデックステンプレートです。
    次のインデックステンプレートの作成または更新リクエストは、テンプレートのindex.refresh_intervalインデックス設定を30s(30秒)に変更します。

Python

  1. resp = client.indices.put_index_template(
  2. name="my-data-stream-template",
  3. index_patterns=[
  4. "my-data-stream*"
  5. ],
  6. data_stream={},
  7. priority=500,
  8. template={
  9. "settings": {
  10. "index.refresh_interval": "30s"
  11. }
  12. },
  13. )
  14. print(resp)

Ruby

  1. response = client.indices.put_index_template(
  2. name: 'my-data-stream-template',
  3. body: {
  4. index_patterns: [
  5. 'my-data-stream*'
  6. ],
  7. data_stream: {},
  8. priority: 500,
  9. template: {
  10. settings: {
  11. 'index.refresh_interval' => '30s'
  12. }
  13. }
  14. }
  15. )
  16. puts response

Js

  1. const response = await client.indices.putIndexTemplate({
  2. name: "my-data-stream-template",
  3. index_patterns: ["my-data-stream*"],
  4. data_stream: {},
  5. priority: 500,
  6. template: {
  7. settings: {
  8. "index.refresh_interval": "30s",
  9. },
  10. },
  11. });
  12. console.log(response);

Console

  1. PUT /_index_template/my-data-stream-template
  2. {
  3. "index_patterns": [ "my-data-stream*" ],
  4. "data_stream": { },
  5. "priority": 500,
  6. "template": {
  7. "settings": {
  8. "index.refresh_interval": "30s"
  9. }
  10. }
  11. }
index.refresh_interval設定を30s(30秒)に変更します。
  • 2. update index settings APIを使用して、データストリームのインデックス設定を更新します。デフォルトでは、これによりストリームの既存のバックインデックス、書き込みインデックスを含む設定が適用されます。
    次の更新インデックス設定APIリクエストは、index.refresh_interval設定をmy-data-streamに更新します。

Python

  1. resp = client.indices.put_settings(
  2. index="my-data-stream",
  3. settings={
  4. "index": {
  5. "refresh_interval": "30s"
  6. }
  7. },
  8. )
  9. print(resp)

Ruby

  1. response = client.indices.put_settings(
  2. index: 'my-data-stream',
  3. body: {
  4. index: {
  5. refresh_interval: '30s'
  6. }
  7. }
  8. )
  9. puts response

Js

  1. const response = await client.indices.putSettings({
  2. index: "my-data-stream",
  3. settings: {
  4. index: {
  5. refresh_interval: "30s",
  6. },
  7. },
  8. });
  9. console.log(response);

Console

  1. PUT /my-data-stream/_settings
  2. {
  3. "index": {
  4. "refresh_interval": "30s"
  5. }
  6. }

index.lifecycle.name設定を変更するには、まずremove policy APIを使用して、既存のILMポリシーを削除します。ライフサイクルポリシーの切り替えを参照してください。

データストリームの静的インデックス設定を変更する

静的インデックス設定は、バックインデックスが作成されるときにのみ設定できます。update index settings APIを使用して静的インデックス設定を更新することはできません。

将来のバックインデックスに新しい静的設定を適用するには、データストリームで使用されるインデックステンプレートを更新します。設定は、更新後に作成されるすべてのバックインデックスに自動的に適用されます。

たとえば、my-data-stream-templatemy-data-streamで使用される既存のインデックステンプレートです。

次のインデックステンプレートの作成または更新APIリクエストは、テンプレートに新しいsort.fieldおよびsort.order index設定を追加します。

Python

  1. resp = client.indices.put_index_template(
  2. name="my-data-stream-template",
  3. index_patterns=[
  4. "my-data-stream*"
  5. ],
  6. data_stream={},
  7. priority=500,
  8. template={
  9. "settings": {
  10. "sort.field": [
  11. "@timestamp"
  12. ],
  13. "sort.order": [
  14. "desc"
  15. ]
  16. }
  17. },
  18. )
  19. print(resp)

Ruby

  1. response = client.indices.put_index_template(
  2. name: 'my-data-stream-template',
  3. body: {
  4. index_patterns: [
  5. 'my-data-stream*'
  6. ],
  7. data_stream: {},
  8. priority: 500,
  9. template: {
  10. settings: {
  11. 'sort.field' => [
  12. '@timestamp'
  13. ],
  14. 'sort.order' => [
  15. 'desc'
  16. ]
  17. }
  18. }
  19. }
  20. )
  21. puts response

Js

  1. const response = await client.indices.putIndexTemplate({
  2. name: "my-data-stream-template",
  3. index_patterns: ["my-data-stream*"],
  4. data_stream: {},
  5. priority: 500,
  6. template: {
  7. settings: {
  8. "sort.field": ["@timestamp"],
  9. "sort.order": ["desc"],
  10. },
  11. },
  12. });
  13. console.log(response);

Console

  1. PUT /_index_template/my-data-stream-template
  2. {
  3. "index_patterns": [ "my-data-stream*" ],
  4. "data_stream": { },
  5. "priority": 500,
  6. "template": {
  7. "settings": {
  8. "sort.field": [ "@timestamp"],
  9. "sort.order": [ "desc"]
  10. }
  11. }
  12. }
sort.fieldインデックス設定を追加します。
sort.orderインデックス設定を追加します。

必要に応じて、データストリームをロールオーバーすることで、設定をデータストリームの書き込みインデックスに即座に適用できます。これにより、ロールオーバー後にストリームに追加される新しいデータに影響します。ただし、データストリームの既存のバックインデックスや既存のデータには影響しません。

既存のバックインデックスに静的設定の変更を適用するには、新しいデータストリームを作成し、その中にデータを再インデックスする必要があります。再インデックスを使用してマッピングや設定を変更するを参照してください。

再インデックスを使用してマッピングや設定を変更する

再インデックスを使用して、データストリームのマッピングや設定を変更できます。これは、既存のフィールドのデータ型を変更したり、バックインデックスの静的インデックス設定を更新したりするためにしばしば必要です。

データストリームを再インデックスするには、まず、希望するマッピングや設定の変更を含むインデックステンプレートを作成または更新します。その後、既存のデータストリームを新しいストリームに再インデックスします。この新しいデータストリームに追加される各ドキュメントとバックインデックスに、テンプレートのマッピングと設定の変更が適用されます。これらの変更は、新しいストリームによって作成される将来のバックインデックスにも影響します。

次の手順に従います:

  • 1. 新しいデータストリームの名前またはインデックスパターンを選択します。この新しいデータストリームには、既存のストリームからのデータが含まれます。
    resolve index APIを使用して、名前またはパターンが既存のインデックス、エイリアス、またはデータストリームと一致するかどうかを確認できます。一致する場合は、別の名前またはパターンを使用することを検討してください。
    次のresolve index APIリクエストは、new-data-streamで始まる既存のインデックス、エイリアス、またはデータストリームがあるかどうかを確認します。一致しない場合、new-data-stream*インデックスパターンを使用して新しいデータストリームを作成できます。

Python

  1. resp = client.indices.resolve_index(
  2. name="new-data-stream*",
  3. )
  4. print(resp)

Ruby

  1. response = client.indices.resolve_index(
  2. name: 'new-data-stream*'
  3. )
  4. puts response

Js

  1. const response = await client.indices.resolveIndex({
  2. name: "new-data-stream*",
  3. });
  4. console.log(response);

Console

  1. GET /_resolve/index/new-data-stream*

APIは、次の応答を返し、このパターンに一致する既存のターゲットがないことを示します。

Console-Result

  1. {
  2. "indices": [ ],
  3. "aliases": [ ],
  4. "data_streams": [ ]
  5. }
  • 2. インデックステンプレートを作成または更新します。このテンプレートには、新しいデータストリームのバックインデックスに適用したいマッピングと設定が含まれている必要があります。
    このインデックステンプレートは、データストリームテンプレートの要件を満たす必要があります。また、index_patternsプロパティに以前に選択した名前またはインデックスパターンが含まれている必要があります。
    いくつかの項目を追加または変更するだけの場合は、既存のテンプレートをコピーして必要に応じて修正することで新しいテンプレートを作成することをお勧めします。
    たとえば、my-data-stream-templatemy-data-streamで使用される既存のインデックステンプレートです。
    次のインデックステンプレートの作成または更新APIリクエストは、新しいインデックステンプレートnew-data-stream-templateを作成します。new-data-stream-templatemy-data-stream-templateを基にしており、次の変更が加えられています:
    • index_patternsのインデックスパターンは、new-data-streamで始まる任意のインデックスまたはデータストリームに一致します。
    • @timestampフィールドマッピングは、date_nanosフィールドデータ型ではなくdateデータ型を使用します。
    • テンプレートには、元のmy-data-stream-templateテンプレートには含まれていなかったsort.fieldおよびsort.orderインデックス設定が含まれています。

Python

  1. resp = client.indices.put_index_template(
  2. name="new-data-stream-template",
  3. index_patterns=[
  4. "new-data-stream*"
  5. ],
  6. data_stream={},
  7. priority=500,
  8. template={
  9. "mappings": {
  10. "properties": {
  11. "@timestamp": {
  12. "type": "date_nanos"
  13. }
  14. }
  15. },
  16. "settings": {
  17. "sort.field": [
  18. "@timestamp"
  19. ],
  20. "sort.order": [
  21. "desc"
  22. ]
  23. }
  24. },
  25. )
  26. print(resp)

Ruby

  1. response = client.indices.put_index_template(
  2. name: 'new-data-stream-template',
  3. body: {
  4. index_patterns: [
  5. 'new-data-stream*'
  6. ],
  7. data_stream: {},
  8. priority: 500,
  9. template: {
  10. mappings: {
  11. properties: {
  12. "@timestamp": {
  13. type: 'date_nanos'
  14. }
  15. }
  16. },
  17. settings: {
  18. 'sort.field' => [
  19. '@timestamp'
  20. ],
  21. 'sort.order' => [
  22. 'desc'
  23. ]
  24. }
  25. }
  26. }
  27. )
  28. puts response

Js

  1. const response = await client.indices.putIndexTemplate({
  2. name: "new-data-stream-template",
  3. index_patterns: ["new-data-stream*"],
  4. data_stream: {},
  5. priority: 500,
  6. template: {
  7. mappings: {
  8. properties: {
  9. "@timestamp": {
  10. type: "date_nanos",
  11. },
  12. },
  13. },
  14. settings: {
  15. "sort.field": ["@timestamp"],
  16. "sort.order": ["desc"],
  17. },
  18. },
  19. });
  20. console.log(response);

Console

  1. PUT /_index_template/new-data-stream-template
  2. {
  3. "index_patterns": [ "new-data-stream*" ],
  4. "data_stream": { },
  5. "priority": 500,
  6. "template": {
  7. "mappings": {
  8. "properties": {
  9. "@timestamp": {
  10. "type": "date_nanos"
  11. }
  12. }
  13. },
  14. "settings": {
  15. "sort.field": [ "@timestamp"],
  16. "sort.order": [ "desc"]
  17. }
  18. }
  19. }
@timestampフィールドマッピングをdate_nanosフィールドデータ型に変更します。
sort.fieldインデックス設定を追加します。
sort.orderインデックス設定を追加します。
  • 3. create data stream APIを使用して、新しいデータストリームを手動で作成します。データストリームの名前は、新しいテンプレートのindex_patternsプロパティで定義されたインデックスパターンと一致する必要があります。
    このデータストリームを作成するために新しいデータをインデックスすることはお勧めしません[beb5bf4d08d7f40c.md#create-data-stream]。後で、既存のデータストリームから古いデータをこの新しいストリームに再インデックスします。これにより、新旧のデータが混在する1つ以上のバックインデックスが作成される可能性があります。
    データストリーム内の新旧データの混合
    新旧データの混合は安全ですが、データ保持に干渉する可能性があります。古いインデックスを削除すると、新旧データが混在するバックインデックスを誤って削除する可能性があります。早期のデータ損失を防ぐために、そのようなバックインデックスを保持する必要があります。新しいデータを削除する準備ができるまで保持してください。
    次のcreate data stream APIリクエストは、new-data-streamをターゲットにし、new-data-stream-templateのインデックスパターンに一致します。この名前を使用する既存のインデックスやデータストリームがないため、このリクエストはnew-data-streamデータストリームを作成します。

Python

  1. resp = client.indices.create_data_stream(
  2. name="new-data-stream",
  3. )
  4. print(resp)

Ruby

  1. response = client.indices.create_data_stream(
  2. name: 'new-data-stream'
  3. )
  4. puts response

Js

  1. const response = await client.indices.createDataStream({
  2. name: "new-data-stream",
  3. });
  4. console.log(response);

Console

  1. PUT /_data_stream/new-data-stream
  • 4. 新しいデータストリームで新旧データを混合したくない場合は、新しいドキュメントのインデックスを一時停止します。新旧データの混合は安全ですが、データ保持に干渉する可能性があります。データストリーム内の新旧データの混合を参照してください。
  • 5. ILMを使用してロールオーバーを自動化する場合は、ILMポーリング間隔を短縮します。これにより、ロールオーバーチェックを待っている間に現在の書き込みインデックスが大きくなりすぎないようにします。デフォルトでは、ILMは10分ごとにロールオーバー条件を確認します。
    次のcluster update settings APIリクエストは、indices.lifecycle.poll_interval設定を1m(1分)に下げます。

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "indices.lifecycle.poll_interval": "1m"
  4. },
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'indices.lifecycle.poll_interval' => '1m'
  5. }
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "indices.lifecycle.poll_interval": "1m",
  4. },
  5. });
  6. console.log(response);

Console

  1. PUT /_cluster/settings
  2. {
  3. "persistent": {
  4. "indices.lifecycle.poll_interval": "1m"
  5. }
  6. }
  • 6. 新しいデータストリームにop_typecreateを使用してデータを再インデックスします。
    元のインデックスされた順序でデータを分割したい場合は、個別の再インデックスリクエストを実行できます。これらの再インデックスリクエストは、個別のバックインデックスをソースとして使用できます。get data stream APIを使用して、バックインデックスのリストを取得できます。
    たとえば、my-data-streamからnew-data-streamにデータを再インデックスする予定ですが、my-data-streamの各バックインデックスに対して個別の再インデックスリクエストを送信したいと考えています。最も古いバックインデックスから始めます。これにより、元のインデックス順序が保持されます。
    次のget data stream APIリクエストは、my-data-streamに関する情報を取得し、そのバックインデックスのリストを含みます。

Python

  1. resp = client.indices.get_data_stream(
  2. name="my-data-stream",
  3. )
  4. print(resp)

Ruby

  1. response = client.indices.get_data_stream(
  2. name: 'my-data-stream'
  3. )
  4. puts response

Js

  1. const response = await client.indices.getDataStream({
  2. name: "my-data-stream",
  3. });
  4. console.log(response);

Console

  1. GET /_data_stream/my-data-stream

応答のindicesプロパティには、ストリームの現在のバックインデックスの配列が含まれています。配列の最初の項目には、ストリームの最も古いバックインデックスに関する情報が含まれています。

Console-Result

  1. {
  2. "data_streams": [
  3. {
  4. "name": "my-data-stream",
  5. "timestamp_field": {
  6. "name": "@timestamp"
  7. },
  8. "indices": [
  9. {
  10. "index_name": ".ds-my-data-stream-2099.03.07-000001",
  11. "index_uuid": "Gpdiyq8sRuK9WuthvAdFbw",
  12. "prefer_ilm": true,
  13. "managed_by": "Unmanaged"
  14. },
  15. {
  16. "index_name": ".ds-my-data-stream-2099.03.08-000002",
  17. "index_uuid": "_eEfRrFHS9OyhqWntkgHAQ",
  18. "prefer_ilm": true,
  19. "managed_by": "Unmanaged"
  20. }
  21. ],
  22. "generation": 2,
  23. "status": "GREEN",
  24. "next_generation_managed_by": "Unmanaged",
  25. "prefer_ilm": true,
  26. "template": "my-data-stream-template",
  27. "hidden": false,
  28. "system": false,
  29. "allow_custom_routing": false,
  30. "replicated": false,
  31. "rollover_on_write": false
  32. }
  33. ]
  34. }
my-data-streamindices配列の最初の項目。この項目には、ストリームの最も古いバックインデックス、.ds-my-data-stream-2099.03.07-000001に関する情報が含まれています。

次のreindex APIリクエストは、.ds-my-data-stream-2099.03.07-000001からnew-data-streamにドキュメントをコピーします。このリクエストのop_typecreateです。

Python

  1. resp = client.reindex(
  2. source={
  3. "index": ".ds-my-data-stream-2099.03.07-000001"
  4. },
  5. dest={
  6. "index": "new-data-stream",
  7. "op_type": "create"
  8. },
  9. )
  10. print(resp)

Ruby

  1. response = client.reindex(
  2. body: {
  3. source: {
  4. index: '.ds-my-data-stream-2099.03.07-000001'
  5. },
  6. dest: {
  7. index: 'new-data-stream',
  8. op_type: 'create'
  9. }
  10. }
  11. )
  12. puts response

Js

  1. const response = await client.reindex({
  2. source: {
  3. index: ".ds-my-data-stream-2099.03.07-000001",
  4. },
  5. dest: {
  6. index: "new-data-stream",
  7. op_type: "create",
  8. },
  9. });
  10. console.log(response);

Console

  1. POST /_reindex
  2. {
  3. "source": {
  4. "index": ".ds-my-data-stream-2099.03.07-000001"
  5. },
  6. "dest": {
  7. "index": "new-data-stream",
  8. "op_type": "create"
  9. }
  10. }

クエリを使用して、各リクエストでドキュメントのサブセットのみを再インデックスすることもできます。
次のreindex APIリクエストは、my-data-streamからnew-data-streamにドキュメントをコピーします。このリクエストは、rangeクエリを使用して、過去1週間以内のタイムスタンプを持つドキュメントのみを再インデックスします。リクエストのop_typecreateです。

Python

  1. resp = client.reindex(
  2. source={
  3. "index": "my-data-stream",
  4. "query": {
  5. "range": {
  6. "@timestamp": {
  7. "gte": "now-7d/d",
  8. "lte": "now/d"
  9. }
  10. }
  11. }
  12. },
  13. dest={
  14. "index": "new-data-stream",
  15. "op_type": "create"
  16. },
  17. )
  18. print(resp)

Ruby

  1. response = client.reindex(
  2. body: {
  3. source: {
  4. index: 'my-data-stream',
  5. query: {
  6. range: {
  7. "@timestamp": {
  8. gte: 'now-7d/d',
  9. lte: 'now/d'
  10. }
  11. }
  12. }
  13. },
  14. dest: {
  15. index: 'new-data-stream',
  16. op_type: 'create'
  17. }
  18. }
  19. )
  20. puts response

Js

  1. const response = await client.reindex({
  2. source: {
  3. index: "my-data-stream",
  4. query: {
  5. range: {
  6. "@timestamp": {
  7. gte: "now-7d/d",
  8. lte: "now/d",
  9. },
  10. },
  11. },
  12. },
  13. dest: {
  14. index: "new-data-stream",
  15. op_type: "create",
  16. },
  17. });
  18. console.log(response);

Console

  1. POST /_reindex
  2. {
  3. "source": {
  4. "index": "my-data-stream",
  5. "query": {
  6. "range": {
  7. "@timestamp": {
  8. "gte": "now-7d/d",
  9. "lte": "now/d"
  10. }
  11. }
  12. }
  13. },
  14. "dest": {
  15. "index": "new-data-stream",
  16. "op_type": "create"
  17. }
  18. }
  • 7. 以前にILMポーリング間隔を変更した場合は、再インデックスが完了したら元の値に戻します。これにより、マスターノードへの不必要な負荷を防ぎます。
    次のクラスタ更新設定APIリクエストは、indices.lifecycle.poll_interval設定をデフォルト値にリセットします。

Python

  1. resp = client.cluster.put_settings(
  2. persistent={
  3. "indices.lifecycle.poll_interval": None
  4. },
  5. )
  6. print(resp)

Ruby

  1. response = client.cluster.put_settings(
  2. body: {
  3. persistent: {
  4. 'indices.lifecycle.poll_interval' => nil
  5. }
  6. }
  7. )
  8. puts response

Js

  1. const response = await client.cluster.putSettings({
  2. persistent: {
  3. "indices.lifecycle.poll_interval": null,
  4. },
  5. });
  6. console.log(response);

Console

  1. PUT /_cluster/settings
  2. {
  3. "persistent": {
  4. "indices.lifecycle.poll_interval": null
  5. }
  6. }
  • 8. 新しいデータストリームを使用してインデックスを再開します。このストリームの検索は、現在のデータと再インデックスされたデータをクエリします。
  • 9. すべての再インデックスされたデータが新しいデータストリームで利用可能であることを確認したら、古いストリームを安全に削除できます。
    次のdelete data stream APIリクエストは、my-data-streamを削除します。このリクエストは、ストリームのバックインデックスとそれに含まれるデータも削除します。

Python

  1. resp = client.indices.delete_data_stream(
  2. name="my-data-stream",
  3. )
  4. print(resp)

Ruby

  1. response = client.indices.delete_data_stream(
  2. name: 'my-data-stream'
  3. )
  4. puts response

Js

  1. const response = await client.indices.deleteDataStream({
  2. name: "my-data-stream",
  3. });
  4. console.log(response);

Console

  1. DELETE /_data_stream/my-data-stream

データストリームにエイリアスを更新または追加する

aliases APIを使用して、既存のデータストリームのエイリアスを更新します。既存のデータストリームのエイリアスをインデックスパターンで変更しても効果はありません。

たとえば、logsエイリアスは単一のデータストリームを指します。次のリクエストは、エイリアスのストリームを入れ替えます。この入れ替え中、logsエイリアスはダウンタイムなしで、同時に両方のストリームを指すことはありません。

Python

  1. resp = client.indices.update_aliases(
  2. actions=[
  3. {
  4. "remove": {
  5. "index": "logs-nginx.access-prod",
  6. "alias": "logs"
  7. }
  8. },
  9. {
  10. "add": {
  11. "index": "logs-my_app-default",
  12. "alias": "logs"
  13. }
  14. }
  15. ],
  16. )
  17. print(resp)

Ruby

  1. response = client.indices.update_aliases(
  2. body: {
  3. actions: [
  4. {
  5. remove: {
  6. index: 'logs-nginx.access-prod',
  7. alias: 'logs'
  8. }
  9. },
  10. {
  11. add: {
  12. index: 'logs-my_app-default',
  13. alias: 'logs'
  14. }
  15. }
  16. ]
  17. }
  18. )
  19. puts response

Js

  1. const response = await client.indices.updateAliases({
  2. actions: [
  3. {
  4. remove: {
  5. index: "logs-nginx.access-prod",
  6. alias: "logs",
  7. },
  8. },
  9. {
  10. add: {
  11. index: "logs-my_app-default",
  12. alias: "logs",
  13. },
  14. },
  15. ],
  16. });
  17. console.log(response);

Console

  1. POST _aliases
  2. {
  3. "actions": [
  4. {
  5. "remove": {
  6. "index": "logs-nginx.access-prod",
  7. "alias": "logs"
  8. }
  9. },
  10. {
  11. "add": {
  12. "index": "logs-my_app-default",
  13. "alias": "logs"
  14. }
  15. }
  16. ]
  17. }