全部产品
Search
文档中心

Elasticsearch:Terapkan arsitektur hot-warm dengan ILM

更新时间:Feb 06, 2026

Topik ini menjelaskan cara menggunakan Index Lifecycle Management (ILM) untuk menerapkan arsitektur hot-warm pada data time-series seperti log dan metrik. Arsitektur ini secara otomatis memindahkan data yang menua dari hot node ke warm node, sehingga meningkatkan performa pengindeksan dan mengurangi biaya penyimpanan.

Prasyarat

Untuk berhasil menerapkan Index Lifecycle Management (ILM), kluster Alibaba Cloud Elasticsearch Anda harus memenuhi kondisi berikut:

  1. Elasticsearch V6.6.0 atau versi yang lebih baru.

  2. Warm node telah dikonfigurasi.

    Dapatkan warm node dengan salah satu cara berikut:

Penting

Untuk memastikan fungsi ILM berjalan dengan baik, pastikan semua node dalam kluster Anda (hot, warm, dll.) menjalankan versi yang sama.

Catatan penggunaan

  • Granularitas kebijakan: Konfigurasikan kebijakan ILM sesuai kebutuhan bisnis spesifik Anda. Kami menyarankan penggunaan alias dan kebijakan yang berbeda untuk indeks dengan struktur atau kebutuhan retensi yang berbeda guna menyederhanakan manajemen.

  • Operasi tulis: Hindari menulis data langsung ke indeks yang telah memasuki fase warm atau cold. Untuk menjaga urutan kronologis dan integritas data, atur aksi dalam kebijakan ILM agar membuat indeks menjadi read-only (misalnya, menggunakan aksi shrink atau read_only) setelah keluar dari fase hot.

  • Pengujian sebelum produksi: Selalu uji kebijakan ILM secara menyeluruh di lingkungan non-produksi sebelum menerapkannya pada kluster produksi kritis.

  • Nama kebijakan tidak dapat diubah: Nama kebijakan tidak dapat diubah setelah dibuat. Rencanakan konvensi penamaan Anda dengan cermat.

  • Persyaratan alias rollover: Fitur rollover ILM memerlukan templat indeks yang menggunakan alias rollover.

  • Penamaan indeks awal: Nama indeks awal harus diakhiri dengan angka enam digit (misalnya, -000001) agar fitur rollover berfungsi dengan benar.

Prosedur

Bagian ini memandu Anda melalui konfigurasi ILM di kluster Alibaba Cloud Elasticsearch Anda.

Langkah 1: Konfirmasi konfigurasi warm node

Sebelum melanjutkan, verifikasi bahwa kluster Anda telah menyediakan warm node dengan benar.

Konsol Alibaba Cloud Elasticsearch

Buka halaman informasi dasar kluster Elasticsearch Anda dan periksa arsitektur kluster di bagian Node Visualization.

image

Kibana

Buka Konsol Kibana, pilih Dev Tools, lalu jalankan perintah berikut di Console:

GET _cat/nodeattrs?v&h=node,attr,value&s=attr:desc

Tanggapan yang berisi atribut box_type:warm menunjukkan bahwa kluster telah dikonfigurasi dengan warm node.

Langkah 2: Buat kebijakan ILM

Tentukan tahapan siklus hidup data Anda dengan membuat kebijakan ILM. Contoh ini membuat game-policy dengan fase hot, warm, cold, dan delete.

Di Konsol Kibana, jalankan perintah berikut:

