すべてのプロダクト
Search
ドキュメントセンター

Elasticsearch:Heartbeat インデックスを管理するための ILM の使用

最終更新日:Mar 19, 2025

時系列データは時間の経過とともに増加します。インデックス ライフサイクル管理(ILM)機能を使用して、データを新しいインデックスに定期的にロールオーバーできます。これにより、高いクエリ効率が確保され、クエリ コストが削減されます。インデックスが古くなり、必要なクエリが少なくなると、インデックスを安価なディスクに移行し、プライマリ シャードとレプリカ シャードの数を減らすことができます。このトピックでは、ILM を使用して Heartbeat インデックスを管理する方法について説明します。

背景情報

このトピックでは、次のテスト シナリオを使用します。

heartbeat- で始まる名前を持つ多数の時系列インデックスが Elasticsearch クラスタに存在し、各インデックスのサイズは約 4 MB です。シャードの数はデータ量とともに増加します。これは、クラスタの過負荷を引き起こす可能性があります。この場合、hot、warm、cold、および delete の 4 つのフェーズのインデックスに対して異なるロールオーバー ポリシーを構成する必要があります。hot フェーズでは、heartbeat- で始まる名前を持つ履歴監視インデックスのデータが新しいインデックスにロールオーバーされます。warm フェーズでは、インデックスが縮小され、各インデックスのセグメントがマージされます。cold フェーズでは、データが hot ノードから warm ノードに移行されます。warm ノードはコールド データを処理するために使用されます。delete フェーズでは、データは定期的に削除されます。

注意事項

  • ILM ポリシーは、インデックス テンプレートとエイリアスがインデックスに対して構成された後にのみ、インデックスにアタッチできます。

  • ロールオーバー中に ILM ポリシーを変更した場合、新しいポリシーは次のロールオーバーから有効になります。

手順

  1. 手順 1:hot-warm アーキテクチャを使用する Elasticsearch クラスタを作成する

    hot-warm アーキテクチャを使用する Elasticsearch クラスタを作成し、クラスタの自動インデックス作成機能を有効にし、クラスタのパブリック IP アドレス ホワイトリストを構成します。

  2. 手順 2:heartbeat.yml ファイルで ILM 機能を有効化および構成する

    heartbeat.yml ファイルで、クラスタの ILM 機能を有効化および構成します。構成が完了すると、システムはクラスタの Heartbeat インデックス テンプレートを生成します。

  3. 手順 3:ILM ポリシーを作成する

    ILM ポリシー作成 API を呼び出して、ILM ポリシーを作成します。このポリシーは、データをロールオーバーし、インデックスをアーカイブするための条件を定義します。

  4. 手順 4:ILM ポリシーをインデックス テンプレートにアタッチする

    ILM ポリシーを Heartbeat インデックス テンプレートにアタッチします。

  5. 手順 5:ILM ポリシーをインデックスにアタッチする

    Heartbeat インデックス テンプレートを使用して作成された最初のインデックスに ILM ポリシーをアタッチします。このようにして、ポリシーはこのテンプレートを使用して作成されたすべてのインデックスに適用できます。

  6. 手順 6:さまざまなフェーズのインデックスを表示する

    hot、warm、cold、および delete フェーズでアーカイブされているインデックスを表示します。

