Como habilito o acesso / solicitação remota no Elasticsearch 2.0?

94

A partir da v2.0, o Elasticsearch está escutando apenas no localhost por padrão, mas gostaria de fazer uma solicitação fora do localhost.

Por exemplo, uma solicitação como esta é permitida:

http://localhost:9200/

Mas isso não é:

http://server_name:9200/ (de fora do servidor, por exemplo: um computador local na mesma LAN).

Obrigado pela ajuda.

Abraham Duran
fonte
6
Esta é a resposta que você está procurando: stackoverflow.com/questions/33412549/…
Val
Obrigado! Era exatamente o que eu procurava!
Abraham Duran

Respostas:

151

em config/elasticsearch.ymlput

network.host: 0.0.0.0
arsent
fonte
3
network.host: 0.0.0.0 permite que todas as redes locais acessem este nó. Isso não é recomendado para o modo de produção, eu acho.
Isengo
1
isso significa que todos os endereços IP são permitidos. Não é seguro!
Yavuz
1
O arquivo no meu sistema CentOS foi encontrado em /etc/elasticsearch/elasticsearch.ymle conteúdo:network.host: ["0.0.0.0"]
AlikElzin-kilaka
não funciona para mim. ES ainda está funcionando em 127.0.0.1T_T
E.Big
Para aqueles que não conseguem localizar o arquivo de configuração no Windows, verifique a C:\ProgramData\Elastic\Elasticsearch\configlocalização. Se você deseja se conectar programaticamente ao Elasticsearch, pode ser necessário definir transport.host: 0.0.0.0no elasticsearch.ymlarquivo.
kojot
52

Por padrão, o transporte http e o transporte elasticsearch interno ouvem apenas localhost. Se você deseja acessar o Elasticsearch de um host diferente do localhost, tente adicionar as seguintes configurações em config / elasticsearch.yml .

transport.host: localhost 
transport.tcp.port: 9300 
http.port: 9200
network.host: 0.0.0.0

Aqui, network.host como 0.0.0.0 permite o acesso de qualquer host na rede.

Ajit K'sagar
fonte
2
Tive que definir explicitamente todos esses valores para poder se conectar a partir da máquina host VirtualBox, ir como convidado com elástico. Muito obrigado!
Tom
Testado no Elasticsearch 7.1.0 - as soluções funcionam bem conectando-se ao ES no VirtualBox.
DB Prasad
A configuração fornecida acima também está funcionando com a versão de pesquisa elástica 7.2.0 :-)
dinu0101 01 de
2
Quase todo mês venho aqui para copiar esta configuração: D
Neelesh
obrigado, isso me ajudou muito. Eu estava lutando com um problema de exceção de conexão; e finalmente consegui funcionar depois de adicionar essas linhas ao elasticsearch.ymlarquivo
Spencer Trinh
19

Renomeie o arquivo elasticsearch.yml para elasticsearch.json dentro da pasta de configuração e adicione:

{
    "network" : {
        "host" : "10.0.0.4"
    }
}

Outra opção é fornecer as configurações externamente usando o ES_JAVA_OPTS ou como parâmetros para o comando elasticsearch, por exemplo:

$ elasticsearch -Des.network.host=10.0.0.4

Outra opção é definir es.default. prefixo em vez de es. prefix, o que significa que a configuração padrão será usada apenas se não for definida explicitamente no arquivo de configuração.

Outra opção é usar a ${...}notação dentro do arquivo de configuração que resolverá para uma configuração de ambiente, por exemplo:

{
    "network" : {
        "host" : "${ES_NET_HOST}"
    }
}

A localização do arquivo de configuração pode ser definida externamente usando uma propriedade do sistema:

$ elasticsearch -Des.config=/path/to/config/file

Para obter mais informações, verifique https://www.elastic.co/guide/en/elasticsearch/reference/1.4/setup-configuration.html

Deepika Chalpe
fonte
Obtido: Exceção no segmento "principal" BindTransportException [Falha ao vincular a [9300-9400]]; aninhado: ChannelException [Falha ao vincular a: /10.0.0.4:9400]
mountrix
2
Como isso pode ser feito, quero dizer, não podemos simplesmente renomear elasticsearch.ymlpara elasticsearch.jsonporque o primeiro, hmmm, YAML e o segundo é JSON??
Shubham A.
9

Como @arsent mencionou, adicione esse endereço IP ao arquivo de configuração:

sudo nano /etc/elasticsearch/elasticsearch.yml

