Todos os produtos
Search
Central de documentação

Elasticsearch:Use o plug-in de limitação de cluster (aliyun-qos)

Última atualização: Jun 27, 2026

O plug-in aliyun-qos é um recurso de limitação de leitura e gravação no nível do cluster desenvolvido pela equipe do Alibaba Cloud Elasticsearch. Quando os serviços upstream não conseguem controlar o tráfego, utilize o plug-in aliyun-qos para limitar índices específicos com base na prioridade do negócio. Essa abordagem mantém o tráfego sob controle e garante a estabilidade do seu cluster Elasticsearch.

Precauções

  • O plug-in aliyun-qos vem pré-instalado e não pode ser desinstalado. Seu recurso de limitação fica desativado por padrão. O objetivo do plug-in é proteger a estabilidade do cluster, e não medir com precisão o tráfego de leitura e gravação.

  • Versão do plug-in: antes de usar o plug-in aliyun-qos, certifique-se de que ele esteja atualizado para a versão mais recente. Faça login no console Kibana e execute GET /_cat/plugins?v para verificar a versão do plug-in.

    A versão do plug-in segue o formato <versão do cluster>_ali<número da versão interna>, por exemplo, 7.10.0_ali1.6.0.2 ou 8.17.0_ali2.2.0.4.1. Caso a versão do plug-in não seja a mais recente, consulte os métodos abaixo para atualizá-lo:

    • Para clusters V7.10: no console, atualize o kernel para a versão 1.6.0. Para obter mais informações, consulte Atualizar versões do cluster.

    • Para outras versões de cluster: abra um ticket junto ao Suporte do Alibaba Cloud para atualizar o plug-in. Após a atualização, reinicie manualmente o cluster Elasticsearch para que a nova versão entre em vigor.

    • Se a versão do plug-in for anterior à rc4, ocorrerá um erro unsupported_operation_exception. A atualização do plug-in aliyun-qos só é possível em clusters executando a versão V6.7.0 ou superior. Clusters com versões anteriores devem ser atualizados primeiro para V6.7.0 ou superior.

Avaliar limiares

O plug-in aliyun-qos realiza a limitação no nível do cluster. Para minimizar a sobrecarga de desempenho, ele não mede com precisão o tráfego de leitura e gravação em todos os nós; portanto, o tráfego real pode diferir do tráfego medido. Antes de utilizar o plug-in, avalie o limiar de limitação seguindo as regras abaixo:

  • Solicitações de consulta

    Limiar de limitação para solicitações de consulta = QPS (consultas por segundo) de ponta a ponta do cliente para o Elasticsearch

    O QPS de ponta a ponta refere-se apenas ao número de solicitações de consulta que chegam aos nós de cliente por segundo.

  • Solicitações de gravação

    A regra para calcular o limiar de limitação de solicitações de gravação é semelhante à das solicitações de consulta, mas exige ajuste conforme o número de shards de réplica.

    Por exemplo, considere um cluster com dois nós de dados e um índice. Esse índice possui um shard primário e um shard de réplica. Cada operação de gravação envia 10 MB de dados. Como existe um shard de réplica, 10 MB de dados são gravados em cada nó de dados. Além disso, tarefas internas do X-Pack, como Monitor, Audit e Watcher, também consomem throughput de gravação. Reserve capacidade para esse tráfego ao definir o limiar.

Ativar a limitação

O recurso de limitação do plug-in aliyun-qos vem desativado por padrão. É necessário ativá-lo antes do uso. O comando para ativar o recurso varia conforme a versão do plug-in.

Versão V7.10 mais recente

Outras versões

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

Desativar a limitação

Desative o recurso de limitação definindo o parâmetro limiter como false ou null. O comando varia conforme a versão.

Método

Versão V7.10 mais recente

Outras versões

Definir o parâmetro limiter como false

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

Definir o parâmetro limiter como null

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

Configurar um limitador (versão V7.10 mais recente)

As configurações de limitador a seguir aplicam-se exclusivamente ao plug-in aliyun-qos para clusters V7.10.

Uma configuração de limitador consiste em duas partes: limiters e tags. A seção tags define o escopo dos limites de recursos, enquanto a seção limiters especifica o tipo de limitação e o limiar. Os limitadores podem ser padrão ou específicos. Crie um limitador padrão definindo um valor de tag como **. Por exemplo, defina um throughput padrão para cada shard ou um QPS padrão para cada aplicação. Quando uma solicitação excede um limite, o Elasticsearch rejeita as solicitações subsequentes.

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

Parâmetro

Descrição

Valor

action

A ação a ser limitada. Utilizada para restringir diferentes tipos de solicitações.

  • write: solicitações de gravação de documentos, incluindo operações index e create.

  • update: solicitações de atualização de documentos.

  • delete: solicitações de exclusão de documentos.

  • search: solicitações de consulta.

  • search_shards: solicitações para consultar o número total de shards de um índice.

