Syntax to specify multiple hosts using ELASTICSEARCH_HOSTS env?

follow-up to: Kibana docker list multiple ES hosts

I have tried various values for this environment variable:

http://elasticsearch-1:9200,http://elasticsearch-2:9200,http://elasticsearch-3/9200

http://elasticsearch-1:9200 http://elasticsearch-2:9200 http://elasticsearch-3/9200

(http://elasticsearch-1:9200,http://elasticsearch-2:9200,http://elasticsearch-3/9200)

(http://elasticsearch-1:9200 http://elasticsearch-2:9200 http://elasticsearch-3/9200)

[http://elasticsearch-1:9200,http://elasticsearch-2:9200,http://elasticsearch-3/9200]

[http://elasticsearch-1:9200 http://elasticsearch-2:9200 http://elasticsearch-3/9200]

["http://elasticsearch-1:9200","http://elasticsearch-2:9200","http://elasticsearch-3:9200"]

- http://elasticsearch-1:9200 - http://elasticsearch-2:9200 - http://elasticsearch-3/9200

- http://elasticsearch-1:9200\n - http://elasticsearch-2:9200\n - http://elasticsearch-3/9200

All without success. Please, can you let us know?

Near as I can tell the correct separator is a space as it gives us this error:

FATAL  Error: "elasticsearch.hosts" setting was not applied. Check for spelling errors and ensure that expected plugins are installed.

instead of:

FATAL  ValidationError: child "elasticsearch" fails because [child "hosts" fails because [single value of "hosts" fails because ["hosts" must be a valid uri with a scheme matching the http|https pattern]]]

but still the mystery of the correct way to specify this to kibana (6.6.0) eludes me.

@Aaron_Caldwell in the other topic you suggested:

That syntax looks fine for kibana.yml but how do we express that as an environment variable? Adding an example to the actual documentation would be REALLY helpful.

2 Likes

@Supermathie have you tried ELASTICSEARCH_HOSTS='["http://....","http://..."]' ?

1 Like

That doesn't work either:

kibana             |  FATAL  ValidationError: child "elasticsearch" fails because [child "hosts" fails because [single value of "hosts" fails because ["hosts" must be a valid uri with a scheme matching the http|https pattern]]]

@Supermathie can you please be sure that you are not mistype any part of it?
I was able to find two different places where people states that it worked as expected.


Was support for this added in Kibana version 7? As specified in the OP I'm on 6.6.0.

@Supermathie I miss that part. I was confirming to the code and it looks like for our released docker artifacts it would only work starting on 6.6.1. Can you try with that version please?

Hi!

i was looking for the same information some weeks ago. Find what works for the docker image of Kibana 6.8.6 OSS (I haven't tried the rest)

Docker compose syntax below:

    kibana:
      image: docker.elastic.co/kibana/kibana-oss:6.8.6
      environment:
        - ELASTICSEARCH_USERNAME=kibanaserver
        - ELASTICSEARCH_PASSWORD=kibanaserver
        - ELASTICSEARCH_HOSTS=["https://elasticsearch1:9200","https://elasticsearch2:9100"]
        - ELASTICSEARCH_SSL_VERIFICATIONMODE=none
      ports:
        - 5602:5601

Pay attention just to the variable ELASTICSEARCH_HOSTS. I pasted all the section to add some context.

The way the env variables are used inside the container is the following:

/usr/share/kibana/bin/../node/bin/node --no-warnings --max-http-header-size=65536 /usr/share/kibana/bin/../src/cli --cpu.cgroup.path.override=/ --cpuacct.cgroup.path.override=/ --elasticsearch.hosts=["https://elasticsearch1:9200","https://elasticsearch2:9100"] --elasticsearch.password=kibanaserver --elasticsearch.ssl.verificationMode=none --elasticsearch.username=kibanaserver

I hope it helps!

1 Like

Using docker.elastic.co/kibana/kibana:6.6.1 all of these variants fail:

      - ELASTICSEARCH_HOSTS='http://elasticsearch-1:9200,http://elasticsearch-2:9200,http://elasticsearch-3:9200'
      - ELASTICSEARCH_HOSTS='[http://elasticsearch-1:9200,http://elasticsearch-2:9200,http://elasticsearch-3:9200]'
      - ELASTICSEARCH_HOSTS='["http://elasticsearch-1:9200","http://elasticsearch-2:9200","http://elasticsearch-3:9200"]'

After some more digging I realized this value works (even on 6.6.0):

["http://elasticsearch-1:9200","http://elasticsearch-2:9200","http://elasticsearch-3:9200"]

which (due to escaping rules) must be specified on the command line as:

ELASTICSEARCH_HOSTS='["http://elasticsearch-1:9200","http://elasticsearch-2:9200","http://elasticsearch-3:9200"]'

or in docker-compose.yml as:

ELASTICSEARCH_HOSTS=["http://elasticsearch-1:9200","http://elasticsearch-2:9200","http://elasticsearch-3:9200"]

I had been specifying it using the former in docker-compose.yml which won't work since the appropriate quoting for that would be:

      - 'ELASTICSEARCH_HOSTS=["http://elasticsearch-1:9200","http://elasticsearch-2:9200","http://elasticsearch-3:9200"]'