Jay também adicionou um ponto importante - se você estiver usando um firewall, lembre-se de adicionar uma regra que permite o tráfego para aquela porta.

Se você deseja permitir que um servidor mestre acesse o ES por http, adicione uma regra que permita o acesso apenas a esse endereço específico. Por exemplo, digamos que você esteja usando ufw, execute este comando para adicionar sua porta:

sudo ufw allow from xxx.xxx.xxx.xxx to any port zzzz

Substitua xxx.xxx.xxx.xxx pelo endereço IP do servidor mestre e zzzz pela porta que você configurou config/elasticsearch.yml

Recomenda-se usar uma porta personalizada e não manter o padrão 9200

Para testá-lo, use SSH em seu servidor mestre e execute ping no ip do ES com a porta correta para ver se obtém uma resposta:

curl -X GET 'http://xxx.xxx.xxx.xxx:zzzz'

Você também pode verificar se o ES está inacessível de outros IPs experimentando com seu navegador.

um excelente artigo que mostra como configurar o ES no Ubuntu no DigitalOcean

Ben
fonte
7

Na máquina remota onde o elasticsearch está instalado, basta adicionar as duas configurações abaixo em /etc/elasticsearch/elasticsearch.yml

network.host: xx.xx.xx.xx #remote elastic machine's internal IP
discovery.type: single-node

Testado em elasticsearch 6.8.3 e AWS EC2 Linux AMI como máquina remota

Animesh
fonte
5

Em /etc/elasticsearch/elasticsearch.yml:

network.host: 0.0.0.0
network.bind_host: 0.0.0.0
network.publish_host: 0.0.0.0
Ngô Thành Phát
fonte
2

Substitua localhost por 0.0.0.0 em dois lugares.

  1. Goto /etc/elasticsearch/elasticsearch.yml. Procure o valor em network.host e altere-o para 0.0.0.0

  2. Esta é a etapa se você estiver usando Kibana. Goto /etc/kibana/kibana.yml. Procure o valor em server.host e altere-o para 0.0.0.0

Agora você acessa o acesso remotamente com endereço IP e host.

Bikram
fonte
É importante adicionar os seguintes comandos: ufw allow 9200 e ufw allow 5601
José T.
1

Em config/elasticsearch.yml, coloque network.host: 0.0.0.0como @arsent disse. E também adicione Regra de entrada no firewall para sua porta ElasticSearch (9200 ByDefault).

Funcionou no ElasticSearch versão 2.3.0

Jay Shah
fonte
0

Além da configuração network.host : 0.0.0.0

pode ser necessário definir os seguintes parâmetros

node.name: elasticsearch-node-1

cluster.initial_master_nodes: ["elasticsearch-node-1"]

Todas as configurações vão em elasticsearch/elasticsearch.yml

RootUser
fonte
0

Para ElasticSearch 7.8 e superior

Verifique se você está em um único nó. adicione a seguinte linha

cluster.initial_master_nodes: node-1

Para acessar o servidor Elasticsearch de outro computador ou aplicativo, faça as seguintes alterações no nó C:\ProgramData\Elastic\Elasticsearch\config\elasticsearch.yml file:

Adicionar as seguintes linhas

network.host: ["0.0.0.0", 127.0.0.1", "[::1]"]
network.bind_host: 0.0.0.0
network.publish_host: 0.0.0.0
http.host: 0.0.0.0

Algum tempo você pode precisar Habilitar CORS

http.cors.enabled : true
http.cors.allow-origin : "*"
http.cors.allow-methods : OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers : X-Requested-With,X-Auth-Token,Content-Type, Content-Length

Aqui está meu arquivo yml completo

bootstrap.memory_lock: false
cluster.name: elasticsearch
http.port: 9200
node.data: true
node.ingest: true
node.master: true
node.max_local_storage_nodes: 1
cluster.initial_master_nodes: node-1
node.name: ITDEV
path.data: C:\ProgramData\Elastic\Elasticsearch\data
path.logs: C:\ProgramData\Elastic\Elasticsearch\logs
transport.tcp.port: 9300
xpack.license.self_generated.type: basic
xpack.security.enabled: false
network.host: ["0.0.0.0", 127.0.0.1", "[::1]"]
network.bind_host: 0.0.0.0
network.publish_host: 0.0.0.0
http.host: 0.0.0.0
http.cors.enabled : true
http.cors.allow-origin : "*"
http.cors.allow-methods : OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers : X-Requested-With,X-Auth-Token,Content-Type, Content-Length
Kaleem Ullah
fonte