limiter_type

O tipo de limitação. Três categorias são suportadas: taxa, concorrência e limites por solicitação.

  • rate: limite de taxa. Aceita apenas números inteiros.

  • qps: taxa de consultas. Aceita apenas números inteiros.

  • tps: taxa de gravação. Aceita apenas números inteiros.

  • throughput: throughput de dados. Suportado apenas para ações write, update e delete. As unidades incluem GB, MB e KB. O valor máximo é 2 GB.

  • thread_count: limita o número de solicitações simultâneas.

  • concurrent_count: concorrência de solicitações, calculada com base nas operações específicas de uma solicitação. Por exemplo, search_shards.concurrent_count:20 permite no máximo 20 consultas simultâneas a shards.

  • max_per_request: número máximo de operações de determinado tipo dentro de uma única solicitação. Por exemplo, update.max_per_request:10 permite no máximo 10 operações de atualização em uma única solicitação Bulk.

  • max_size_per_request: tamanho máximo de uma única solicitação. Suportado apenas para ações write, update e delete.

threshold

O limiar de limitação.

Um número inteiro maior ou igual a -1.

Alguns tipos aceitam strings com unidades. Para mais detalhes, consulte a descrição de limiter_type.

tagName

O nome da tag.

  • node: nome do nó atual.

  • is_master: indica se o nó atual é um nó mestre. O valor correspondente da tag é true ou false.

  • index: nome do índice. Para múltiplos índices, use um array. Se um alias for fornecido, ele será resolvido para o nome real do índice. Esta tag está disponível apenas para subclasses de IndicesRequest.

  • shard: nome do shard, no formato index[id], por exemplo, test[0]. Esta tag está disponível apenas para subclasses de ReplicationRequest.

  • index_in_url: string do índice extraída da URL. Se um alias for fornecido, esta tag preserva o alias. Disponível apenas para subclasses de IndicesRequest.

tagValue

O valor da tag.

Uma string ou um array de strings. Ao usar um array, a tag corresponde a qualquer valor contido nele. São suportadas correspondência exata, correspondência por prefixo com curinga e todos os valores. Exemplos:

  • Correspondência exata: "abc"

  • Correspondência por prefixo: "ab*"

  • Todos os valores: "**"

    O uso de um valor curinga define um limitador padrão, o que significa que um limitador específico é gerado para qualquer valor dessa tag. Por exemplo, ao especificar index:"**",search.tps:1, a taxa de pesquisa de cada índice é limitada a 1 por padrão, em vez de limitar a taxa total de pesquisa a 1.

priority

A prioridade do limitador.

Um número inteiro. Valor padrão: 0.

Um valor maior indica maior prioridade. Quando uma solicitação corresponde a vários limitadores padrão, apenas aquele com a maior prioridade entra em vigor.

params

Parâmetros avançados.

watchMode: especifica se o modo de observação deve ser ativado. Valores válidos: true e false (padrão). Quando definido como true, o Elasticsearch registra as contagens de solicitações rejeitadas nas métricas, mas não aplica os limites. Isso permite visualizar o efeito de uma regra antes de aplicá-la, evitando configurações incorretas. Para mais informações sobre as APIs, consulte a seção de perguntas frequentes.

Exemplos de configuração de limitador

Definir limitação de QPS para consultas

Limite o QPS de consultas em um nó de cliente definindo um limiar para um índice. Quando o número de solicitações de consulta por segundo ultrapassa o limiar, o Elasticsearch rejeita as solicitações subsequentes.

Os valores para index e index_patterns podem ser nomes completos de índices ou nomes com curinga. O comando varia conforme a versão.

Ações

Versão V7.10 mais recente

Outras versões

Definir limitação de QPS de consulta para um único índice

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
}

Definir limitação de QPS de consulta para índices com um prefixo de nome específico

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
}

Definir limitação de QPS de consulta individualmente para cada índice

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

index: representa qualquer índice. Por exemplo, se um cluster tiver três índices A, B e C, o valor de limitação para todos os três índices será 1000.

Não suportado.

Definir um limite total de QPS de consulta para todos os índices

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

index:* indica qualquer índice. Por exemplo, se um cluster possuir três índices chamados A, B e C, o valor total de limitação para esses três índices será 1000. Isso produz o mesmo efeito de não definir esta tag.

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

É possível definir várias regras. A limitação é acionada se uma solicitação corresponder a qualquer uma das regras.

Quando o QPS de consulta excede o limite configurado, o sistema retorna uma mensagem de erro. A mensagem varia conforme a versão:

  • Versão V7.10 mais recente

    {
      "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
    }
  • Outras versões

    {
      "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
    }

Definir limitação de TPS para gravações

Restrinja o número de solicitações de gravação por segundo recebidas por um nó de cliente definindo um limiar de TPS (transações por segundo). Quando o volume de solicitações de gravação por segundo supera o limiar, o Elasticsearch rejeita as solicitações seguintes.

