Tüm Ürünler
Search
Belge Merkezi

Elasticsearch:Use the cluster throttling plug-in (aliyun-qos)

Son Güncelleme:Oct 04, 2026

aliyun-qos eklentisi, Alibaba Cloud Elasticsearch ekibi tarafından geliştirilen küme düzeyinde bir okuma ve yazma kısıtlama eklentisidir. Üst akış hizmetleri trafiği kontrol edemediğinde iş önceliğine göre belirli dizinleri kısıtlamak için aliyun-qos eklentisini kullanabilirsiniz. Bu sayede trafik yönetilebilir seviyede kalır ve Elasticsearch kümenizin kararlılığı korunur.

Dikkat Edilmesi Gerekenler

  • aliyun-qos eklentisi önceden yüklüdür ve kaldırılamaz. Kısıtlama özelliği varsayılan olarak devre dışıdır. Eklenti küme kararlılığını korumak üzere tasarlanmıştır; okuma ve yazma trafiğini hassas şekilde ölçmek için değildir.

  • Eklenti sürümü: aliyun-qos eklentisini kullanmadan önce en son sürüme güncellendiğinden emin olun. Kibana konsoluna giriş yapın ve eklenti sürümünü kontrol etmek için GET /_cat/plugins?v komutunu çalıştırın.

    Eklenti sürümü <cluster version>_ali<internal version number> biçimindedir; örneğin 7.10.0_ali1.6.0.2 veya 8.17.0_ali2.2.0.4.1. Eklenti sürümü en güncel değilse yükseltmek için aşağıdaki yöntemlere başvurun:

    • V7.10 kümesi için: Konsolda çekirdek sürümünü 1.6.0'a yükseltin. Daha fazla bilgi için bkz. Küme sürümlerini yükseltme.

    • Diğer küme sürümleri için: Eklentiyi yükseltmek üzere Alibaba Cloud Destek'e bir destek talebi oluşturun. Yükseltmeden sonra yeni sürümün etkili olması için Elasticsearch kümesini manuel olarak yeniden başlatmanız gerekir.

    • Eklenti sürümü rc4'ten önceyse unsupported_operation_exception hatası oluşur. aliyun-qos eklentisi yalnızca V6.7.0 veya üzeri sürüm çalışan kümelerde yükseltilebilir. Daha eski sürüm çalışan kümeleri öncelikle V6.7.0 veya üzerine yükseltmeniz gerekir.

Eşikleri değerlendirin

aliyun-qos eklentisi kısıtlamayı küme düzeyinde uygular. Performans yükünü en aza indirmek için tüm düğümlerdeki okuma ve yazma trafiğini hassas şekilde ölçmez; bu nedenle gerçek trafik ile ölçülen trafik farklılık gösterebilir. Eklentiyi kullanmadan önce aşağıdaki kurallara göre kısıtlama eşiklerini değerlendirin:

  • Sorgu istekleri

    Sorgu istekleri için kısıtlama eşiği = İstemciden Elasticsearch'e uçtan uca QPS (saniyedeki sorgu sayısı)

    Uçtan uca QPS, yalnızca istemci düğümlerine saniyede ulaşan sorgu isteklerinin sayısını ifade eder.

  • Yazma istekleri

    Yazma isteği kısıtlama eşiğini hesaplama kuralı sorgu isteklerine benzer ancak çoğaltma parçası sayısına göre ayarlama yapılmasını gerektirir.

    Örneğin iki veri düğümü ve tek bir dizin içeren bir küme düşünün. Dizin bir ana parça ve bir çoğaltma parçasına sahiptir. Her yazma işlemi 10 MB veri gönderir. Bir çoğaltma parçası bulunduğundan her veri düğümüne 10 MB veri yazılır. Ayrıca Monitor, Audit ve Watcher gibi dahili X-Pack görevleri de yazma aktarım hızını tüketir. Eşiği ayarlarken bu trafik için kapasite rezervi bırakın.

Kısıtlamayı etkinleştirin

aliyun-qos eklentisinin kısıtlama özelliği varsayılan olarak devre dışıdır. Kullanmadan önce etkinleştirmeniz gerekir. Özelliği etkinleştirme komutu eklenti sürümüne göre değişir.

En son V7.10 sürümü

Diğer sürümler

