介绍
Elasticsearch是一个实时分布式搜索和分析数据的平台。由于其可用性、强大的功能和可扩展性,它是一种流行的选择。
本文将指导您安装 Elasticsearch、为您的用例配置它、保护您的安装以及开始使用您的 Elasticsearch 服务器。
先决条件
在学习本教程之前,您需要:
-
具有 4GB RAM 和 2 个 CPU 的 Ubuntu 20.04 服务器设置为非 root sudo 用户。您可以通过使用 Ubuntu 20.04执行初始服务器设置来实现此目的
-
已安装 OpenJDK 11
在本教程中,我们将使用运行 Elasticsearch 所需的最少 CPU 和 RAM。请注意,您的 Elasticsearch 服务器所需的 CPU、RAM 和存储量取决于您期望的日志量。
步骤 1 — 安装和配置 Elasticsearch
Elasticsearch 组件在 Ubuntu 的默认包存储库中不可用。但是,它们可以在添加 Elastic 的包源列表后与 APT 一起安装。
所有包都使用 Elasticsearch 签名密钥进行签名,以保护您的系统免受包欺骗。已使用密钥进行身份验证的包将被您的包管理器视为信任。在此步骤中,您将导入 Elasticsearch 公共 GPG 密钥并添加 Elastic 包源列表以安装 Elasticsearch。
首先,使用 cURL(用于通过 URL 传输数据的命令行工具)将 Elasticsearch 公共 GPG 密钥导入 APT。请注意,我们使用参数 -fsSL 来消除所有进度和可能的错误(服务器故障除外),并允许 cURL 在重定向时在新位置发出请求。将 cURL 命令的输出通过管道传送到 apt-key 程序,该程序将公共 GPG 密钥添加到 APT。
- curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
接下来,将 Elastic 源列表添加到sources.list.d
目录中,APT 将在其中搜索新源:
- echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
接下来,更新您的软件包列表,以便 APT 读取新的 Elastic 源代码:
- sudo apt update
然后使用以下命令安装 Elasticsearch:
- sudo apt install elasticsearch
Elasticsearch 现在已安装并准备好进行配置。
第 2 步 – 配置 Elasticsearch
要配置 Elasticsearch,我们将编辑其主要配置文件elasticsearch.yml
,其中存储了大部分配置选项。该文件位于/etc/elasticsearch
目录中。
使用您喜欢的文本编辑器来编辑 Elasticsearch 的配置文件。在这里,我们将使用nano
:
- sudo nano /etc/elasticsearch/elasticsearch.yml
注意: Elasticsearch 的配置文件是 YAML 格式,这意味着我们需要维护缩进格式。请确保在编辑此文件时不要添加任何额外的空格。
该elasticsearch.yml
文件为您的集群、节点、路径、内存、网络、发现和网关提供配置选项。大多数这些选项都在文件中预先配置,但您可以根据需要更改它们。为了演示单服务器配置,我们将只调整网络主机的设置。
Elasticsearch 侦听来自 port 上任何地方的流量9200
。您需要限制外部访问您的 Elasticsearch 实例,以防止外部人员通过其REST API读取您的数据或关闭您的 Elasticsearch 集群。要限制访问并因此提高安全性,请找到指定 的行network.host
,取消注释,并将其值替换为 ,localhost
因此其内容如下:
. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
. . .
我们已经指定,localhost
以便 Elasticsearch 侦听所有接口和绑定的 IP。如果您希望它仅在特定接口上侦听,则可以指定其 IP 代替localhost
. 保存并关闭elasticsearch.yml
。如果你使用nano
,你可以通过按这样做CTRL+X
,然后Y
再ENTER
。
这些是您可以开始使用 Elasticsearch 的最低设置。现在您可以第一次启动 Elasticsearch。
启动 Elasticsearch 服务systemctl
。给 Elasticsearch 一些时间来启动它。否则,您可能会收到无法连接的错误消息。
- sudo systemctl start elasticsearch
接下来,运行以下命令使 Elasticsearch 在每次服务器启动时启动:
- sudo systemctl enable elasticsearch
在启动时启用 Elasticsearch 后,让我们继续讨论安全性的下一步。
第 3 步 – 保护 Elasticsearch
默认情况下,任何可以访问 HTTP API 的人都可以控制 Elasticsearch。这并不总是存在安全风险,因为 Elasticsearch 仅侦听只能在127.0.0.1
本地访问的回送接口(即)。因此,不可能进行公共访问,只要所有服务器用户都受信任,安全性可能不是主要问题。
如果您需要允许远程访问 HTTP API,您可以使用 Ubuntu 的默认防火墙 UFW 限制网络暴露。如果您按照Ubuntu 20.04教程中的先决条件初始服务器设置中的步骤进行操作,则该防火墙应该已经启用。
我们现在将配置防火墙以允许访问受信任远程主机的默认 Elasticsearch HTTP API 端口 (TCP 9200),通常是您在单服务器设置中使用的服务器,例如198.51.100.0
. 要允许访问,请键入以下命令:
- sudo ufw allow from 198.51.100.0 to any port 9200
完成后,您可以使用以下命令启用 UFW:
- sudo ufw enable
最后,使用以下命令检查 UFW 的状态:
- sudo ufw status
如果您正确指定了规则,您应该会收到如下输出:
OutputStatus: active
To Action From
-- ------ ----
9200 ALLOW 198.51.100.0
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
现在应该启用并设置 UFW 以保护 Elasticsearch 端口 9200。
如果您想投资额外的保护,Elasticsearch 提供了商业Shield 插件供您购买。
第 4 步 – 测试 Elasticsearch
现在,Elasticsearch 应该在 9200 端口上运行。您可以使用 cURL 和 GET 请求对其进行测试。
- curl -X GET 'http://localhost:9200'
您应该会收到以下回复:
Output{
"name" : "elasticsearch-ubuntu20-04",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
如果您收到与上述类似的响应,则表明 Elasticsearch 工作正常。如果没有,请确保您已正确按照安装说明进行操作,并且已留出一些时间让 Elasticsearch 完全启动。
要对 Elasticsearch 执行更彻底的检查,请执行以下命令:
- curl -XGET 'http://localhost:9200/_nodes?pretty'
在上述命令的输出中,您可以验证节点、集群、应用程序路径、模块等的所有当前设置。
第 5 步 – 使用 Elasticsearch
要开始使用 Elasticsearch,让我们先添加一些数据。Elasticsearch使用一个RESTful API,它响应于通常的CRUD命令:Ç reate,– [R EAD,ù PDATE,和d elete。为了使用它,我们将再次使用 cURL 命令。
您可以像这样添加第一个条目:
- curl -XPOST -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
您应该会收到以下回复:
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 请求检索第一个条目。
- curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
这应该是结果输出:
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}
要修改现有条目,您可以使用 HTTP PUT 请求。
- curl -X PUT -H "Content-Type: application/json" 'localhost:9200/tutorial/helloworld/1?pretty' -d '
- {
- "message": "Hello, People!"
- }'
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
上述请求中的额外参数。它支持人类可读的格式,以便您可以将每个数据字段写入新行。通过输入以下命令,您还可以在检索数据时“美化”您的结果以获得更具可读性的输出:
- curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1?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 文档。