手順 1:hot-warm アーキテクチャを使用する Elasticsearch クラスタを作成する

  1. hot-warm アーキテクチャを使用する Elasticsearch クラスタを作成し、クラスタ内のノードの hot または warm 属性を表示します。

    hot-warm アーキテクチャを使用する Elasticsearch クラスタには、hot ノードと warm ノードの両方が含まれています。このアーキテクチャは、Elasticsearch クラスタのパフォーマンスと安定性を向上させます。次の表に、hot ノードと warm ノードの違いを示します。

    ノード タイプ

    保存されるデータのタイプ

    読み取りおよび書き込みパフォーマンス

    仕様

    ディスク

    Hot ノード

    過去 2 日間などの最近のデータ。

    32 vCPU、64 GiB メモリなど、高

    標準 SSD を使用することをお勧めします。データ量に基づいてストレージ容量を指定できます。

    Warm ノード

    過去 2 日間より前のログ データなどの履歴データ。

    8 vCPU、32 GiB メモリなど、低

    Ultra ディスクを使用することをお勧めします。データ量に基づいてストレージ容量を指定できます。

    1. Elasticsearch クラスタを購入する際に、warm ノードを購入して hot-warm アーキテクチャを使用する Elasticsearch クラスタを作成します。

      warm ノードを含むクラスタを作成すると、システムは -Enode.attr.box_type パラメータをノードの起動パラメータに追加します。

      • Hot ノード:-Enode.attr.box_type=hot

      • Warm ノード:-Enode.attr.box_type=warm

      説明
      • データ ノードは、warm ノードを購入した後にのみ hot ノードになります。

      • この例では、Alibaba Cloud Elasticsearch V6.7.0 クラスタを使用しています。この例で説明されているすべての操作と図は、このバージョンのクラスタにのみ適しています。別のバージョンのクラスタを使用する場合は、Elasticsearch コンソールで必要な操作が優先されます。

    2. クラスタの Kibana コンソールにログオンします。

      詳細については、「Kibana コンソールへのログオン」をご参照ください。

    3. 表示されるページの左側のナビゲーション ウィンドウで、[dev Tools] をクリックします。

    4. 表示されるページの [console] タブで、次のコマンドを実行して、クラスタ内のノードの hot または warm 属性を表示します。

      GET _cat/nodeattrs?v&h=host,attr,value

      コマンドが正常に実行されると、次の図に示す結果が返されます。この図は、Elasticsearch クラスタに hot-warm アーキテクチャをサポートする 3 つの hot ノードと 2 つの warm ノードが含まれていることを示しています。冷热架构集群

  2. Elasticsearch クラスタの自動インデックス作成機能を有効にします。

    詳細については、「YML ファイルの構成」をご参照ください。

  3. Elasticsearch クラスタのパブリック IP アドレス ホワイトリストを構成し、Heartbeat がインストールされているサーバーの IP アドレスをホワイトリストに追加します。

手順 2:heartbeat.yml ファイルで ILM 機能を有効化および構成する

Elasticsearch の ILM 機能を使用して Heartbeat インデックスを管理するには、heartbeat.yml ファイルで機能を構成します。詳細については、「インデックス ライフサイクル管理の設定」をご参照ください。

  1. Heartbeat インストール パッケージをダウンロードして解凍します。

  2. heartbeat.yml ファイルで、heartbeat.monitorssetup.template.settingssetup.kibana、および output.elasticsearch の構成を指定します。

    この例では、次の構成を使用します。

    heartbeat.monitors:
    - type: icmp
      schedule: '*/5 * * * * * *'
      hosts: ["47.111.xx.xx"]
    
    setup.template.settings:
      index.number_of_shards: 3
      index.codec: best_compression
      index.routing.allocation.require.box_type: "hot"
    
    setup.kibana:
    
      # Kibana ホスト
      # スキームとポートは省略でき、デフォルト(http と 5601)に設定されます。
      # 追加のパスを指定する場合は、スキームが必要です:http://localhost:5601/path
      # IPv6 アドレスは常に次のように定義する必要があります:https://[2001:db8::1]:5601
      host: "https://es-cn-4591jumei00xxxxxx.kibana.elasticsearch.aliyuncs.com:5601"
    
    output.elasticsearch:
      # 接続するホストの配列。
      hosts: ["es-cn-4591jumei00xxxxxx.elasticsearch.aliyuncs.com:9200"]
      ilm.enabled: true
      setup.template.overwrite: true
      ilm.rollover_alias: "heartbeat"
      ilm.pattern: "{now/d}-000001"
    
      # 日次インデックスの代わりにインデックス ライフサイクル管理を使用するために、ilm(ベータ版)を有効にしました。
      #ilm.enabled: false
    
      # オプションのプロトコルと基本認証資格情報。
      #protocol: "https"
      username: "elastic"
      password: "<your_password>"

    次の表は、上記の構成の一部のパラメータについて説明しています。その他のパラメータの詳細については、「オープン ソースの Heartbeat 構成ドキュメント」をご参照ください。

    パラメータ

    説明

    index.number_of_shards

    プライマリ シャードの数。デフォルト値:1。

    index.routing.allocation.require.box_type

    データを hot ノードに書き込むかどうかを指定します。

    host

    Kibana サービスにアクセスするために使用されるパブリック IP アドレス。IP アドレスは、Kibana 構成ページで取得できます。

    hosts

    Elasticsearch クラスタにアクセスするために使用される内部またはパブリック エンドポイント。エンドポイントは、クラスタの基本情報ページで取得できます。詳細については、「クラスタの基本情報の表示」をご参照ください。

    説明

    hosts パラメータをクラスタのパブリック エンドポイントに設定する場合は、クラスタのパブリック IP アドレス ホワイトリストを構成する必要があります。詳細については、「Elasticsearch クラスタのパブリックまたはプライベート IP アドレス ホワイトリストの構成」をご参照ください。hosts パラメータをクラスタの内部エンドポイントに設定する場合は、クラスタが Heartbeat がインストールされているサーバーと同じ VPC(Virtual Private Cloud)内にあることを確認する必要があります。

    ilm.enabled

    ILM 機能を有効にするかどうかを指定します。このパラメータを true に設定すると、機能が有効になります。

    setup.template.overwrite

    元のインデックス テンプレートを上書きするかどうかを指定します。特定のバージョンのインデックス テンプレートを Elasticsearch にロードした場合は、このパラメータを true に設定して、元のインデックス テンプレートをロードされたテンプレートで上書きする必要があります。

    ilm.rollover_alias

    ロールオーバー中に生成されるインデックスのエイリアスを指定します。デフォルト値:heartbeat-\{beat.version\}

    ilm.pattern

    ロールオーバー中に生成されるインデックス パターン。日付演算がサポートされています。デフォルト値:{now/d}-000001。ロールオーバー条件が満たされると、システムはインデックス名の最後の桁を 1 つ増分して新しいインデックス名を生成します。

    たとえば、最初のロールオーバー後に生成されたインデックスの名前は heartbeat-2020.04.29-000001 です。別のロールオーバー条件が満たされると、Elasticsearch は heartbeat-2020.04.29-000002 という名前のインデックスを作成します。

    username

    デフォルトのユーザー名は elastic です。

    password

    パスワードは、クラスタの作成時に指定されます。パスワードを忘れた場合は、リセットできます。パスワードのリセット手順と注意事項については、「Elasticsearch クラスタのアクセス パスワードのリセット」をご参照ください。

    重要

    インデックス テンプレートのロード後に ilm.rollover_alias または ilm.pattern の設定を変更する場合は、setup.template.overwrite を true に設定して、元のインデックス テンプレートをロードされたインデックス テンプレートで上書きする必要があります。

  3. Heartbeat サービスを開始します。

    sudo ./heartbeat -e