PUT _cluster/settings
{
  "persistent": {
    "apack.qos.limiter.enabled": true
  }
}
PUT _cluster/settings
{
  "persistent": {
    "apack.qos.ratelimit.enabled": "true"
  }
}

Kısıtlamayı devre dışı bırakın

Limiter parametresini false veya null olarak ayarlayarak kısıtlama özelliğini devre dışı bırakabilirsiniz. Komut sürüme göre değişir.

Yöntem

En son V7.10 sürümü

Diğer sürümler

Limiter parametresini false olarak ayarlayın

PUT _cluster/settings
{
  "persistent": {
    "apack.qos.limiter.enabled": false
  }
}
PUT _cluster/settings
{
  "persistent": {
    "apack.qos.ratelimit.enabled": "false"
  }
}

Limiter parametresini null olarak ayarlayın

PUT _cluster/settings
{
  "persistent": {
    "apack.qos.limiter.enabled": null
  }
}
PUT _cluster/settings
{
  "persistent": {
    "apack.qos.ratelimit.enabled": null
  }
}

Limiter yapılandırması (en son V7.10 sürümü)

Aşağıdaki limiter yapılandırmaları yalnızca V7.10 kümeleri için aliyun-qos eklentisinde geçerlidir.

Bir limiter yapılandırması iki bölümden oluşur: limiters ve tags. tags bölümü kaynak sınırlarının kapsamını tanımlarken limiters bölümü belirli kısıtlama türünü ve eşik değerini belirler. Limiters standart veya varsayılan olabilir. Bir etiket değerini ** olarak ayarlayarak varsayılan bir limiter oluşturabilirsiniz. Örneğin her parça için varsayılan bir aktarım hızı veya her uygulama için varsayılan bir QPS değeri belirtebilirsiniz. Bir istek sınırı aştığında Elasticsearch sonraki istekleri reddeder.

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
     ${action}.${limiter_type}:${threshold}
  },
  "tags": {
    ${tagName}:${tagValue}
  },
  "priority":0,
  "params":{
      "watchMode":true
  }
}

Parametre

Açıklama

Değer

action

Kısıtlanacak işlem. Farklı istek türlerini sınırlandırmak için kullanılır.

  • write: index ve create işlemleri dahil olmak üzere belge yazma istekleri.

  • update: Belge güncelleme istekleri.

  • delete: Belge silme istekleri.

  • search: Sorgu istekleri.

  • search_shards: Bir dizinin toplam parça sayısını sorgulama istekleri.

limiter_type

Kısıtlama türü. Rate, concurrency ve per-request limitleri olmak üzere üç kategori desteklenir.

  • rate: Hız sınırı. Yalnızca tamsayı kabul eder.

  • qps: Sorgu hızı. Yalnızca tamsayı kabul eder.

  • tps: Yazma hızı. Yalnızca tamsayı kabul eder.

  • throughput: Veri aktarım hızı. Yalnızca write, update ve delete işlemleri için desteklenir. Birimler GB, MB ve KB'dir. Maksimum değer 2 GB'dir.

  • thread_count: Eşzamanlı istek sayısını sınırlar.

  • concurrent_count: İstek eşzamanlılığı, bir istekteki belirli işlemlere göre hesaplanır. Örneğin search_shards.concurrent_count:20 en fazla 20 eşzamanlı parça sorgusuna izin verir.

  • max_per_request: Tek bir istek içinde belirli bir işlem türünün maksimum sayısı. Örneğin update.max_per_request:10 tek bir Bulk isteğinde en fazla 10 güncelleme işlemine izin verir.

  • max_size_per_request: Tek bir isteğin maksimum boyutu. Yalnızca write, update ve delete işlemleri için desteklenir.

threshold

Kısıtlama eşiği.

-1 veya daha büyük bir tamsayı.

Bazı türler birimli dizeleri destekler. Daha fazla bilgi için limiter_type açıklamasına bakın.

tagName

Etiket adı.

  • node: Geçerli düğümün adı.

  • is_master: Geçerli düğümün master düğüm olup olmadığını belirtir. Karşılık gelen etiket değeri true veya false olur.

  • index: Dizin adı. Birden çok dizin için dizi kullanın. Takma ad geçirilirse gerçek dizin adına çözülür. Bu etiket yalnızca IndicesRequest alt sınıfları için kullanılabilir.

  • shard: Parça adı, index[id] biçimindedir; örneğin test[0]. Bu etiket yalnızca ReplicationRequest alt sınıfları için kullanılabilir.

  • index_in_url: URL'den alınan dizin dizesi. Takma ad geçirilirse bu etiket takma adı korur. Bu etiket yalnızca IndicesRequest alt sınıfları için kullanılabilir.

