Elasticsearch:免费和开放的 Elastic 可观测性入门

Elastic 同时被 2 个专栏收录
494 篇文章 87 订阅
49 篇文章 1 订阅

在单个的平台上统一日志,指标,应用程序跟踪数据和可用性数据并对其进行上下文处理。Elastic 可观测性提供了整个数字生态系统的运行状况和性能的统一视图。通过预置的收集器来轻松获取数百种数据源的多种数据,Elastic 可观测性可实现可观测性各个面之间的无缝集成。内置的警报功能使你可以查看何时接近 SLA (Service Level Agreement),而专用的应用程序可以使你按照合理的方式解释数据,包括详细的用户体验得分。诸如 Audi,Etsy,Societe Generale,Domain,Kroger 等公司已经为各种用例部署了 Elastic 可观测性,从集中式日志记录到监视数字体验,这些用例范围广泛。

在此博客中,我们将向你展示如何开始使用 Elastic 可观测性。首先,我们将下载并准备软件,然后部署并与 Elastic Stack 的核心 Elasticsearch 进行试运行。接下来,我们将在 Elasticsearch中 启用安全性和基于角色的访问控制,并将窗口 Kibana 连接到 Elastic Stack。Kibana 既用作管理前端又用作可视化层。最后,我们将通过启用 SSL,TLS 和 HTTPS 进一步保护群集。

注意:本博客中的步骤使用运行 Elastic 可观测性 的自我管理选项。这里描述的所有内容都是我们免费和开放的分发层的一部分,具有诸如分布式跟踪,统一代理,数百个数据集成,用于 APM 的精选应用程序,基础结构监视,日志浏览等功能。所有这些功能都可以在 Elastic Cloud上 的 Elasticsearch Service 上使用,这是一个完全托管的服务,并提供免费试用。无论选择哪种方式,你都将获得相同的出色用户体验。

我在 Mac 上运行,但是以下说明应与 Linux 类似。

 

步骤1:获取软件

我们需要做的第一件事是下载 Elasticsearch 和 Kibana 的安装包。 你可以从入门页面中获取最新链接,并使用 cURL 来获取它们,或直接下载它们,这就是我所做的,只需单击 Mac 版本的Elasticsearch 和 Kibana 快速下载链接即可:

 

为了使自己的组织结构比平时更加井井有条,我将在我自己的主目录下的子文件夹中完成所有这些工作。 我将其称为 ~/elk,然后将 ~/Downloads/ 文件夹中的两个下载文件解压缩到此处,并使名称更易于键入:

mkdir ~/elk 
cd ~/elk
tar xzf ~/Downloads/elasticsearch-7.12.0-darwin-x86_64.tar.gz 
tar xzf ~/Downloads/kibana-7.12.0-darwin-x86_64.tar.gz 
mv elasticsearch-7.12.0 elasticsearch 
mv kibana-7.12.0-darwin-x86_64 kibana

现在我的目录如下所示:

$ pwd
/Users/liuxg/elk
$ ls -lF 
total 1202312
drwxr-xr-x@ 12 liuxg  staff        384 Mar 18 14:24 elasticsearch/
-rw-r--r--@  1 liuxg  staff  313582817 Mar 24 16:40 elasticsearch-7.12.0-darwin-x86_64.tar.gz
drwxr-xr-x@ 15 liuxg  staff        480 Mar 18 15:03 kibana/
-rw-r--r--@  1 liuxg  staff  293825717 Mar 24 16:40 kibana-7.12.0-darwin-x86_64.tar.gz

如果有较新的版本,请相应地调整名称。 我们现在准备进行试运行。

 

第2步:使用 Elasticsearch 进行试运行

从这一点出发,如果我打开了多个终端选项卡(或窗口),它将使工作变得更加轻松。 我将指定三个终端窗口,并且每个终端窗口对于一个特定的目录,这样我不必切换目录太多:

  • Elasticsearch(在 elasticsearch 目录中)
  • Tools(也位于 elasticsearch 目录中)
  • Kibana(在 kibana 目录中)

现在看起来像这样:

在这一点上,我们可以开始试运行 - 一切都应该正常进行。 从 Elasticsearch 选项卡(在 elasticsearch 目录中)开始,运行 ./bin/elasticsearch,你应该会看到一堆控制台输出。 当你看到这样的一行时,它已经完成启动:

./bin/elasticsearch
[orion] Active license is now [BASIC]; Security is disabled

现在,跳到 “Tools” 选项卡(如果在 MacOS 上使用 Terminal(不是 iTerm),则提示:键盘快捷键 ⌘+ 2 将带您到第二个选项卡)并运行 curl "localhost:9200/?pretty", 它为你提供了一些版本信息:

curl "localhost:9200/?pretty"

太好了!

