概述
我们都知道,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管道配置等,从而能够最大化的降低用于的使用成本。
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 服务,示例配置如下:
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
完成配置文件修改后,需要重启 ElasticSearch 服务。
Kibana 配置修改
同样,Elastic Agent 的使用也需要 Kibana 设置某些指定的配置:
xpack.security.enabled: true
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 页面。
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 输出配置中增加如下设置:
ssl.verification_mode: none
Step7: 在对应机器上启动 Fleet Server
sudo ./elastic-agent install -f \
--fleet-server-es=https://${ES地址} \
--fleet-server-es-ca=${ES CA证书} \
--fleet-server-service-token=${服务令牌} \
--fleet-server-policy=${策略ID} \
--fleet-server-insecure-http
Ps:
- 命令需要 root 权限来执行。
- Fleet Server 对 ES 的证书验证比其他 ElasticStack 的验证更加严格,要求 ES 证书必须设置了对应的DNS后才会正常访问。
- —fleet-server-insecure-http 参数可以使用 HTTP 协议提供服务。
Step8: 启动完成后,可以在 Fleet 代理页面看到对应的主机:
部署 Elastic Agent
最后一步,我们来部署 Elastic Agent。
Step1: 在代理页面点击右上角的添加代理按钮。
Step2: 选择在 Fleet 中注册
Step3: 选择默认的代理策略
Step4: 根据提示的启动命令启动 Elastic Agent 即可:
sudo ./elastic-agent install -f --url=http://${机器IP}:8220 --enrollment-token=${enrollment-token} --insecure
Ps: 对于开发场景,可以增加 —insecure 来忽略证书验证。
当安装完成后,你将会在 Fleet 代理页面看到新增的 Elastic Agent :
QuickStart
完成了相关的环境准备后,下面,我们就来正式进入实战的过程,配置相关的指标采集任务并观测指标数据。
主机监控
Elastic Agent 默认采集了主机监控相关的数据。
我们可以切换到数据流的选项卡中:
在操作列中,可以进入到对应数据的仪表盘中。
HTTP/TCP/ICMP服务监控
下面,我们将会使用 Elastic Synthetics 集成的功能来实时监控应用程序的状态和响应时间,包括 HTTP 协议、TCP 协议或者 ICMP 协议等。
我们可以将 Elastic Synthetics 集成添加到我们的默认策略中。
Ps: 我们可以对策略进行分组来管理 Agent 的配置。一个策略中,可以包含任意数量的集成,从而用于从主机上运行的各种服务中收集对应的监控数据。
Step1: 进入 Kibana 的 Management -> 集成页面,搜索 Elastic Synthetics 。
Step2: 选择 Elastic Synthetics 并添加。
传入对应的配置并保存即可。
Ps: 集成的名称不允许是中文,否则会导致 Elastic Agent 数据上报失败。
添加完成后,我们就可以在对应的页面查看数据啦!