PUT /_ilm/policy/game-policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "1GB",
            "max_age": "1d",
            "max_docs": 1000
          }
        }
      },
      "warm": {
        "min_age": "30m",
        "actions": {
          "forcemerge": {
                "max_num_segments":1
              },
          "shrink": {
                "number_of_shards":1
              }
        }
      },
      "cold": {
        "min_age": "1h",
        "actions": {
          "allocate": {
            "require": {
              "box_type": "warm"
            }
          }
        }
      },
      "delete": {
        "min_age": "2h",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

Catatan
  • Nama kebijakan tidak dapat diubah setelah dibuat.

  • Anda juga dapat membuat kebijakan di Konsol Kibana. Namun, satuan minimum untuk max_age di Kibana adalah jam. Jika menggunakan API, Anda dapat menentukan satuan minimum dalam detik.

Langkah 3: Buat templat indeks dan terapkan kebijakan ILM

Templat indeks secara otomatis menerapkan pengaturan, termasuk kebijakan ILM, ke indeks baru yang sesuai dengan pola tertentu.

Jalankan perintah berikut.

Pengaturan index.routing.allocation.require.box_type:"hot" memastikan indeks baru awalnya dibuat di hot node.

PUT _template/gamestabes_template
{
  "index_patterns" : ["gamestabes-*"],
  "settings": {
    "index.number_of_shards": 5,
    "index.number_of_replicas": 1,
    "index.routing.allocation.require.box_type":"hot",
    "index.lifecycle.name": "game-policy", 
    "index.lifecycle.rollover_alias": "gamestabes"
  }
}

Parameter:

  • index.routing.allocation.require.box_type: Menentukan atribut node yang harus dicocokkan oleh indeks baru.

  • index.lifecycle.name: Nama kebijakan ILM yang akan diterapkan.

  • index.lifecycle.rollover_alias: Alias yang digunakan untuk rollover.

Langkah 4: Buat indeks awal

Untuk menggunakan ILM dengan indeks rolling, Anda harus membuat indeks awal secara manual. Pastikan nama indeks mengikuti konvensi penamaan yang ditentukan.

Jalankan perintah berikut untuk membuat indeks dengan akhiran auto-increment dan mengatur is_write_index: true pada alias:

PUT gamestabes-000001
{
"aliases": {
    "gamestabes":{
       "is_write_index": true
        }
      }
}
Catatan

Agar fitur rollover berfungsi, nama indeks awal harus diakhiri dengan angka enam digit (misalnya, -000001). Indeks hasil rollover selanjutnya akan menambah angka tersebut.

Langkah 5: Verifikasi fungsionalitas ILM

Setelah mengonfigurasi ILM, verifikasi bahwa data berpindah dengan benar melalui tahapan siklus hidupnya.

  1. Masukkan data ke indeks menggunakan alias.

    PUT gamestabes/_doc/1
    {
        "EU_Sales" : 3.58,
        "Genre" : "Platform",
        "Global_Sales" : 40.24,
        "JP_Sales" : 6.81,
        "Name" : "Super Mario Bros.",
        "Other_Sales" : 0.77,
        "Platform" : "NES",
        "Publisher" : "Nintendo",
        "Year_of_Release" : "1985",
        "na_Sales" : 29.08
    }
    Catatan

    Sistem secara berkala memeriksa kecocokan kebijakan ILM (default: setiap 10 menit, dapat dikonfigurasi melalui indices.lifecycle.poll_interval). Ketika kondisi (misalnya, max_size, max_age, max_docs) terpenuhi, data akan berganti ke indeks baru, dan indeks saat ini akan memasuki fase berikutnya (warm).

  2. Filter indeks berdasarkan fase siklus hidup dan lihat detail indeks.

    1. Di bilah navigasi kiri Kibana, klik Management.

    2. Di bawah Elasticsearch, klik Index Management.

    3. Filter indeks berdasarkan Lifecycle phase atau Lifecycle status untuk mengamati transisinya.

      Filter indexes based on lifecycle phases

    4. Klik nama indeks untuk melihat informasi dan status siklus hidupnya secara rinci.

      View index details

Lihat distribusi data

Untuk memastikan indeks telah dipindahkan dengan benar ke warm node sesuai kebijakan Anda:

  1. Kueri indeks dalam fase cold dan lihat konfigurasi indeks tersebut.

    Query indexes in the cold phase

  2. Jalankan Get shard information untuk mengkueri distribusi shard pada indeks cold.

    GET _cat/shards?shrink-gamestables-000012

    Hasilnya menunjukkan bahwa indeks dalam fase cold berada di warm node:Result

Kelola kebijakan ILM

Setelah konfigurasi awal, Anda mungkin perlu memperbarui kebijakan yang ada atau beralih ke kebijakan baru.

Perbarui kebijakan yang ada

  1. Ubah kebijakan game-policy yang ada (misalnya, ubah max_size menjadi 3GB) lalu jalankan ulang perintah PUT /_ilm/policy/game-policy.

    Update the ILM policy

  2. Lihat versi kebijakan yang diperbarui di Kibana.

    1. Di bilah navigasi kiri, klik Management.

    2. Di bagian Elasticsearch, klik Index Lifecycle Policies.

    3. Amati nomor versi untuk game-policy. Nomor tersebut akan bertambah satu dari versi kebijakan sebelumnya.

      View the version of the updated policy

      Catatan

      Kebijakan yang diperbarui mulai berlaku sejak event rollover berikutnya.

Beralih ke kebijakan ILM baru

Untuk menerapkan kebijakan baru sepenuhnya ke indeks, buat kebijakan baru lalu perbarui templat indeks.

  1. Buat kebijakan ILM baru.

    PUT /_ilm/policy/game-new
    {
      "policy": {
        "phases": {
          "hot": {
            "actions": {
              "rollover": {
                "max_size": "3GB",
                "max_age": "1d",
                "max_docs": 1000
              }
            }
          },
          "warm": {
            "min_age": "30m",
            "actions": {
              "forcemerge": {
                    "max_num_segments":1
                  },
              "shrink": {
                    "number_of_shards":1
                  }
            }
          },
          "cold": {
            "min_age": "1h",
            "actions": {
              "allocate": {
                "require": {
                  "box_type": "warm"
                }
              }
            }
          },
          "delete": {
            "min_age": "2h",
            "actions": {
              "delete": {}
            }
          }
        }
      }
    }
  2. Terapkan kebijakan ILM baru ke templat indeks dengan memperbarui index.lifecycle.name:

    PUT _template/gamestabes_template
    {
      "index_patterns" : ["gamestabes-*"],
      "settings": {
        "index.number_of_shards": 5,
        "index.number_of_replicas": 1,
        "index.routing.allocation.require.box_type":"hot",
        "index.lifecycle.name": "game-new", 
        "index.lifecycle.rollover_alias": "gamestabes"
      }
    }
    Catatan

    Kebijakan baru akan berlaku mulai dari rollover berikutnya untuk indeks yang dibuat setelah pembaruan templat. Untuk memigrasikan indeks yang sudah ada ke kebijakan ILM baru, jalankan perintah PUT <indexPatterns>/_settings (misalnya, PUT gamestabes-*/_settings). Untuk informasi lebih lanjut, lihat Switching policies for an index.

FAQ

Q: Bagaimana cara mengubah interval pemeriksaan ILM?

A: Secara default, kebijakan ILM diperiksa setiap 10 menit. Untuk mengubah frekuensi ini (misalnya, menjadi 1 menit), konfigurasikan pengaturan kluster indices.lifecycle.poll_interval:

Penting

Ubah parameter ini dengan hati-hati. Interval yang terlalu pendek dapat memberikan beban tambahan yang tidak perlu pada node. Dalam contoh ini, nilai diatur ke 1m.

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

Q: Mengapa rollover tidak dipicu untuk indeks saya?

A: Periksa hal-hal berikut:

  • Penamaan indeks: Pastikan nama indeks diakhiri dengan angka enam digit auto-increment (misalnya, your_index_name-000001). Rollover tidak dapat dipicu jika tidak demikian.

  • Status ILM: Jalankan GET /_ilm/explain/<your_index_name> di Kibana Dev Tools untuk memeriksa status ILM saat ini untuk indeks tertentu dan mengidentifikasi kesalahan apa pun.

  • Asosiasi kebijakan: Verifikasi bahwa indeks dikaitkan dengan kebijakan ILM yang benar dengan memeriksa pengaturan index.lifecycle.name-nya.

Q: Mengapa operasi shrink gagal di fase warm?

A: Operasi shrink dapat gagal jika jumlah shard target bukan faktor dari jumlah shard sumber. Misalnya, Anda tidak dapat memperkecil indeks dengan 5 shard utama menjadi 2 shard. Pastikan jumlah shard target dapat membagi habis jumlah shard sumber. Anda dapat menjalankan GET /_ilm/explain/<your_index_name> untuk melihat pesan kesalahan terperinci terkait kegagalan shrink.

Referensi

Create an index lifecycle management policy in Elasticsearch