这是探索将 AWS S3 数据导入 Elastic Cloud 的多种不同选项的多部分博客系列的第二部分。
在本博客中,我们将学习如何使用 Elastic Agent 从 AWS S3 导入数据。
注 1:请查看 第 1 部分:Elastic Serverless Forwarder 中不同选项的比较
注 2:Elastic Cloud 部署是遵循以下步骤的先决条件。
Elastic Cloud
查看 第 1 部分:Elastic Serverless Forwarder 博客系列文章,了解如何 开始使用 Elastic Cloud。如果您已经拥有活动部署,请跳过此步骤。
Elastic Agent
使用 Elastic Agent 是从 AWS S3 导入数据的另一种方法。Elastic Agent 是一种单一、统一的方式来导入日志、指标等数据。Elastic Agent 安装在 EC2 等实例上,并使用 集成 连接到 AWS 服务(如 S3),并将数据转发到 Elasticsearch。
Elastic Agent 高级工作原理
- 创建一个策略,它就像一个清单文件,包含代理的指令。
- 在策略中添加集成,这些集成实际上是包含配置、映射、仪表板等资产的模块。
- 使用所需的策略安装代理。
- 代理将根据集成执行导入操作。
功能
- 同时传输日志和指标
- 支持通过 AWS PrivateLink 传输数据
- 支持所有 集成,并且可以使用 Fleet(Elastic Cloud 默认提供)管理代理。
- 需要安装和维护代理,并且没有自动缩放功能。使用 Fleet 可以简化代理维护。
- 开箱即用的良好性能,并且可以配置性能参数以使用 性能预设。可以根据数据类型和导入需求使用预设。更多关于 Fleet 服务器可扩展性的信息,请 点击此处
- 成本包括用于代理安装和 SQS 通知 的 EC2 实例成本
数据流
基于 Elastic Agent 的数据导入的高级数据流
- 配置 VPC 流日志以 写入 S3 存储桶
- 将日志写入 S3 存储桶后,将 S3 事件通知 发送到 SQS
- Elastic Agent 轮询 SQS 队列以查找新消息。根据消息中的元数据,它从 S3 存储桶读取日志数据并将其发送到 Elasticsearch
- 建议使用 SQS 来提高性能,以便代理可以仅读取 S3 存储桶中新更新的对象,而不是每次都轮询整个存储桶
设置
对于步骤 (1) - (2),请遵循 第 1 部分:Elastic Serverless Forwarder 中的详细信息
1. 创建 S3 存储桶以存储 VPC 流日志
2. 启用 VPC 流日志并将日志发送到上面创建的 S3 存储桶
3. 使用默认设置创建 SQS 队列
注意:在与 S3 存储桶相同的区域中创建 SQS 队列
提供队列名称 `sqs-vpc-flow-logs-elastic-agent` 并将其他设置保持为默认值
更新 SQS 访问策略(高级),以允许 S3 存储桶将通知发送到 SQS 队列。将 account-id 替换为您的 AWS 账户 ID。将其他选项保持为默认值。
在这里,我们指定 S3 从 S3 存储桶向 SQS 队列 (ARN) 发送消息
{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "SQS:SendMessage",
"Resource": "arn:aws:sqs:ap-southeast-2:<account-id>:sqs-vpc-flow-logs-elastic-agent",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "<account-id>"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:s3:::s3-vpc-flow-logs-elastic"
}
}
}
]
}
记下 SQS URL(在“详细信息”下的队列设置中)
4. 启用 S3 存储桶中的 VPC 流日志事件通知
转到 S3 存储桶 `s3-vpc-flow-logs-elastic` -> 属性并创建事件通知
提供名称以及要在其上触发 SQS 的事件类型。我们选择了当任何对象添加到存储桶时触发的 **对象创建**
选择 SQS 队列作为目标,并选择 `sqs-vpc-flow-logs-elastic-agent`
保存后,配置将如下所示
确认 VPC 流日志已发布到 S3 存储桶
确认 S3 事件通知已发送到 SQS 队列
5. 在 EC2 实例上安装 Elastic Agent
启动一个 EC2 实例
要获取安装命令,请转到:
Kibana -> Fleet -> 添加代理
创建新的代理策略 `aws-vpc-flow-logs-s3-policy` 并单击“创建策略”。
创建策略后,复制 安装 Elastic Agent 的说明。将其他设置保持为默认值
登录到 EC2 实例并运行命令
[root@ip-xxx-xx-xx-xxx ~]# curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.14.3-linux-x86_64.tar.gz
tar xzvf elastic-agent-8.14.3-linux-x86_64.tar.gz
cd elastic-agent-8.14.3-linux-x86_64
sudo ./elastic-agent install --url=https://xxxxxxxxxxx.fleet.ap-southeast-2.aws.found.io:443 --enrollment-token= xxxxxxxxxxx
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 327M 100 327M 0 0 5068k 0 0:01:06 0:01:06 --:--:-- 5065k
elastic-agent-8.14.3-linux-x86_64/manifest.yaml
elastic-agent-8.14.3-linux-x86_64/data/elastic-agent-2df2c1/elastic-agent
..........................
Elastic Agent will be installed at /opt/Elastic/Agent and will run as a service. Do you want to continue? [Y/n]:Y
[= ] Service Started [0s] Elastic Agent successfully installed, starting enrollment.
[== ] Waiting For Enroll... [1s] {"log.level":"info","@timestamp":"2024-09-03T03:43:40.209Z","log.origin":{"file.name":"cmd/enroll_cmd.go","file.line":517},"message":"Starting enrollment to URL: https://xxxxxxxxxxx.fleet.ap-southeast-2.aws.found.io:443/","ecs.version":"1.6.0"}
[ ==] Waiting For Enroll... [2s] {"log.level":"info","@timestamp":"2024-09-03T03:43:41.396Z","log.origin":{"file.name":"cmd/enroll_cmd.go","file.line":480},"message":"Restarting agent daemon, attempt 0","ecs.version":"1.6.0"}
[ ===] Waiting For Enroll... [2s] {"log.level":"info","@timestamp":"2024-09-03T03:43:41.448Z","log.origin":{"file.name":"cmd/enroll_cmd.go","file.line":298},"message":"Successfully triggered restart on running Elastic Agent.","ecs.version":"1.6.0"}
Successfully enrolled the Elastic Agent.
[ ===] Done [2s]
Elastic Agent has been successfully installed.
成功完成安装后,Fleet 页面上的状态将更新
使用 AWS 集成更新策略 `aws-vpc-flow-logs-s3-policy`。这会将 AWS 集成配置推送到订阅此策略的代理。有关 Fleet 和代理如何协同工作的更多信息,请 点击此处。
Kibana -> Fleet -> 代理策略。选择策略 `aws-vpc-flow-logs-s3-policy` 并单击“添加集成”。这将带您进入集成页面,搜索 *AWS* 集成。如果您想监控多个 AWS 服务,则最好选择 AWS 集成
提供 AWS 访问密钥 ID 和密钥以进行身份验证,并允许 Elastic Agent 从 AWS 服务读取数据。还有其他身份验证选项可用。详细信息 点击此处。命名空间选项用于根据环境或任何其他标识符隔离数据
关闭其他服务,并使用“从 S3 收集 VPC 流日志”。更新前面复制的 S3 存储桶和 SQS 队列 URL。将高级设置保持为默认值
向下滚动并单击“现有主机”选项,因为我们已经安装了代理并选择了策略 `aws-vpc-flow-logs-s3-policy`。保存并继续。这会将配置的集成推送到 Elastic Agent
转到 Kibana -> Fleet -> 代理策略,策略 `aws-vpc-flow-logs-s3-policy` 已更新为包含 AWS 集成。
几分钟后,您可以验证流日志是否已从 S3 导入到 Elastic。转到 Kibana -> Discover
6. 在 Kibana 仪表板中监控 VPC 流日志
集成附带诸如仪表板之类的资产,这些资产是为常见用例预先构建的。转到 Kibana -> 仪表板并搜索 VPC 流日志
更多仪表板!
如前所述,以下是一些可以帮助使用 Elastic Agent 导入方法监控我们设置中使用的 AWS 服务的仪表板。这将有助于跟踪使用情况并帮助优化。
我们将使用 Elastic Agent 数据导入选项中使用的相同设置来配置设置和填充仪表板。
转到 Kibana -> Fleet -> `aws-vpc-flow-logs-s3-policy`。选择 AWS 集成并打开所需的服务,然后填写详细信息。
一些有趣的仪表板
注意:所有仪表板都位于 Kibana->分析->仪表板下
[指标 AWS] Lambda 概述
如果您已使用 Elastic Serverless Forwarder 实现导入,则可以使用此仪表板跟踪 AWS Lambda 指标。它主要显示 Lambda 函数持续时间、错误和任何函数节流
[指标 AWS] S3 概述
此仪表盘概述了 S3 的使用情况,并有助于监控存储桶大小、对象数量等。通过跟踪闲置存储桶和对象,这有助于优化 S3 的使用。
[日志 AWS] S3 服务器访问日志概述
此仪表盘显示 S3 服务器访问日志,并提供对存储桶请求的详细记录。这在安全和访问审计中非常有用,也有助于了解用户如何访问您的 S3 存储桶和对象。
[指标 AWS] 使用情况概述
此仪表盘显示 AWS 服务的总体使用情况,并突出显示针对 AWS 服务的 API 使用情况。这有助于了解服务使用情况和潜在的优化机会。
[指标 AWS] 账单概述
此仪表盘按服务显示账单使用情况,并有助于监控各项服务的支出。
[指标 AWS] SQS 概述
此仪表盘显示 SQS 队列的使用情况,包括发送的消息、接收的消息以及任何消息发送延迟。监控 SQS 队列是否存在任何问题非常重要,因为它是架构中的一个重要组件。SQS 的任何问题都可能导致数据摄取延迟。
[指标 AWS] EC2 概述
如果您使用 Elastic Agent 数据摄取方法,则可以监控托管 Elastic Agent 的 EC2 实例的 CPU、内存、磁盘等使用情况,这在流量负载高时调整实例大小很有帮助。这也可以用于您的其他 EC2 实例。
[Elastic Agent] S3 输入指标
此仪表盘显示 Elastic Agent 的详细使用情况,显示 Elastic Agent 如何处理 S3 输入以及监控与 SQS 和 S3 的交互。仪表盘显示 Elastic Agent 读取 SQS 消息和 S3 对象并将其转发到 Elasticsearch 的聚合指标。结合[指标 AWS] EC2 概述
仪表盘,这有助于了解 EC2 和 Elastic Agent 的使用情况,并可能有助于扩展这些组件。
结论
Elasticsearch 提供多种选项,可将数据从 AWS S3 同步到 Elasticsearch 部署。在本演练中,我们演示了实施 Elastic Agent 数据摄取选项并利用 Elastic 行业领先的搜索功能相对容易。
在本系列的第 3 部分中,我们将深入探讨使用 Elastic S3 Native Connector 作为另一种摄取 AWS S3 数据的选项。