tagValue

Etiket değeri.

Bir dize veya dize dizisi. Dizi kullanılırsa etiket dizideki herhangi bir değerle eşleşir. Tam eşleşme, joker karakterli ön ek eşleşmesi ve tüm değerler desteklenir. Örnekler:

  • Tam eşleşme: "abc"

  • Ön ek eşleşmesi: "ab*"

  • Tüm değerler: "**"

    Joker karakterli bir değer kullanmak varsayılan bir kısıtlayıcı tanımlar; bu, bu etiketin herhangi bir değeri için belirli bir kısıtlayıcı oluşturulduğu anlamına gelir. Örneğin index:"**",search.tps:1 belirtirseniz toplam arama hızı 1 olarak kısıtlanmaz bunun yerine her dizin için arama hızı varsayılan olarak 1 olarak kısıtlanır.

priority

Limiter önceliği.

Bir tamsayı. Varsayılan değer: 0.

Daha yüksek değer daha yüksek öncelik anlamına gelir. Bir istek birden çok varsayılan limiterla eşleştiğinde yalnızca en yüksek önceliğe sahip olan etkili olur.

params

Gelişmiş parametreler.

watchMode: İzleme modunun etkinleştirilip etkinleştirilmeyeceğini belirtir. Geçerli değerler: true ve false (varsayılan). true olarak ayarlandığında Elasticsearch reddedilen istek sayılarını ölçümlerde kaydeder ancak sınırları uygulamaz. Bu, yanlış yapılandırmaları önlemek için bir kuralı uygulamadan önce etkisini ön izlemenize olanak tanır. API'ler hakkında daha fazla bilgi için SSS bölümüne bakın.

Limiter yapılandırma örnekleri

Sorgular için QPS kısıtlaması ayarlayın

Bir dizin için eşik belirleyerek istemci düğümündeki sorgu QPS'sini sınırlayabilirsiniz. Saniyedeki sorgu isteği sayısı eşiği aştığında Elasticsearch sonraki istekleri reddeder.

index ve index_patterns değerleri tam dizin adları veya joker karakterli adlar olabilir. Komut sürüme göre değişir.

İşlemler

En son V7.10 sürümü

Diğer sürümler

Tek bir dizin için sorgu QPS kısıtlaması ayarlayın

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search.qps": "1000"
  },
  "tags": {
    "index": "twitter"
  }
}
PUT /_qos/_ratelimit/<limiterName>
{
  "search.index_patterns": "twitter",
  "search.max_queries_per_sec": 1000
}

Belirli bir ad önekine sahip dizinler için sorgu QPS kısıtlaması ayarlayın

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search.qps": "1000"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}
PUT /_qos/_ratelimit/<limiterName>
{
  "search.index_patterns": "nginx-log-*",
  "search.max_queries_per_sec": 1000
}

Her dizin için ayrı ayrı sorgu QPS kısıtlaması ayarlayın

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search.qps": "1000"
  },
  "tags": {
    "index": "**"
  }
}

index: herhangi bir dizini temsil eder. Örneğin bir kümede A, B ve C adlı üç dizin varsa bu üç dizinin kısıtlama değeri 1000'dir.

Desteklenmiyor.

Tüm dizinler için toplam sorgu QPS sınırı ayarlayın

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search.qps": "1000"
  },
  "tags": {
    "index": "*"
  }
}

index:* herhangi bir dizini gösterir. Örneğin bir kümede A, B ve C adlı üç dizin varsa bu üç dizin için toplam kısıtlama değeri 1000'dir. Bu, etiketi ayarlamamanızla aynı etkiye sahiptir.

PUT /_qos/_ratelimit/<limiterName>
{
  "search.index_patterns": "*",
  "search.max_queries_per_sec": 1000
}

Birden çok kural tanımlayabilirsiniz. Bir istek herhangi bir kural ile eşleştiğinde kısıtlama tetiklenir.