Elasticsearch 现在已设置并正在运行,但是没有密码保护。 Elastic Stack 免费提供基于角色的访问控制(RBAC),因此让我们继续启用它。

提示:如果你在这一步有问题的话,请参阅文章 “ 如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch”。

 

步骤3:设定安全性

在 Elasticsearch 中启用安全性

当我们仍在 “Tools” 终端选项卡上时,我们想将  “xpack.security.enabled: true" 添加到 Elasticsearch 配置文件 config/elasticsearch.yml 中。 你可以使用你喜欢的编辑器,但是对于这一行,我只运行echo "xpack.security.enabled: true" >> config/elasticsearch.yml,并使用 tail config/elasticsearch.yml 进行检查:

echo "xpack.security.enabled: true" >> config/elasticsearch.yml
tail config/elasticsearch.yml

引导默认用户

返回 Elasticsearch 终端选项卡,重新启动 Elasticsearch(ctrl + C,然后是 ./bin/elasticsearch)以获取配置更改,然后直接回到 “Tools” 选项卡。

现在,我们将为默认用户设置密码。 当你以交互方式运行 ./bin/elasticsearch-setup-passwords interactive 时,系统将提示你输入每个默认用户的密码:

$ pwd
/Users/liuxg/elk/elasticsearch
$ ./bin/elasticsearch-setup-passwords interactive

为了方便,在上面我们使用 password 作为默认的密码。

如果我们再次运行 curl 测试,它将失败:

但是,如果我们使用 kibana_system 用户和我创建的密码( curl -u elastic:password "http://localhost:9200/?pretty")添加基本的 auth 标头,它将再次起作用:

curl -u elastic:password "http://localhost:9200/?pretty"

 

配置 Kibana 进行身份验证

我们尚未启动 Kibana,但是在执行此操作之前,我们需要使用上面刚刚测试的 kibana_system 用户对其进行配置。 切换到 Kibana 选项卡,然后在你喜欢的文本编辑器中打开 config/kibana.yml。 在文件中搜索 password(在7.12.0中,它位于第 45 行)— 它应如下所示:

# If your Elasticsearch is protected with basic authentication, these settings provide 
# the username and password that the Kibana server uses to perform maintenance on the Kibana 
# index at startup. Your Kibana users still need to authenticate with Elasticsearch, which 
# is proxied through the Kibana server. 
#elasticsearch.username: "kibana_system" 
#elasticsearch.password: "pass"

通过删除开头的#取消注释这两条 elasticsearch.* 行,因此它们恰好位于该行的开头。 更改第二个引号中的值,以匹配你为 kibana_system 用户选择的密码。 我的现在看起来像这样:

config/kibana.yml

elasticsearch.username: "kibana_system" 
elasticsearch.password: "password"

保存文件 kibana.yml。

如果你在配置这个安全有遇到问题,请参阅文章 “Elasticsearch:设置 Elastic 账户安全”。

 

步骤4:启动 Kibana

现在,我们将开始 Kibana,但请注意。 如果您使用的是 Mac,并且启动会导致弹出窗口(大约五次)。在 “Kibana” 选项卡上,运行 ./bin/kibana,这将启动 Kibana。 在控制台上,你会在中间看到类似这样的内容,表明它已准备就绪:

./bin/kibana
  log   [08:55:18.098] [info][listening] Server running at http://localhost:5601 
  log   [08:55:18.557] [info][server][Kibana][http] http server running at http://localhost:5601

在浏览器中打开 Kibana URL(另一个 Terminal 提示:按住 ⌘ 键并双击 Terminal 中的 URL,以在默认浏览器中将其打开)。 使用 elastic 用户和你为其创建的密码登录(我只使用了相同的 password)。

 

加载样本数据

登录后,你会看到一个欢迎屏幕,并有机会加载一些示例数据。 让我们开始吧!

单击 Add data,你将进入“Add data” 页面。 你可以忽略有关 “New:Elastic Agent and Fleet Beta”(免费和开放的 Elastic Stack 的另一部分,但这是另一回事)的消息。 点击示 Sample data,

然后添加示例数据集(至少是示例 Sample Web logs之一)。 完成后,单击 “View data” 以获取示例 Web 日志:

Elastic Stack 具有许多数据源的集成,例如数据库,云服务提供商和服务,其中大多数可在 Elastic License下免费使用(如果您想查看源代码,则大多数位于 Beats GitHub中) 存储库)。 在许可页面上查找“数据源(Data sources)”; 前两列中带有复选标记的所有内容均可免费使用。

集成还包括其他内容。 大多数都带有可视化和仪表板,有些带有预配置的数据分层或 Canvas 工作台。 如上所示,样本数据也包含其中一些。 仪表板显示了一些可视化类型供你使用,

