A previous version of this article was written by Toli.
介紹
Elasticsearch 是一個用於分佈式搜索和實時數據分析的平台。由於其易用性、強大的功能和可擴展性,它是一個受歡迎的選擇。
本文將指導您安裝Elasticsearch,為您的用例配置它,保護您的安裝,並開始使用您的Elasticsearch服務器。
先決條件
在遵循本教程之前,您將需要:
- 一個配備2GB RAM和2個CPU的Ubuntu 22.04服務器,並設置一個非root sudo用戶。您可以通過遵循使用Ubuntu 22.04進行初始服務器設置
本教程將使用運行Elasticsearch所需的最小CPU和RAM量。請注意,您的Elasticsearch服務器所需的CPU、RAM和存儲量取決於您預期的日誌量。
步驟1 — 安裝和配置Elasticsearch
在Ubuntu的預設套件庫中並沒有Elasticsearch組件。但是,您可以在添加Elastic的套件源清單後,使用APT進行安裝。
所有的套件都使用Elasticsearch簽名密鑰進行簽名,以保護您的系統免受套件欺騙。使用該密鑰驗證的套件將被您的套件管理器視為受信任的。在此步驟中,您將導入Elasticsearch的公共GPG密鑰並添加Elastic套件源清單,以安裝Elasticsearch。
首先,使用cURL,這是一個用於通過URL傳輸數據的命令行工具,將Elasticsearch的公共GPG密鑰導入APT。請注意,我們使用參數-fsSL來消除所有進度和可能的錯誤(除了服務器故障),並允許cURL在重定向後對新位置進行請求。將輸出通過管道傳輸到gpg --dearmor
命令,該命令將密鑰轉換為apt可以用來驗證下載套件的格式。
接下來,將Elastic套件源添加到sources.list.d
目錄中,其中apt
將搜索新的源:
文件中的[signed-by=/usr/share/keyrings/elastic.gpg]
部分指示apt使用您下載的密鑰來驗證Elasticsearch套件的存儲庫和文件信息。
接下來,更新您的軟件包列表,以便APT將讀取新的Elastic源:
然後使用以下命令安裝Elasticsearch:
當提示確認安裝時,請按Y
。如果提示您重新啟動任何服務,請按ENTER
接受默認並繼續。Elasticsearch現在已安裝並準備進行配置。
步驟2 — 配置Elasticsearch
為了配置Elasticsearch,我們將編輯其主配置文件elasticsearch.yml
,其中存儲了大部分的配置選項。此文件位於/etc/elasticsearch
目錄中。
使用您偏好的文本編輯器編輯Elasticsearch的配置文件。這裡,我們將使用nano
:
注意: Elasticsearch的配置文件是YAML格式,這意味著我們需要保持縮排格式。在編輯此文件時,請確保不要添加任何額外的空格。
elasticsearch.yml
文件提供了集群、節點、路徑、記憶體、網絡、發現和閘道器的配置選項。這些選項中大多數已在文件中預配置,但您可以根據需要更改它們。對於我們單台服務器配置的演示目的,我們只會調整網絡主機的設置。
Elasticsearch 在端口 9200
上监听来自任何地方的流量。您会希望限制外部访问您的 Elasticsearch 实例,以防止外部人员通过其 [REST API] (https://en.wikipedia.org/wiki/Representational_state_transfer) 读取您的数据或关闭您的 Elasticsearch 集群。为了限制访问并因此提高安全性,请找到指定 network.host
的行,取消注释,并将其值替换为 localhost
,使其如下所示:
. . .
# ---------------------------------- 网络 -----------------------------------
#
# 将绑定地址设置为特定 IP(IPv4 或 IPv6):
#
network.host: localhost
. . .
我们已指定 localhost
,以便 Elasticsearch 在所有接口和绑定的 IP 上监听。如果您只想它在特定接口上监听,可以在 localhost
的位置指定其 IP。保存并关闭 elasticsearch.yml
。如果您使用 nano
,可以按 CTRL+X
,然后按 Y
,最后按 ENTER
。
这些是您可以开始使用 Elasticsearch 的最低设置。现在您可以第一次启动 Elasticsearch。
使用 systemctl
启动 Elasticsearch 服务。给 Elasticsearch 一些时间来启动。否则,您可能会收到关于无法连接的错误。
接下来,运行以下命令以在每次服务器启动时启用 Elasticsearch 启动:
启用了 Elasticsearch 的自动启动后,让我们继续下一步,讨论安全性。
步驟 3 — 保護 Elasticsearch
默認情況下,任何可以訪問 HTTP API 的人都可以控制 Elasticsearch。這並不總是一個安全風險,因為 Elasticsearch 僅在回環介面(即 127.0.0.1
)上聽取,這只能在本地訪問。因此,無法進行公共訪問,只要所有伺服器用戶都是受信任的,安全性可能不是一個主要關注點。
如果您需要允許對 HTTP API 的遠程訪問,可以使用 Ubuntu 的默認防火牆 UFW 限制網絡曝光。如果您按照先決條件 使用 Ubuntu 22.04 的初始伺服器設置 教程中的步驟進行了操作,則此防火牆應已啟用。
我們現在將配置防火牆,以允許對受信任的遠程主機(通常是您在單伺服器設置中使用的伺服器,例如198.51.100.0
)的默認 Elasticsearch HTTP API 端口(TCP 9200)的訪問。要允許訪問,請輸入以下命令:
完成後,您可以使用以下命令啟用 UFW:
最後,使用以下命令檢查 UFW 的狀態:
如果您已正確指定規則,應該會收到以下類似的輸出:
OutputStatus: active
To Action From
-- ------ ----
9200 ALLOW 198.51.100.0
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
現在,UFW 應該已啟用並設置以保護 Elasticsearch 的端口 9200。
如果您想要投資於額外的保護,Elasticsearch提供了商業版Shield插件供購買。
到目前為止,Elasticsearch應該正在端口9200上運行。您可以使用cURL和GET請求來進行測試。
您應該會收到以下回應:
Output{
"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"
}
如果您收到類似上述的回應,則表示Elasticsearch正常運行。如果沒有,請確保您已經正確遵循了安裝說明,並且已允許Elasticsearch充分啟動的時間。
要對Elasticsearch進行更全面的檢查,請執行以下命令:
在上述命令的輸出中,您可以驗證節點、集群、應用程序路徑、模塊等的所有當前設置。
要開始使用Elasticsearch,首先讓我們添加一些數據。Elasticsearch使用RESTful API,它對通常的CRUD命令作出反應:創建(create)、讀取(read)、更新(update)和刪除(delete)。為了使用它,我們將再次使用cURL命令。
你可以像這樣添加你的第一個條目:
你應該會收到以下回應:
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}
使用 cURL,我們已經向 Elasticsearch 伺服器發送了 HTTP POST 請求。請求的 URI 是 /tutorial/helloworld/1
,帶有幾個參數:
tutorial
是 Elasticsearch 中數據的索引。helloworld
是類型。1
是上述索引和類型下我們條目的 ID。
你可以使用 HTTP GET 請求檢索這個第一個條目。
應該會得到以下結果:
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}
要修改現有的條目,可以使用 HTTP PUT 請求。
Elasticsearch 應該會確認成功修改,如下所示:
Output{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
在上面的示例中,我們將第一個條目的 message
修改為 “Hello, People!”。這樣,版本號已自動增加為 2
。
你可能已經注意到上面請求中的額外參數 pretty
。它啟用了人類可讀的格式,這樣你就可以將每個數據字段寫在新的一行上。在檢索數據時,你也可以“美化”你的結果,以獲得更可讀的輸出,只需輸入以下命令:
現在,回應將被格式化以供人類解析:
Output{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"message" : "Hello, People!"
}
}
}
我們現在已經在 Elasticsearch 中添加並查詢了數據。要了解其他操作,請查閱API 文檔。
結論
您現在已安裝、配置並開始使用 Elasticsearch。要進一步探索 Elasticsearch 的功能,請參考官方 Elasticsearch 文檔。