Sorgu QPS'si yapılandırılan sınırı aştığında sistem bir hata mesajı döndürür. Hata mesajı sürüme göre değişir:

  • En son V7.10 sürümü

    {
      "error": {
        "root_cause": [
          {
            "type": "status_exception",
            "reason": "search blocked, limited by [<limiterName>][search.qps](<limiterId>) threshold:[x]"
          }
        ],
        "type": "status_exception",
        "reason": "search blocked, limited by [<limiterName>][search.qps](<limiterId>) threshold:[x]"
      },
      "status": 429
    }
  • Diğer sürümler

    {
      "error": {
        "root_cause": [
          {
            "type": "rate_limited_exception",
            "reason": "request indices:data/read/search rejected, limited by [l1:t*:1.0]"
          }
        ],
        "type": "rate_limited_exception",
        "reason": "request indices:data/read/search rejected, limited by [l1:t*:1.0]"
      },
      "status": 429
    }

Yazmalar için TPS kısıtlaması ayarlayın

Bir TPS (saniyedeki işlem sayısı) eşiği belirleyerek istemci düğümünün aldığı saniyedeki yazma isteği sayısını sınırlayabilirsiniz. Saniyedeki yazma isteği sayısı eşiği aştığında Elasticsearch sonraki istekleri reddeder.

index ve index_patterns değerleri tam dizin adları veya joker karakterli adlar olabilir. Komut sürüme göre değişir.

En son V7.10 sürümü

Diğer sürümler

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "write.tps": "100000"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}

Desteklenmiyor

Bulk istekleri için aktarım hızı kısıtlaması ayarlayın

İstemci düğümündeki Bulk API istekleri için saniye başına bayt cinsinden bir sınır belirleyerek yazma aktarım hızını sınırlayabilirsiniz. Yazma aktarım hızı bu sınırı aştığında Elasticsearch sonraki istekleri reddeder.

index ve index_patterns değerleri tam dizin adları veya joker karakterli adlar olabilir. Komut sürüme göre değişir.

En son V7.10 sürümü

Diğer sürümler

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "write.throughput": "100MB"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}
PUT /_qos/_ratelimit/<limiterName>
{
  "bulk.index_patterns": "nginx-log-*",
  "bulk.max_throughput_in_bytes": 104857600
}

Birden çok kural tanımlayabilirsiniz. Bir istek herhangi bir kural ile eşleştiğinde kısıtlama tetiklenir.

Bulk istekleri için istek boyutu kısıtlaması ayarlayın

İstemci düğümünde tek bir Bulk API isteğinin boyutunu sınırlayabilirsiniz. Bir istek bu boyut sınırını aşarsa Elasticsearch onu reddeder.

index ve index_patterns değerleri tam dizin adları veya joker karakterli adlar olabilir. Komut sürüme göre değişir.

En son V7.10 sürümü

Diğer sürümler

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "write.max_size_per_request": "1000"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}
PUT /_qos/_ratelimit/<limiterName>
{
  "bulk.index_patterns": "nginx-log-*",
  "bulk.max_request_size_in_bytes": 1000
}

Birden çok kural tanımlayabilirsiniz. Bir istek herhangi bir kural ile eşleştiğinde kısıtlama tetiklenir.

Tek bir yazma isteğinin boyutu yapılandırılan sınırı aştığında sistem bir hata mesajı döndürür. Hata mesajı sürüme göre değişir:

  • En son V7.10 sürümü

    {
      "error" : {
        "root_cause" : [
          {
            "type" : "status_exception",
            "reason" : "write_size blocked, limited by [<limiterName>][write.max_size_per_request](<limiterId>) threshold:[x] try acquire [x]"
          }
        ],
        "type" : "status_exception",
        "reason" : "write_size blocked, limited by [<limiterName>][write.max_size_per_request](<limiterId>) threshold:[x] try acquire [x]"
      },
      "status" : 400
    }
  • Diğer sürümler

    {
      "error": {
        "root_cause": [
          {
            "type": "rate_limited_exception",
            "reason": "request indices:data/write/bulk rejected, limited by [b2:ByteSizePreSeconds:992.0]"
          }
        ],
        "type": "rate_limited_exception",
        "reason": "request indices:data/write/bulk rejected, limited by [b2:ByteSizePreSeconds:992.0]"
      },
      "status": 413
    }

Parça sorguları için eşzamanlılık kısıtlaması ayarlayın

Eşzamanlı parça sorgusu sayısını belirleyerek kümenizdeki yükü azaltabilirsiniz. index ve index_patterns değerleri tam dizin adları veya joker karakterli adlar olabilir. Komut sürüme göre değişir.

