All Products
Search
Document Center

Elasticsearch:Atur pemberitahuan peringatan pengecualian CCR dengan X-Pack Watcher

Last Updated:Aug 22, 2026

Elasticsearch X-Pack Watcher memantau infrastruktur, data indeks, dan metrik kesehatan kluster melalui fitur peringatan bawaannya. Anda dapat menggunakannya bersama Konsol Kibana untuk melacak status replikasi antar kluster (CCR) serta mengirim peringatan ketika latensi permintaan baca atau keterlambatan checkpoint melebihi ambang batas yang ditentukan.

Cara kerja

X-Pack Watcher terdiri dari empat komponen: trigger yang menentukan frekuensi eksekusi watch, input yang mengambil data pemantauan dari kluster, condition yang mengevaluasi apakah ambang batas peringatan tercapai, dan actions yang menentukan respons saat kondisi terpenuhi, seperti mengirim webhook.

Prasyarat

  • Anda telah membuat instans Alibaba Cloud Elasticsearch. Untuk informasi selengkapnya, lihat Buat instans Alibaba Cloud Elasticsearch.

    Catatan
    • Pada arsitektur jaringan lama, X-Pack Watcher hanya mendukung instans Elasticsearch zona ketersediaan tunggal. Instans multi-zona ketersediaan tidak didukung.

    • Pada arsitektur jaringan baru, Anda harus mengonfigurasi koneksi PrivateLink untuk instans agar melewati pembatasan jaringan. Untuk informasi selengkapnya, lihat Konfigurasikan koneksi PrivateLink untuk instans.

    Untuk informasi selengkapnya tentang arsitektur jaringan, lihat [Pemberitahuan] Penyesuaian arsitektur jaringan.

  • Anda telah mengaktifkan X-Pack Watcher pada instans Elasticsearch Anda. Untuk informasi selengkapnya, lihat Konfigurasikan parameter YML.

  • Anda telah membuat instans ECS di virtual private cloud (VPC) Anda. Untuk informasi selengkapnya, lihat Buat instans menggunakan pengaturan kustom.

    Catatan

    X-Pack Watcher di Alibaba Cloud Elasticsearch tidak dapat mengakses internet publik secara langsung. Komunikasi dilakukan melalui titik akhir pribadi instans Anda di dalam VPC. Oleh karena itu, instans ECS di VPC Anda harus memiliki akses internet publik, baik dengan mengaitkan alamat IP elastis (EIP) maupun dengan mengonfigurasi translasi alamat jaringan sumber (SNAT). Untuk informasi selengkapnya, lihat Kaitkan EIP atau Konfigurasikan SNAT.

Prosedur

Langkah 1: Buat dan konfigurasikan bot DingTalk

  1. Buat grup DingTalk untuk menerima peringatan.

  2. Di pojok kanan atas grup, klik ikon 设置.png. Di panel Group Settings, klik Bot.

  3. Di kotak dialog Robot Management , klik Add Robot, pilih Custom, lalu klik Add.

  4. Masukkan Robot Name, pilih Custom Keywords, lalu masukkan kata kunci Anda.

    Penting

    Kata kunci tersebut harus disertakan dalam pesan peringatan yang Anda konfigurasi.

  5. Pilih I have read and agree to the "Custom Robot Service and Disclaimer Terms", lalu klik Complete.

  6. Di samping Webhook, klik Copy untuk menyalin URL webhook bot.

    Jaga kerahasiaan URL webhook tersebut. Membagikannya di situs web eksternal menimbulkan risiko keamanan.