Os valores para index e index_patterns podem ser nomes completos de índices ou nomes com curinga. O comando varia conforme a versão.

Versão V7.10 mais recente

Outras versões

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

Não suportado

Definir limitação de throughput para solicitações Bulk

Controle o throughput de gravação para solicitações da API Bulk em um nó de cliente estabelecendo um limite em bytes por segundo. Se o throughput de gravação ultrapassar esse limite, o Elasticsearch rejeitará as solicitações subsequentes.

Os valores para index e index_patterns podem ser nomes completos de índices ou nomes com curinga. O comando varia conforme a versão.

Versão V7.10 mais recente

Outras versões

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
}

Várias regras podem ser definidas. A limitação ocorre caso uma solicitação corresponda a qualquer regra configurada.

Definir limitação de tamanho de solicitação para requisições Bulk

Estabeleça um limite para o tamanho de uma única solicitação da API Bulk em um nó de cliente. Caso uma solicitação exceda esse limite de tamanho, o Elasticsearch a rejeitará.

Os valores para index e index_patterns podem ser nomes completos de índices ou nomes com curinga. O comando varia conforme a versão.

Versão V7.10 mais recente

Outras versões

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
}

Múltiplas regras são permitidas. O sistema aciona a limitação se uma solicitação atender a qualquer uma delas.

Se o tamanho de uma única solicitação de gravação superar o limite configurado, o sistema retornará uma mensagem de erro. Essa mensagem difere entre as versões:

  • Versão V7.10 mais recente

    {
      "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
    }
  • Outras versões

    {
      "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
    }

Definir limitação de concorrência para consultas a shards

Reduza a carga no cluster definindo o número de consultas simultâneas a shards. Os valores para index e index_patterns podem ser nomes completos de índices ou nomes com curinga. O comando varia conforme a versão.

Versão V7.10 mais recente

Outras versões

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

Não suportado

É permitido definir diversas regras. A limitação é disparada sempre que uma solicitação corresponder a qualquer regra.

Definir múltiplas configurações de limitador

Combine vários limites dentro de uma única configuração de limitador. Os valores para index e index_patterns aceitam nomes completos de índices ou padrões com curinga. O comando depende da versão utilizada.

Versão V7.10 mais recente

Outras versões

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-*"
  }
}

Não suportado

Diversas regras podem ser criadas. O sistema aplica a limitação assim que uma solicitação coincidir com qualquer uma das regras.

Obter configurações de limitador

O comando para obter configurações de limitador varia conforme a versão.

Ações

Versão V7.10 mais recente

Outras versões

Obter todas as configurações de limitador

GET /_qos/limiter
GET /_qos/_ratelimit

Obter uma única configuração de limitador especificada

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

Obter múltiplas configurações de limitador especificadas. Separe os nomes dos limitadores com vírgulas (,). Curingas não são suportados.

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

Excluir configurações de limitador

O comando para excluir configurações de limitador varia conforme a versão.

Ações

Versão V7.10 mais recente

Outras versões

Excluir uma única configuração de limitador especificada

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

Excluir múltiplas configurações de limitador especificadas. Separe os nomes dos limitadores com vírgulas (,). Curingas não são suportados.

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

Perguntas frequentes

P: Como obtenho métricas de monitoramento relacionadas à limitação?

R: Utilize as seguintes APIs:

  • Obter dados atuais de métricas

    • Obter dados atuais de todas as métricas

      GET /_qos/limiter/nodes/stats
    • Obter dados atuais de métricas para um nó específico

      GET /_qos/limiter/nodes/{nodeId}/stats
    • Obter dados atuais de métricas para um nó e limitador específicos

      GET /_qos/limiter/nodes/{nodeId}/stats/{limiterIds}
  • Obter dados históricos de métricas

    • Obter dados históricos de todas as métricas

      GET /_qos/limiter/metric
    • Obter dados históricos de métricas para um limitador específico

      GET /_qos/limiter/metric/{limiterId}

Observações sobre atualizações do plug-in

Ao atualizar o plug-in aliyun-qos para a versão mais recente, observe os pontos abaixo:

  • Devido às diferenças no mecanismo de implementação entre versões antigas e novas, o recurso de limitação pode ficar temporariamente indisponível durante o processo de atualização. Ele é restaurado automaticamente após a atualização do plug-in no nó mestre.

  • Durante o processo de conversão de dados, alguns limitadores podem falhar na conversão do formato antigo. Em caso de falha, execute o comando abaixo para tentar novamente. Se o comando retornar um erro, execute-o várias vezes até que hasError seja false.

    POST /_qos/limiter/ops/upgrade

    Caso o comando acima retorne uma mensagem de erro (como unknown action), isso indica que o cluster não possui um limitador legado. Ignore a mensagem.