Kibana和Elasticsearch允許外網訪問
ElasticSearch(下文簡稱ES)是一個基於Lucene的搜尋伺服器,它提供了一個分散式多使用者能力的全文搜尋引擎。Kibana則是一款開源的分析與視覺化平臺,可以用來與ES進行互動,通過視覺化介面來檢視和操作ES中的資料。預設情況下這兩個軟體只允許通過本機localhost訪問。本文分享如何通過設定使得這兩者可以被同一網路中的其他機器訪問。
我們先看一下在使用預設設定時,當我們嘗試通過IP地址去訪問ES的服務(在9200埠)時,會得到如下結果
$ curl 10.0.0.141:9200
curl: (7) Failed to connect to 10.0.0.141 port 9200: Connection refused
從提示結果可以看到,ES服務拒絕了我們的訪問,這是因為ES服務預設監聽的主機是localhost,如果希望通過IP進行訪問,需要設定其監聽0.0.0.0
。這個地址表示的是所有未知的主機和目的網路的集合。對於Kibana也是一樣的道理,因此以下只闡述ES的配置方法
具體來說,分為兩步走,首先要找到ES的配置檔案,在不同的系統中配置檔案存放的路徑也不同。對於Mac系統來說,如果是通過brew
安裝的ES,那麼可以通過以下命令來檢視配置檔案的位置
$ brew info elasticsearch
elasticsearch: stable 6.2.3, HEAD
Distributed search & analytics engine
https://www.elastic.co/products/elasticsearch
/usr/local/Cellar/elasticsearch/5.6 .3 (217 files, 124MB) *
Built from source on 2017-11-07 at 16:32:00
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/elasticsearch.rb
==> Requirements
Required: java = 1.8 ✔
==> Options
--HEAD
Install HEAD version
==> Caveats
Data: /usr/local/var/lib/elasticsearch/elasticsearch_gao-yimei/
Logs: /usr/local/var/log/elasticsearch/elasticsearch_gao-yimei.log
Plugins: /usr/local/var/elasticsearch/plugins/
Config: /usr/local/etc/elasticsearch/
To have launchd start elasticsearch now and restart at login:
brew services start elasticsearch
Or, if you don't want/need a background service you can just run:
elasticsearch
結果中的Config
標識了配置檔案所在的目錄。進入該目錄,可以看到一個名為elasticsearch.yml
的配置檔案,通過less
命令檢視並搜尋host
可以找到一個network.host
的配置引數,我們只需要將該引數前的#
號去掉,並將該值設定為0.0.0.0
並儲存即可。注意第一個0
與引數名之間需要有一個空格,這是配置檔案的格式要求
修改完成後,還需要一步,那就是重新啟動ES伺服器,對於Mac使用者,可以通過以下命令重啟服務:
$ brew services restart elasticsearch
Stopping `elasticsearch`... (might take a while)
==> Successfully stopped `elasticsearch` (label: homebrew.mxcl.elasticsearch)
==> Successfully started `elasticsearch` (label: homebrew.mxcl.elasticsearch)
等待兩三分鐘後,服務即可穩定,此時再通過IP訪問ES服務,就可以正常使用
值得注意的是,當我們這樣設定以後,同一網路中的所有裝置都能隨意地訪問到本機的ES服務,包括所有儲存在ES中的資料,這是一個比較危險的操作,因此請謹慎使用。另外,對於其他很多不同的軟體,也存在這種預設情況下不允許通過IP訪問的問題,設定的方式和ES大同小異,可以參考上述的操作流程。