概述

我们都知道,ElasticSearch 本身具备海量数据的存储和查询的能力,而 ElasticSearch 中存储的原始数据从哪儿来呢?Elastic 支持采集日志、监控指标等等一系列指标并将其写入 ElasticSearch 中进行存储和分析。

在之前的使用中,Elastic 提供了各种不同类型的 Beat 用于不同用途的数据采集,例如 FileBeat 用于日志采集、MetricBeat 用于采集监控指标、PacketBeat 用于采集网络数据等等。但是,这样会导致整体运维和部署的成本大幅上升,针对一个应用,我们可能需要同时部署多种不同的 Beat 来进行相应的指标采集。

而在最新的 Elastic 7.14 版本中,Elastic 提供了一个单一 Agent 来采集所有形式的数据,从而,大幅度的降低了数据采集任务的管理和维护成本,这个单一的 Agent 也就称为 Elastic Agent

本文中,我们将会主要讲解 Elastic Agent 的安装与基本使用。

Elastic Agent 工作流程及架构

在 Elastic Agent 的方案中,设计到了多个模块,下面,我们来进行统一的说明:

Elastic Agent

Elastic Agent 是一个统一的 Agent,可以在每台主机上部署,用于进行日志、指标和其他数据的监控和采集。单一 Agent 的模式使得整体监控的部署、运维成本更低,从而能够更加轻松、快速的添加新数据源的采集任务。

Fleet Web

Fleet 是在 Kibana 中提供的一个 Web UI 页面,用于统一管理各个服务的采集任务和 Elastic Agent 的管理。此外,它提供了简单的新数据源添加的方法并提供了一组开箱即用的仪表盘、可视化报表以及Pipeline管道配置等,从而能够最大化的降低用于的使用成本。
image.png

Fleet Server

Fleet Server 是将 Elastic Agents 连接到 Fleet 的中间组件。 它支持横向扩展,并在 Elastic Cloud 和自运维的集群中都支持。
Fleet Server 是一个单独的进程,它与部署的 Elastic Agent 进行通信。 它可以通过任何 x64 架构 Elastic Agent 二进制直接启动。
Ps: Fleet Server 和 Fleet Agent 共享同一个二进制执行程序

环境搭建

下面,我们来一步步完成对应的环境搭建工作。

ES 配置修改

为了使用 Elastic Agent,我们首先需要在 ES 的配置文件中开启内置的 API key 服务,示例配置如下:

  1. xpack.security.enabled: true
  2. xpack.security.authc.api_key.enabled: true

完成配置文件修改后,需要重启 ElasticSearch 服务。

Kibana 配置修改

同样,Elastic Agent 的使用也需要 Kibana 设置某些指定的配置:

  1. xpack.security.enabled: true
  2. xpack.encryptedSavedObjects.encryptionKey: "something_at_least_32_characters"

其中,xpack.encryptedSavedObjects.encryptionKey 必须设置,Fleet 需要使用该配置来使用 API key相关信息。
Ps: encryptionKey 可以通过 kibana-encryption-keys 命令行工具来生成,也可以直接设置一个32位的字符串。

部署 Fleet Server

Step1: 登录 Kibana 页面,进入 Management -> Fleet 页面。
image.png

Step2: 下载 Elastic Agent
下载地址:https://www.elastic.co/cn/downloads/elastic-agent#ga-release

Step3: 设置代理策略和部署模式
代理测试使用默认的 Default Fleet Server Policy 即可。
部署模式在生产环境中,建议选择生产模式。

Step4: 设置 Fleet 服务器主机
设置对应准备部署 Fleet Server 的机器IP和端口即可,默认端口为 8220,设置完成后点击点击主机按钮。

Step5: 点击生成服务令牌按钮,生成对应的服务令牌。
Ps: 该服务令牌仅生成一次,需要在安全的位置记录并保存,后续需要使用。

Step6: 进入 Fleet 设置页面,在 Elastic 输出配置中增加如下设置:

  1. ssl.verification_mode: none

Step7: 在对应机器上启动 Fleet Server

  1. sudo ./elastic-agent install -f \
  2. --fleet-server-es=https://${ES地址} \
  3. --fleet-server-es-ca=${ES CA证书} \
  4. --fleet-server-service-token=${服务令牌} \
  5. --fleet-server-policy=${策略ID} \
  6. --fleet-server-insecure-http

Ps:

  1. 命令需要 root 权限来执行。
  2. Fleet Server 对 ES 的证书验证比其他 ElasticStack 的验证更加严格,要求 ES 证书必须设置了对应的DNS后才会正常访问。
  3. —fleet-server-insecure-http 参数可以使用 HTTP 协议提供服务。

Step8: 启动完成后,可以在 Fleet 代理页面看到对应的主机:
image.png

部署 Elastic Agent

最后一步,我们来部署 Elastic Agent。
Step1: 在代理页面点击右上角的添加代理按钮
Step2: 选择在 Fleet 中注册
Step3: 选择默认的代理策略
Step4: 根据提示的启动命令启动 Elastic Agent 即可:

  1. sudo ./elastic-agent install -f --url=http://${机器IP}:8220 --enrollment-token=${enrollment-token} --insecure

Ps: 对于开发场景,可以增加 —insecure 来忽略证书验证。
当安装完成后,你将会在 Fleet 代理页面看到新增的 Elastic Agent :
image.png

QuickStart

完成了相关的环境准备后,下面,我们就来正式进入实战的过程,配置相关的指标采集任务并观测指标数据。

主机监控

Elastic Agent 默认采集了主机监控相关的数据。
我们可以切换到数据流的选项卡中:
image.png
在操作列中,可以进入到对应数据的仪表盘中。
image.png

HTTP/TCP/ICMP服务监控

下面,我们将会使用 Elastic Synthetics 集成的功能来实时监控应用程序的状态和响应时间,包括 HTTP 协议、TCP 协议或者 ICMP 协议等。

我们可以将 Elastic Synthetics 集成添加到我们的默认策略中。
Ps: 我们可以对策略进行分组来管理 Agent 的配置。一个策略中,可以包含任意数量的集成,从而用于从主机上运行的各种服务中收集对应的监控数据。

Step1: 进入 Kibana 的 Management -> 集成页面,搜索 Elastic Synthetics 。
image.png

Step2: 选择 Elastic Synthetics 并添加。
传入对应的配置并保存即可。
image.png
Ps: 集成的名称不允许是中文,否则会导致 Elastic Agent 数据上报失败

添加完成后,我们就可以在对应的页面查看数据啦!