手順 3:ILM ポリシーを作成する

Elasticsearch では、API または Kibana コンソールを使用して ILM ポリシーを作成できます。この例では、ILM ポリシー作成 API を使用して ILM ポリシーを作成します。

説明

Heartbeat では、./heartbeat setup --ilm-policy コマンドを実行してデフォルト ポリシーをロードし、Elasticsearch に書き込むことができます。./heartbeat export ilm-policy コマンドを実行して、デフォルト ポリシーを stdout にエクスポートできます。その後、デフォルト ポリシーを変更して、ILM ポリシーを手動で作成できます。

Elasticsearch クラスタの Kibana コンソールで次のコマンドを実行して、ILM ポリシーを作成します。

PUT /_ilm/policy/heartbeat-policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "5mb",
            "max_age": "1d",
            "max_docs": 100
          }
        }
      },
      "warm": {
        "min_age": "60s",
        "actions": {
          "forcemerge": {
                "max_num_segments":1
              },
          "shrink": {
                "number_of_shards":1
              }
        }
      },
      "cold": {
        "min_age": "3m",
        "actions": {
          "allocate": {
            "require": {
              "box_type": "warm"
            }
          }
        }
      },
      "delete": {
        "min_age": "1h",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

パラメータ

説明

hot

ILM ポリシーがアタッチされているインデックスが次のいずれかの条件を満たすと、ロールオーバーがトリガーされます。インデックス内のデータ量が 5 MB に達する、インデックスが 1 日以上使用されている、インデックス内のドキュメント数が 100 を超える。ロールオーバー中に、システムはインデックスを作成し、新しいインデックスの ILM ポリシーを有効にします。元のインデックスは、ロールオーバーの 60 秒後に warm フェーズに入ります。

重要

rollover 中に max_docs、max_size、または max_age の値に達すると、Elasticsearch はインデックスをアーカイブします。

warm

インデックスが warm フェーズに入ると、システムはインデックスを 1 つのプライマリ シャードのみを持つインデックスに縮小し、インデックス内のセグメントを 1 つのセグメントにマージします。インデックスは、ロールオーバー開始の 3 分後に cold フェーズに入ります。

cold

インデックスが cold フェーズに入ると、システムはインデックスを hot ノードから warm ノードに移行します。インデックスは、ロールオーバー開始の 1 時間後に delete フェーズに入ります。

delete

インデックスが delete フェーズに入ると、削除されます。

説明
  • ILM ポリシーを作成した後、ポリシー名を変更することはできません。

  • この手順では、max_age パラメータを最小単位の秒で指定できます。Kibana コンソールを使用して ILM ポリシーを作成する場合は、このパラメータを最小単位の時間でのみ指定できます。

手順 4:ILM ポリシーをインデックス テンプレートにアタッチする

Heartbeat を開始すると、システムは Elasticsearch クラスタに Heartbeat インデックス テンプレートを作成します。手順 3:ILM ポリシーを作成するで作成した ILM ポリシーをこのインデックス テンプレートにアタッチする必要があります。

  1. Elasticsearch クラスタの Kibana コンソールにログオンします。

    詳細については、「Kibana コンソールへのログオン」をご参照ください。

  2. 左側のナビゲーション ウィンドウで、[management] をクリックします。

  3. [elasticsearch] セクションで、[index Lifecycle Policies] をクリックします。

  4. [index Lifecycle Policies] セクションで、作成した ILM ポリシーを見つけ、[actions] > [add Policy To Index Template] を選択します。

    Add policy

  5. 表示されるダイアログ ボックスで、[index Template] ドロップダウン リストからインデックス テンプレートを選択し、[alias For Rollover Index] フィールドにインデックスのエイリアスを入力します。

    Add policy

  6. [add Policy] をクリックします。

手順 5:ILM ポリシーをインデックスにアタッチする

Heartbeat を開始すると、システムは Elasticsearch クラスタに Heartbeat インデックスを作成します。作成したインデックス テンプレートにアタッチされている ILM ポリシーを、テンプレートを使用して作成された最初のインデックスにアタッチする必要があります。詳細については、「手順 4:ILM ポリシーをインデックス テンプレートにアタッチする」をご参照ください。

  1. [elasticsearch] セクションの [管理] ページで、[インデックス管理] をクリックします。

  2. [index Management] セクションで、目的のインデックスを見つけ、その名前をクリックします。

  3. 表示されるウィンドウの [summary] タブで、[manage] > [remove Lifecycle Policy] を選択して、Heartbeat のデフォルト ポリシーを削除します。

    移除Heartbeat自带的默认策略

  4. 表示されるダイアログ ボックスで、[remove Policy] をクリックします。

  5. [manage] > [add Lifecycle Policy] を再度選択します。

  6. 表示されるダイアログ ボックスで、手順 3:ILM ポリシーを作成するで作成した ILM ポリシーを [lifecycle Policy] ドロップダウン リストから選択し、[index Rollover Alias]手順 4:ILM ポリシーをインデックス テンプレートにアタッチするで指定したエイリアスに設定します。次に、[add Policy] をクリックします。

    Add policy

    ILM ポリシーがインデックスにアタッチされている場合、次の図に示す情報が表示されます。关联成功

手順 6:さまざまなフェーズのインデックスを表示する

hot フェーズのインデックスを表示するには、[index Management] セクションの [lifecycle Phase] ドロップダウン リストから [hot] を選択します。过滤Hot阶段索引

この方法を使用して、他のフェーズのインデックスを表示できます。

FAQ

ILM ポリシーのチェック間隔を構成するにはどうすればよいですか?

システムは、ILM ポリシーに一致するインデックスを定期的にチェックします。デフォルトの間隔は 10 分です。一致するインデックスが検出されると、システムはインデックスのデータをロールオーバーします。たとえば、ILM ポリシーを作成するときに max_docs を 100 に設定します。この場合、チェック中にインデックス内のドキュメント数が 100 に達したことがシステムによって検出されると、インデックスのロールオーバーがトリガーされます。indices.lifecycle.poll_interval パラメータを使用して、チェック間隔を制御できます。これにより、インデックスのデータがタイムリーにロールオーバーされます。

重要

このパラメータを適切な値に設定します。小さい値を設定すると、ノードが過負荷になる可能性があります。この例では、このパラメータは 1m に設定されています。

PUT _cluster/settings
{
  "transient": {
    "indices.lifecycle.poll_interval":"1m"
  }
}