Langkah 2: Konfigurasikan proxy NGINX dan security group ECS

  1. Konfigurasikan proxy NGINX pada instans ECS Anda.

    X-Pack Watcher mengirim peringatan ke proxy NGINX di instans ECS Anda, yang kemudian meneruskannya ke DingTalk atau WeCom.

    1. Instal NGINX pada instans ECS.

    2. Konfigurasikan file nginx.conf.

      Ganti bagian server dalam file nginx.conf dengan konfigurasi berikut.

      server
        {
          listen 8080;# Port listener
          server_name localhost;# Nama domain
          index index.html index.htm index.php;
          root /usr/local/webserver/nginx/html;# Direktori situs
            location ~ .*\.(php|php5)?$
          {
            #fastcgi_pass unix:/tmp/php-cgi.sock;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi.conf;
          }
          location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
          {
            expires 30d;
            # access_log off;
          }
          location / {
            proxy_pass <Webhook URL>;
          }
          location ~ .*\.(js|css)?$
          {
            expires 15d;
            # access_log off;
          }
          access_log off;
        }

      Ganti <Webhook URL> dengan URL webhook bot DingTalk yang Anda salin di Langkah 1.

    3. Muat ulang file konfigurasi dan restart NGINX.

      /usr/local/webserver/nginx/sbin/nginx -s reload            # Muat ulang file konfigurasi
      /usr/local/webserver/nginx/sbin/nginx -s reopen            # Restart NGINX
  2. Konfigurasikan security group ECS.

    Izinkan lalu lintas inbound dari instans Alibaba Cloud Elasticsearch Anda ke proxy NGINX pada instans ECS.

    1. Login ke Konsol ECS Alibaba Cloud.

    2. Di panel navigasi kiri, pilih Instances & Images > Cluster.

    3. Di halaman Cluster, klik nama instans target.

    4. Klik tab Security Group.

    5. Di tab Security Groups, klik nama security group target.

    6. Di tab Inbound, klik Add Rule.

    7. Konfigurasikan parameter.

      Parameter

      Deskripsi

      Action

      Pilih Permitted.

      Priority

      Pertahankan nilai default.

      Protocol

      Pilih Custom TCP.

      Access Source

      Masukkan alamat IP semua node di instans Alibaba Cloud Elasticsearch Anda.

      Catatan

      Untuk mendapatkan alamat IP node, lihat Lihat informasi dasar tentang node.

      Destination

      Masukkan port yang dikonfigurasi NGINX untuk didengarkan. Topik ini menggunakan port 8080 sebagai contoh.

      Description

      Masukkan deskripsi aturan.

    8. Klik OK.

