作者:来自 Elastic Hemendra Singh Lodhi
了解将数据从 AWS S3 提取到 Elastic Cloud 的不同选项。
这是多部分博客系列的第二部分,探讨了将数据从 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
从 AWS S3 提取数据的另一种选择是使用 Elastic Agent。Elastic Agent 是一种提取日志、指标等数据的单一、统一方法。Elastic Agent 安装在 EC2 等实例上,使用集成可以连接到 AWS 服务(如 S3),并将数据转发到 Elasticsearch。
Elastic Agent 工作原理概述:
- 创建类似于清单文件的策略,包含代理说明。
- 在策略中添加集成,这些集成本质上是包含配置、映射、仪表板等资产的模块。
- 代理安装时会遵循所需的策略。
- 代理将根据集成执行提取操作。
功能
- 同时发送日志和指标
- 支持通过 AWS PrivateLink 进行数据传输
- 支持所有集成,并且可以使用 Fleet 管理代理(Elastic Cloud 默认提供)
- 需要安装和维护代理,并且没有自动扩展。使用 Fleet 可以简化代理维护。
- 开箱即用,性能良好,可以配置性能参数以使用性能预设。可以根据数据类型和提取要求使用预设。有关 Fleet 服务器可扩展性的更多信息,请点击此处
- 成本是用于 agent 安装和 SQS 通知的 EC2 实例
数据流
基于 Elastic 代理的数据提取的高级数据流:
- VPC 流日志配置为写入 S3 存储桶
- 一旦日志写入 S3 存储桶,S3 事件通知就会发送到 SQS
- Elastic 代理轮询 SQS 队列以获取新消息。根据消息中的元数据,它从 S3 存储桶读取日志数据并将其发送到 Elasticsearch
- 建议使用 SQS 以提高性能,以便代理可以只读取 S3 存储桶中新更新的对象,而不是每次轮询整个存储桶
设置
对于步骤 (1)-(2),请按照第 1 部分:Elastic Serverless Forwarder 中的详细信息进行操作:
1)创建 S3 Bucket 来存储 VPC 流日志
2)启用 VPC 流日志并发送到上面创建的 S3 Bucket
3)使用默认设置创建 SQS 队列
注意:在与 S3 Bucket 相同的区域中创建 SQS 队列
提供队列名称 sqs-vpc-flow-logs-elastic-agent 并保留其他设置作为默认设置:
更新 SQS 访问策略(Advanced)以允许 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 -> Properties 并创建事件通知
提供名称以及你想要触发 SQS 的事件类型。在将任何对象添加到存储桶时,我们已 object create:
选择目标为 SQS queue 并选择 sqs-vpc-flow-logs-elastic-agent:
保存后,配置将如下所示:
确认 VPC 流日志已发布在 S3 存储桶中:
确认 S3 事件通知已发送到 SQS 队列:
5) 在 EC2 实例上安装 Elastic Agent
启动 EC2 实例
要获取安装命令,请转到:
Kibana -> Fleet -> Add Agent
创建新的代理策略 aws-vpc-flow-logs-s3-policy 并单击 “Create 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.
成功完成后,状态将在机队页面上更新:
使用 aws 集成更新策略 aws-vpc-flow-logs-s3-policy。这会将 aws 集成配置推送到订阅此策略的代理。有关 fleet 和 agent 如何协同工作的更多信息,请参见此处。
Kibana -> Fleet -> Agent policies.。选择策略 aws-vpc-flow-logs-s3-policy 并单击 Add integration。这将带你进入集成页面搜索 AWS 集成。如果你想监控多个 AWS 服务,最好选择 AWS 集成:
提供 AWS 访问密钥 ID 和秘密访问密钥进行身份验证,并允许 Elastic Agent 从 AWS 服务读取。还有其他可用的身份验证选项。详情请见此处。命名空间选项用于根据环境或任何其他标识符隔离数据:
关闭 other services 并使用 Collect VPC flow logs from S3。更新先前复制的 S3 存储桶和 SQS 队列 URL。保留 advance settings 作为默认设置:
向下滚动并单击 Existing hosts 选项,因为我们已经安装了代理并选择策略 aws-vpc-flow-logs-s3-policy。保存并继续。这会将配置的集成推送到 Elastic Agent:
转到 Kibana -> Fleet -> Agent policies,策略 aws-vpc-flow-logs-s3-policy 已使用 AWS 集成进行更新。
几分钟后,你可以验证流日志是否已从 S3 提取到 Elastic。转到 Kibana -> Discover:
6)在 Kibana 仪表板中监控 VPC 流日志
集成附带仪表板等资产,这些资产是为常见用例预先构建的。转到 Kibana -> Dashboard 并搜索 VPC Flow logs:
更多仪表板!
正如承诺的那样,这里有一些仪表板,它们可以帮助使用 Elastic 代理提取方法监控我们设置中使用的 AWS 服务。这将有助于跟踪使用情况并有助于优化。
我们将使用 Elastic Agent 数据提取选项中使用的相同设置来配置设置和填充仪表板。
转到 Kibana -> Fleet -> aws-vpc-flow-logs-s3-policy 。选择 AWS integration 并切换到所需的服务并填写详细信息。
一些有趣的仪表板:
注意:所有仪表板都可以在 Kibana->Analytics->Dashboards 下找到
[Metrics AWS] Lambda Overview
如果你已使用 Elastic Serverless Forwarder 实现提取,则可以使用此仪表板跟踪 AWS Lambda 指标。它主要显示 Lambda 函数持续时间、错误和任何函数限制:
[Metrics
AWS] S3 Overview
此仪表板概述了 S3 的使用情况,并有助于监控存储桶大小、对象数量等。通过跟踪陈旧的存储桶和对象,这可以帮助优化 S3 的使用情况:
[Logs AWS] S3 Server Access Log Overview
此仪表板显示 S3 服务器访问日志,并提供对存储桶发出的请求的详细记录。这在安全和访问审计中很有用,还有助于了解用户如何访问你的 S3 存储桶和对象:
[Metrics AWS] Usage Overview
此仪表板显示 AWS 服务的一般使用情况,并突出显示针对 AWS 服务的 API 使用情况。这有助于了解服务使用情况和潜在优化:
[Metrics AWS] Billing Overview
该仪表板显示服务的计费使用情况,并帮助监控服务花费了多少钱:
[Metrics AWS] SQS
Overview
此仪表板显示 SQS 队列利用率,显示已发送、已接收的消息以及发送消息的任何延迟。这对于监控 SQS 队列是否存在任何问题非常重要,因为它是架构中的一个重要组件。SQS 的任何问题都可能导致数据提取延迟:
[Metrics AWS] EC2
Overview
如果你使用 Elastic 代理提取方法,则可以监视托管 Elastic 代理的 EC2 实例的 CPU、内存、磁盘等的利用率,这在流量负载较高时有助于确定实例的大小。这也可以用于你的其他 EC2 实例:
[Elastic Agent] S3 Input Metrics
此仪表板显示了 Elastic 代理的详细利用率,展示了 Elastic 代理如何处理 S3 输入以及监控与 SQS 和 S3 的交互。仪表板显示了 Elastic 代理在读取 SQS 消息和 S3 对象并将其转发到 Elasticsearch 时的聚合指标。结合 [Metrics AWS] EC2 Overview 仪表板,这可以帮助了解 EC2 和 Elastic 代理的利用率,并可能有助于扩展这些组件:
结论
Elasticsearch 提供了多种选项,可将数据从 AWS S3 同步到 Elasticsearch 部署中。在本演练中,我们演示了实现 Elastic Agent 提取选项并利用 Elastic 业界领先的搜索功能相对容易。
在本系列的第 3 部分中,我们将深入探讨使用 Elastic S3 Native Connector 作为提取 AWS S3 数据的另一种选择。
不要忘记查看本系列的第 1 部分:Elastic Serverless Forwarder。
你可以使用来自任何来源的数据构建搜索。查看此网络研讨会以了解 Elasticsearch 支持的不同连接器和来源。
准备好自己尝试一下了吗?开始免费试用。
原文:How to ingest data from AWS S3 into Elastic Cloud - Part 2 : Elastic Agent - Search Labs