En son V7.10 sürümü

Diğer sürümler

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search_shards.concurrent_count": "10"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}

Desteklenmiyor

Birden çok kural tanımlayabilirsiniz. Bir istek herhangi bir kural ile eşleştiğinde kısıtlama tetiklenir.

Birden çok limiter yapılandırması ayarlayın

Tek bir limiter yapılandırması içinde birden çok sınır tanımlayabilirsiniz. index ve index_patterns değerleri tam dizin adları veya joker karakterli adlar olabilir. Komut sürüme göre değişir.

En son V7.10 sürümü

Diğer sürümler

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search.qps": "1000",
    "write.tps": "100000",
    "write.throughput": "1000000",
    "write.max_size_per_request": "1000",
    "search_shards.concurrent_count": "10"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}

Desteklenmiyor

Birden çok kural tanımlayabilirsiniz. Bir istek herhangi bir kural ile eşleştiğinde kısıtlama tetiklenir.

Limiter yapılandırmalarını görüntüleyin

Limiter yapılandırmalarını alma komutu sürüme göre değişir.

İşlemler

En son V7.10 sürümü

Diğer sürümler

Tüm limiter yapılandırmalarını alın

GET /_qos/limiter
GET /_qos/_ratelimit

Belirtilen tek bir limiter yapılandırmasını alın

GET /_qos/limiter/<limiterName>
GET /_qos/_ratelimit/<limiterName>

Belirtilen birden çok limiter yapılandırmasını alın. Birden çok limiter adını virgülle (,) ayırın. Joker karakterler desteklenmez.

GET /_qos/limiter/<limiterName1,limiterName2>
GET /_qos/_ratelimit/<limiterName1,limiterName2>

Limiter yapılandırmalarını silin

Limiter yapılandırmalarını silme komutu sürüme göre değişir.

İşlemler

En son V7.10 sürümü

Diğer sürümler

Belirtilen tek bir limiter yapılandırmasını silin

DELETE /_qos/limiter/<limiterName>
DELETE /_qos/_ratelimit/<limiterName>

Belirtilen birden çok limiter yapılandırmasını silin. Birden çok limiter adını virgülle (,) ayırın. Joker karakterler desteklenmez.

DELETE /_qos/limiter/<limiterName1,limiterName2>
DELETE /_qos/_ratelimit/<limiterName1,limiterName2>

SSS

S: Kısıtlamayla ilgili izleme ölçümlerini nasıl elde ederim?

C: Aşağıdaki API'leri kullanabilirsiniz:

  • Geçerli ölçüm verilerini alın

    • Tüm ölçümler için geçerli verileri alın

      GET /_qos/limiter/nodes/stats
    • Belirli bir düğüm için geçerli ölçüm verilerini alın

      GET /_qos/limiter/nodes/{nodeId}/stats
    • Belirli bir düğüm ve limiter için geçerli ölçüm verilerini alın

      GET /_qos/limiter/nodes/{nodeId}/stats/{limiterIds}
  • Geçmiş ölçüm verilerini alın

    • Tüm ölçümler için geçmiş verileri alın

      GET /_qos/limiter/metric
    • Belirli bir limiter için geçmiş ölçüm verilerini alın

      GET /_qos/limiter/metric/{limiterId}

Eklenti yükseltmeleriyle ilgili notlar

aliyun-qos eklentisini en son sürüme yükseltirken şunlara dikkat edin:

  • Eski ve yeni sürümler arasındaki uygulama mekanizması farklarından dolayı yükseltme süreci sırasında kısıtlama özelliği geçici olarak kullanılamayabilir. Master düğümündeki eklenti yükseltildikten sonra otomatik olarak geri yüklenir.

  • Veri dönüştürme süreci sırasında bazı limiterlar eski biçimden dönüştürülemeyebilir. Dönüştürme başarısız olursa yeniden denemek için aşağıdaki komutu çalıştırın. Komut bir hata döndürürse hasError değeri false olana kadar komutu birkaç kez çalıştırabilirsiniz.

    POST /_qos/limiter/ops/upgrade

    Önceki komut bir hata mesajı döndürürse (örneğin unknown action), bu durum kümede eski bir kısıtlayıcı olmadığını gösterir. Mesajı yok sayabilirsiniz.