Langkah 3: Konfigurasikan watch

  1. Login ke konsol Kibana kluster Elasticsearch Anda.

    Untuk petunjuknya, lihat Login ke konsol Kibana.

    Catatan

    Contoh ini menggunakan Elasticsearch V6.7.0. Langkah-langkahnya mungkin sedikit berbeda untuk versi lain.

  2. Di bilah navigasi kiri, pilih Management > Dev Tools.

  3. Di Console, jalankan perintah berikut untuk membuat watch.

    PUT _watcher/watch/ccr_watcher
    {
      "trigger": {
        "schedule": {
          "interval": "10s"
        }
      },
      "input": {
        "search": {
          "request": {
            "indices": [
              ".monitoring-es*" 
            ],
            "body": {
              "size": 0,
              "sort": [
                {
                  "timestamp": {
                    "order": "desc"
                  }
                }
              ],
              "query": {
                "bool": {
                  "must": [
                    {
                      "range": {
                        "timestamp": {
                          "gte": "now-10m"
                        }
                      }
                    },
                    {
                      "term": {
                        "type": {
                          "value": "ccr_stats"
                        }
                      }
                    },
                    {
                      "bool": {
                        "should": [
                          {
                            "range": {
                              "ccr_stats.time_since_last_read_millis": {
                                "gte": 600000
                              }
                            }
                          },
                          {
                            "script": {
                              "script": "long gap = doc['ccr_stats.leader_global_checkpoint'].value - doc['ccr_stats.follower_global_checkpoint'].value;\n            return gap>1000;"
    
    
                            }
                          }
                        ]
                      }
                    }
                  ]
                }
              },
              "aggs": {
                "NAME": {
                  "terms": {
                    "field": "ccr_stats.follower_index",
                    "size": 1000
                  }
                }
              }
            }
          }
        }
      },
      "condition": {
        "compare": {
          "ctx.payload.hits.total": {
            "gt": 0
          }
        }
      },
      "transform": {
        "script": """
        StringBuilder message = new StringBuilder();
    for (def bucket : ctx.payload.aggregations.NAME.buckets) {
      message.append(bucket.key).append('  ')
    }
        return [ 'delay_indices' : message.toString().trim()  ]
    """
      },
      "actions" : {
         "add_index": {
          "index": {
            "index": "ccr_delay_indices",
            "doc_type": "doc"
          }
        },
         "my_webhook": {
         "webhook" : {
            "method" : "POST",
            "url" : "http://<yourAddress>:8080",
            "body" : "{\"msgtype\": \"text\", \"text\": { \"content\": \"Please note: {{ctx.payload}}\"}}"
          }
        }
      }
    
    }

    Tabel berikut menjelaskan parameter utama.

    Parameter

    Deskripsi

    trigger

    Interval pemicu watch. Dalam contoh ini, intervalnya adalah 10 detik. Sesuaikan nilai ini sesuai kebutuhan.

    input.search.request.indices

    Indeks target untuk dikueri. Indeks .monitoring-es* menyimpan semua metrik pemantauan untuk kluster, termasuk metrik CCR.

    input.search.request.body

    Body kueri. Contoh ini mengkueri status CCR dari 10 menit terakhir. Watch dilanjutkan jika salah satu kondisi berikut terpenuhi:

    • ccr_stats.time_since_last_read_millis > 600000 ms (10 menit): Lebih dari 10 menit telah berlalu sejak operasi baca terakhir dari kluster leader. Sesuaikan ambang batas ini sesuai kebutuhan.

    • Selisih antara ccr_stats.leader_global_checkpoint dan ccr_stats.follower_global_checkpoint lebih besar dari 1.000. Artinya checkpoint follower tertinggal lebih dari 1.000 operasi dari checkpoint leader. Sesuaikan ambang batas ini sesuai kebutuhan.

    condition

    Kondisi pemicu peringatan. Dalam contoh ini, peringatan dipicu jika kondisi dalam input.search.request.body terpenuhi dan kueri mengembalikan lebih dari nol dokumen yang cocok.

    transform

    Langkah pra-pemrosesan. Contoh ini melakukan iterasi melalui kunci bucket dan mengekstraksi nama-nama indeks yang tertinggal.

    actions

    Aksi yang dieksekusi jika kondisi bernilai true. Contoh ini menentukan dua aksi:

    • add_index: Menulis hasil ke indeks, yang berguna untuk debugging konfigurasi watch.

    • my_webhook: Mengirim peringatan menggunakan webhook.

    <yourAddress>

    Alamat server yang menerima peringatan:

    • Untuk kluster yang menggunakan arsitektur jaringan baru, atur parameter ini ke titik akhir koneksi privat. Untuk informasi selengkapnya tentang cara mendapatkan titik akhir, lihat Konfigurasikan koneksi privat untuk kluster Elasticsearch.

    • Untuk kluster yang menggunakan arsitektur jaringan asli, atur parameter ini ke salah satu alamat berikut:

      • Alamat IP proxy NGINX. Proxy NGINX meneruskan permintaan dari dalam VPC ke internet.

      • URL webhook chatbot DingTalk.

    body

    Konfigurasikan nilai ini sesuai pengaturan keamanan chatbot DingTalk.

    Sebagai contoh, jika Anda memilih Custom Keywords sebagai Security Settings dan menambahkan note sebagai kata kunci di Langkah 1: Buat dan konfigurasikan chatbot DingTalk, bidang content dalam body harus berisi kata note agar chatbot memproses peringatan tersebut.

    Catatan

    Jika Anda melihat error No handler found for uri [/_xpack/watcher/watch/log_error_watch_2] and method [PUT] saat menjalankan perintah, X-Pack Watcher belum diaktifkan pada instans Alibaba Cloud Elasticsearch Anda. Aktifkan terlebih dahulu, lalu jalankan kembali perintah tersebut. Untuk informasi selengkapnya, lihat Konfigurasikan parameter YML.

Langkah 4: Lihat peringatan

Jika status CCR memenuhi kondisi peringatan yang dikonfigurasi di Langkah 3: Konfigurasikan watch, Anda akan menerima peringatan di grup DingTalk Anda.查看报警结果

Catatan

Jika Anda tidak lagi memerlukan watch tersebut, jalankan perintah berikut untuk menghapusnya.

DELETE _watcher/watch/ccr_watcher