而 “日志” 应用提供了整个生态系统中日志的合并视图:

在 Elastic 可观测性中也有指向其他方面的链接,以帮助简化调查,但是由于我们没有此类数据,所以它们不可单击。

单击更多一点,尝试使用 “日志” 应用程序中的突出显示功能。 它使你无需过滤即可查看关键信息。你可以阅读文章 “Elastic Logs 应用介绍” 以了解更多。

现在一切正常,您可以浏览 Kibana 和其他样本数据集中的数据。 要返回该加载屏幕,请单击顶部的汉堡包(就像中文字的 “三”),然后点击 Home:

                  

你也可以直接点击 Elastic 的 Logo。然后 Add data 按钮。

你可能已经注意到,我们的 Kibana URL(http://localhost:5601/)仅可在本地主机上访问,而不能使用 HTTPS,因此我们无法从其他主机访问它,并且它的安全性也不尽如人意。 接下来让我们进行补救。

 

步骤5:使用 Elastic Stack 加密通信

接下来,我们将通过在 Kibana 界面上启用 HTTPS 并设置 SSL/TLS 通信来进一步加强集群。 为此,我们将设置一些自签名证书,但如果有其它的机制,请随意使用其他机制(破坏者:如果你使用自签名,则稍后必须在浏览器中接受豁免)。 我们将创建两组:一组用于我们的 Elasticsearch 节点,另一组用于我们的 Kibana 实例。 你可以随时停止 Kibana。

准备配置

首先,我们将生成一个证书颁发机构(certificate authority)。 为此,请跳回到 “Tools” 终端选项卡。 运行命令 ./bin/elasticsearch-certutil ca --pem,这将提示你输入要保存的文件。可以随时更改名称,也可以使用默认的 elastic-stack-ca.zip。

./bin/elasticsearch-certutil ca --pem
$ pwd
/Users/liuxg/elk/elasticsearch
$ ls
LICENSE.txt          config               lib
NOTICE.txt           data                 logs
README.asciidoc      elastic-stack-ca.zip modules
bin                  jdk.app              plugins

我们需要为特定计算机生成证书,我们可以通过使用将解析为 IP 的名称或实际 IP 地址来生成证书。 如果选择名称路由,则可以确保您的主机已在 DNS 中注册(如果已经使用 DHCP 进行注册),或将其放入位于 /etc/hosts 中的主机文件中。

接下来,生成一个名为 certs.yml 的配置文件,并粘贴以下内容

certs.yml

instances: 
  - name: 'es_1' 
    dns: [ '<your_hostname>' ] 
  - name: 'kibana_1' 
    dns: [ '<your_hostname>' ]

如果使用名称,请用将解析的主机名替换 <your_hostname>。 就我而言,它是 mac,所以我的样子如下:

certs.yml

# add the instance information to yml file 
instances: 
  - name: 'es_1' 
    dns: [ 'mac' ] 
  - name: 'kibana_1' 
    dns: [ 'mac' ]

如果我想通过 IP 地址做到这一点,那就应该是:

# add the instance information to yml file 
instances: 
  - name: 'es_1' 
    ip: [ '192.168.1.175' ] 
  - name: 'kibana_1' 
    ip: [ '192.168.1.175' ]

无论哪种情况,请确保正确设置间距。 YAML 很挑剔。 无论使用主机名还是IP地址,我们都将主机的值称为 “<HOST_ID>”。

解压缩我们生成的 elastic-stack-ca.zip,它会产生:

$ pwd
/Users/liuxg/elk/elasticsearch
$ unzip elastic-stack-ca.zip 
Archive:  elastic-stack-ca.zip
   creating: ca/
  inflating: ca/ca.crt               
  inflating: ca/ca.key  

最后,通过运行以下命令生成证书:

./bin/elasticsearch-certutil cert --ca-cert ca/ca.crt --ca-key ca/ca.key --pem --in certs.yml --out certs.zip

经过上面的命令,我们可以看到一个新生产的 certs.zip 文件:

$ pwd
/Users/liuxg/elk/elasticsearch
$ ls
LICENSE.txt          certs.yml            jdk.app
NOTICE.txt           certs.zip            lib
README.asciidoc      config               logs
bin                  data                 modules
ca                   elastic-stack-ca.zip plugins

基本上,它将使用我们创建的 CA 来生成证书并创建一个名为 certs.zip 的文件,其中包含以下文件(你可能会有所不同):
 

$ unzip -l certs.zip  
Archive:  certs.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  04-22-2021 11:18   es_1/
     1164  04-22-2021 11:18   es_1/es_1.crt
     1679  04-22-2021 11:18   es_1/es_1.key
        0  04-22-2021 11:18   kibana_1/
     1168  04-22-2021 11:18   kibana_1/kibana_1.crt
     1675  04-22-2021 11:18   kibana_1/kibana_1.key
---------                     -------
     5686                     6 files

 

安装 Elasticsearch 的证书

现在,我们准备在我们的 Elasticsearch 和 Kibana 实例中安装密钥和证书。

运行以下命令:

unzip -d certs certs.zip 
mkdir config/certs 
cp ca/ca* certs/es_1/* config/certs

它将密钥和证书解压缩到我们的 elasticsearch 目录中的一个名为 certs 的文件夹中,在 config 目录下创建一个 certs 目录,并为 Elasticsearch 复制相关的文件。

现在,编辑 Elasticsearch 配置,config/elasticsearch.yml,并添加以下内容以启用 SSL,设置密钥和证书颁发机构:

node.name: es_1 
network.host: <HOST_ID> 
xpack.security.http.ssl.enabled: true 
xpack.security.transport.ssl.enabled: true 
xpack.security.http.ssl.key: certs/es_1.key 
xpack.security.http.ssl.certificate: certs/es_1.crt 
xpack.security.http.ssl.certificate_authorities: certs/ca.crt 
xpack.security.transport.ssl.key: certs/es_1.key 
xpack.security.transport.ssl.certificate: certs/es_1.crt 
xpack.security.transport.ssl.certificate_authorities: certs/ca.crt 
discovery.seed_hosts: [ "<HOST_ID>" ] 
cluster.initial_master_nodes: [ "es_1" ]

将 <HOST_ID> 替换为你的主机名或 IP 地址。 保存配置,然后返回 Elasticsearch 选项卡并重新启动 Elasticsearch(ctrl + C,然后再次是 ./bin/elasticsearch),观察集群是否变为绿色:

我们的旧命令(curl --user kibana_system:password "localhost:9200/?pretty")将不再起作用; 而是使用我们创建的 curl --cacert ca/ca.crt --user kibana_system:password "https://<HOST_ID>:9200/?pretty"。

curl --cacert ca/ca.crt -u elastic:password "https://mac:9200/?pretty"

 

安装 Kibana 的证书

从抓取我们创建的密钥和证书开始,我们需要执行与上述类似的步骤。 切换回 “Kibana” 选项卡(如果你之前未使用过,请停止 Kibana)。 如果你遵循的话,我们在 ~/elk/kibana 目录中,并且它上方的目录(~/elk)也包含 elasticsearch 目录,这是我们的证书所在。 运行以下命令:

mkdir config/certs 
cp ../elasticsearch/ca/ca.crt config/certs/ 
cp ../elasticsearch/certs/kibana_1/kibana_1.* config/certs/

然后使用 ls -l config/certs/ 进行验证,该代码应如下所示:

$ pwd
/Users/liuxg/elk/kibana
$ ls -l config/certs/
total 24
-rw-r--r--  1 liuxg  staff  1200 Apr 22 11:37 ca.crt
-rw-r--r--  1 liuxg  staff  1168 Apr 22 11:37 kibana_1.crt
-rw-r--r--  1 liuxg  staff  1675 Apr 22 11:37 kibana_1.key

最后,我们需要将它们添加到 Kibana 配置文件中,类似于我们对 Elasticsearch 所做的操作。 打开 config/kibana.yml 并添加以下内容:

config/kibana.yml

server.name: "<HOST_ID>" 
server.host: "<HOST_ID>" 
server.ssl.enabled: true 
server.ssl.certificate: config/certs/kibana_1.crt 
server.ssl.key: config/certs/kibana_1.key 
elasticsearch.hosts: ["https://<HOST_ID>:9200"] 
elasticsearch.ssl.certificateAuthorities: [ "config/certs/ca.crt" ] 
xpack.encryptedSavedObjects.encryptionKey: "something_at_least_32_characters"

再次用您的主机 ID 替换 <HOST_ID>。 保存配置,然后使用 ./bin/kibana 重新启动 Kibana,你应该看到:

log   [13:48:39.322] [info][listening] Server running at https://<HOST_ID>:5601

回想一下,新的 HTTPS URL(现在是 <HOST_ID> 而不是 localhost)可能正在针对自签名证书运行(除非你使用了受信任的授权机构),因此你需要接受它(例如,使用 Safari, 您将单击显示详细信息,然后访问网站,接受提示,然后输入你的凭据以继续。如果你使用的是Chrome,则可以添加CA,也可以只键入thisisunsafe(你将看不到你输入的字母)以绕过警告。进入登录屏幕后,请输入与以前相同的用户名和密码(elastic/password)。

我们在 Chrome 浏览器中,输入地址 https://mac:5601。针对你的情况,你需要使用自己的 <HOST_ID> 来代替 mac:

在上面打入 thisisunsafe:

在上面打入用户名及密码 elastic/password。这样我们就可以登录了。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值