Reputation: 2125
When I tried connecting to Elasticsearch using the
curl http://localhost:9200
it is working fine.
But when I run the curl http://IpAddress:9200
it is throwing an error saying
Failed to connect to localhost port 9200: Connection refused
How to resolve this error?
Upvotes: 156
Views: 444674
Reputation: 9935
Just for 2024-Sep update
I install on ubuntu single vm, edit as below
sudo nano /etc/elasticsearch/elasticsearch.yml
network.host: 0.0.0.0
discovery.type: single-node
Upvotes: 0
Reputation: 393
I was facing the same problem on Ubuntu 22.04, but I purged the downloaded elasticsearch directory and then redownloaded so,
First Pipe the output to the gpg --dearmor command so that apt is able to utilise the key to verify downloaded packages
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg
Then, add the Elastic source list to the sources.list.d directory, where apt will search for new sources
echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
Afterwards update package lists and install elasticsearch again
sudo apt update
sudo apt install elasticsearch
When you finish the download, you need to modify main configuration file elasticsearch.yml where most of its configuration options are stored
sudo nano /etc/elasticsearch/elasticsearch.yml
And then navigate to the Netwok section something like
. . .
# ---------------------------------- Network -----------------------------------
#
network.host: Foo.foo.foo
. . .
Elasticsearch listens for traffic from everywhere on port 9200. You will want to restrict outside access to your Elasticsearch instance to prevent outsiders from reading your data or shutting down your Elasticsearch cluster through its [REST API]
So replace the Foo.foo.foo with
. . .
# ---------------------------------- Network -----------------------------------
#
network.host: localhost
. . .
I used localhost so that Elasticsearch listens on all interfaces and bound IPs.
Start elasticsearch and enable it each time the server starts
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch
With all that said you will have to configure the firewall to allow access to the default Elasticsearch HTTP API port (TCP 9200) for the trusted remote host, generally the server you are using in a single-server setup, such as198.51.100.0. To allow access, type the following command:
sudo ufw allow from 198.51.100.0 to any port 9200
sudo ufw enable
Use cURL to test your installation
curl -X GET 'http://localhost:9200'
Response
{
"name" : "elastic-22",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "DEKKt_95QL6HLaqS9OkPdQ",
"version" : {
"number" : "7.17.1",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "e5acb99f822233d62d6444ce45a4543dc1c8059a",
"build_date" : "2022-02-23T22:20:54.153567231Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
This is what worked for me.
Upvotes: 1
Reputation: 330
In my case, the network host was explicitly set to the IP of my server, so it was something like this in opensearch.yml
:
network.host: 127.150.151.0
I had to configure my app to use this IP explicitly. Otherwise, I could also have changed the address in opensearch.yml
.
Upvotes: 0
Reputation: 1814
For Windows user try,
https://localhost:9200/
It worked for me.
Upvotes: 3
Reputation: 102
I ran into a related situation recently. Here's my take on the subject: Accessing Elastic 5.5 in vagrant guest from host through a private network
TL;DR The settings:
network.host: 0.0.0.0
http.port: 9200
work fine. One just needs to wait enough time for ES to complete its initialization procedure, bind to the network iface and start listening on the port.
Now, from within the guest, curl http://localhost:9200
works and from the host, curl http://192.168.54.2:9200
works as well.
Upvotes: 0
Reputation: 37
you have to edit /etc/elasticsearch/elasticsearch.yml by default all configurations will be commented ,add following configuration
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: [0.0.0.0]
then restart the service
Upvotes: 1
Reputation: 151
I experienced this on CentOS 7, and the issue was that /etc/hosts had the following:
127.0.0.1 localhost.localdomain
which I updated to include localhost as follows:
127.0.0.1 localhost localhost.localdomain
after that, no issues.
Upvotes: 0
Reputation: 129
I have run across this problem every time I install or upgrade ES (7.0+). And the solution was ALWAYS just wait for ES to fully start. It takes about a minute for the REST API to be reponsive. No matter what service status says.
service elasticsearch start
*started
*wait for at least a minute
curl now works and returns responses on the port 9200
Upvotes: 1
Reputation: 2781
For those of you installing ELK on virtual machine in GCP (Google Cloud Platform), make sure that you created firewall rule of Ingress
type (i.e. for incoming to VM traffic). You can specify in the rule multiple ports at a time by separating them with comma: 5000,5044,5601,9200,9300,9600
.
In that rule you may want to specify a tag (pick tag's name as you like, for example docker-elk
that will target your VM (Targets column):
On VM's settings page assign that tag to your VM:
After doing that I was able to access Elasticsearch in my browser via port 9200. And I didn't have to edit elasticsearch.yml
file whatsoever.
Upvotes: 1
Reputation: 311
For versions higher than 6.8 (7.x) you need two things.
In the configuration file elasticsearch.yml
(for debian and derivatives -> /etc/elasticsearch/elasticsearch.yml
).
network.host
or network.bind_host
to:...
network.host: 0.0.0.0
...
Or the interface that must be reached
According to elastic.co:
v6.8 -> discovery settings that should set.
by e.g
...
# roughly means the same as 1
discovery.zen.minimum_master_nodes: -1
...
v7.x -> discovery settings that should set.
by one single node
discovery.type: single-node
#OR set discovery.seed_hosts : 127.0.0.1:9200
at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured.
Upvotes: 3
Reputation: 595
In my case, the problem is with java version, i installed open-jdk 11
previously. Thats creating the issue while starting the service. I changed it open-jdk 8
and it started working
Upvotes: 0
Reputation: 28920
I experienced a similar issue.
Here's how I solved it
Run the service command below to start ElasticSearch
sudo service elasticsearch start
OR
sudo systemctl start elasticsearch
If you still get the error
curl: (7) Failed to connect to localhost port 9200: Connection refused
Run the service command below to check the status of ElasticSearch
sudo service elasticsearch status
OR
sudo systemctl status elasticsearch
If you get a response (Active: active (running)) like the one below then you ElasticSearch is active and running
● elasticsearch.service - Elasticsearch Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: enabled) Active: active (running) since Sat 2019-09-21 11:22:21 WAT; 3s ago
You can then test that your Elasticsearch node is running by sending an HTTP request to port 9200 on localhost using the command below:
curl http://localhost:9200
Else, if you get a response a different response, you may have to debug further to fix it, but the running the command below, will help you detect what caveats are holding ElasticSearch service from starting.
sudo service elasticsearch status
OR
sudo systemctl status elasticsearch
If you want to stop the ElasticSearch service, simply run the service command below;
sudo service elasticsearch stop
OR
sudo systemctl stop elasticsearch
N/B: You may have to run the command sudo service elasticsearch status
OR sudo systemctl status elasticsearch
each time you encounter the error, in order to tell the state of the ElasticSearch service.
This also applies for Kibana, run the command sudo service kibana status
OR sudo systemctl status kibana
each time you encounter the error, in order to tell the state of the Kibana service.
That's all.
I hope this helps.
Upvotes: 6
Reputation: 103
If you encounter the Connection refused error, simply run the command below to check the status of ElasticSearch service
sudo service elasticsearch status
This will help you decipher the state of ElasticSearch service and what to do about it.
Upvotes: 1
Reputation: 1488
Edit elasticsearch.yml
and add the following line
http.host: 0.0.0.0
network.host: 0.0.0.0
didn't work for
Upvotes: 14
Reputation: 7489
My problem was I could not work with localhost
I needed to set it to localhost's IP address
network.bind_host: 127.0.0.1
Upvotes: 0
Reputation: 27
Disabling SELinux worked for me, although I don't suggest it - I did that just for a PoC
Upvotes: 0
Reputation: 156
Change the network.bind to 0.0.0.0 and http:port to 9200. The bind address 0.0.0.0 means all IPv4 addresses on the local machine. If a host has two IP addresses, 192.168.1.1 and 10.1.2.1, and a server running on the host listens on 0.0.0.0, it will be reachable at both of those IPs.
Upvotes: 1
Reputation: 1402
Make sure that port 9200
is open for my case it was an amazon instance so when i opened it in my security group the curl command worked.
Upvotes: 0
Reputation: 639
Update your jdk to latest minimum version for your elasticsearch.
Upvotes: 1
Reputation: 33
Just to add on this, I've came across many docs through google that said to set network.host to localhost.
Doing so gave me the infamous connection refused. You must use an IP address (127.0.0.1), not a FQDN.
Jeff
Upvotes: 0
Reputation: 2897
After utilizing some of the answers above, don't forget that after an apt install, a total reboot might be in order.
Upvotes: 0
Reputation: 3118
None of the proposed solutions here worked for me, but what eventually got it working was adding the following to elasticsearch.yml
network:
host: 0.0.0.0
http:
port: 9200
After that, I restarted the service and now I can curl
it from both within the VM and externally. For some odd reason, I had to try a few different variants of a curl
call inside the VM before it worked:
curl localhost:9200
curl http://localhost:9200
curl 127.0.0.1:9200
Note: I'm using Elasticsearch 5.5 on Ubuntu 14.04
Upvotes: 18
Reputation: 875
In my case elasticsearch was started. But still had
curl: (7) Failed to connect to localhost port 9200: Connection refused
The following command was unsuccessful
sudo service elasticsearch restart
In order to make it work, I had to run instead
sudo systemctl restart elasticsearch
Then it went all fine.
Upvotes: 34
Reputation: 3778
My 2 cents,
I just followed the install procedure on Digital Ocean, apparently the package available in the repos is not up to date, I deleted everything and followed the install procedure direct from Elastic Search and everything is working now, basically the out of the box behaviour is on a localhost pointing to 9200. Same thing/issue found with Kibana, the solution for me was too, to remove everything and just follow their procedure, Hope this saves someone two hours (the time I spent figuring out how to setup ELK!)
en
Upvotes: 1
Reputation: 349
Why don't you start with this command-line:
$ sudo service elasticsearch status
I did it and get:
"There is insufficient memory for the Java Runtime..."
Then I edited /etc/elasticsearch/jvm.options
file:
...
################################################################
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
#-Xms2g
#-Xms2g
-Xms512m
-Xmx512m
################################################################
...
This worked like a charm.
Upvotes: 20
Reputation: 1903
Tried everything on this page, and only instructions from here helped.
in /etc/default/elasticsearch
, make sure these are un-commented:
START_DAEMON=true
ES_USER=elasticsearch
ES_GROUP=elasticsearch
LOG_DIR=/var/log/elasticsearch
DATA_DIR=/var/lib/elasticsearch
WORK_DIR=/tmp/elasticsearch
CONF_DIR=/etc/elasticsearch
CONF_FILE=/etc/elasticsearch/elasticsearch.yml
RESTART_ON_UPGRADE=true
make sure /var/lib/elasticsearch
is owned by elasticsearch user:
chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/
Upvotes: 29
Reputation: 331
I had the same problem refusing connections on 9200 port.
Check elasticsearch service status with the command sudo service elasticsearch status
. If it is presenting an error and you read anything related to Java, probably the problem is your jvm memory. You can edit it in /etc/elasticsearch/jvm.options
. For a 1GB RAM memory machine on Amazon environment, I kept my configuration on:
-Xms128m
-Xmx128m
After setting that and restarting elasticsearch service, it worked like a charm. Nmap and UFW (if you use local firewall) checking should also be useful.
Upvotes: 4
Reputation: 1071
For this problem, I had to use :
sudo /usr/share/elasticsearch/bin/elasticsearch start
to be able to get something on ports 9200/9300 (sudo netstat -ntlp) and a response to:
curl -XGET http://localhost:9200
Upvotes: 11
Reputation: 1815
Open your Dockerfile under elasticsearch folder and update "network.host=0.0.0.0" with "network.host=127.0.0.1". Then restart the container. Check your connection with curl.
$ curl http://docker-machine-ip:9200
{
"name" : "vI6Zq_D",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "hhyB_Wa4QwSX6zZd1F894Q",
"version" : {
"number" : "5.2.0",
"build_hash" : "24e05b9",
"build_date" : "2017-01-24T19:52:35.800Z",
"build_snapshot" : false,
"lucene_version" : "6.4.0"
},
"tagline" : "You Know, for Search"
}
Upvotes: 3
Reputation: 11
In this case, first of all you need to check the java version using below command:
java -version
after running this command you get something like this:
java version "1.7.0_51" OpenJDK Runtime Environment (rhel-2.4.5.5.el7-x86_64 u51-b31) OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)
then use this command:
update-alternatives --config java
and select the below version
*+ 1 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64/jre/bin/java 2 /usr/java/jdk1.8.0_73/jre/bin/java
Enter to keep the current selection[+], or type selection number: 2
curl -XGET http://127.0.0.1:9200
Upvotes: 1