使用 Beats 监控 Amazon Web Services (AWS)
编辑使用 Beats 监控 Amazon Web Services (AWS)
编辑在本教程中,您将学习如何使用 Elastic 可观测性:日志和基础设施指标来监控您的 AWS 基础设施。
您将学到什么
编辑您将学习如何
- 创建和配置 S3 存储桶
- 创建和配置 SQS 队列。
- 安装和配置 Filebeat 和 Metricbeat 以收集日志和基础设施指标
- 从 S3 收集日志
- 从 Amazon CloudWatch 收集指标
开始之前
编辑在 Elastic Cloud 上使用我们的托管 Elasticsearch 服务创建一个部署。该部署包括一个用于存储和搜索数据的 Elasticsearch 集群,以及一个用于可视化和管理数据的 Kibana。
在本教程中,我们假设您的日志和基础设施数据已发送到 CloudWatch。我们将向您展示如何将数据从 CloudWatch 流式传输到 Elasticsearch。如果您不知道如何将 AWS 日志和基础设施数据放入 CloudWatch,Amazon 提供了许多关于此特定主题的文档
- 从特定的 AWS 服务 收集您的日志和基础设施数据
- 将您的日志 导出到 S3 存储桶
步骤 1:创建 S3 存储桶
编辑要将您的日志集中到 Elasticsearch 中,您需要一个 S3 存储桶。Filebeat(您将用于收集日志的代理)有一个用于 S3 的输入。
在 AWS S3 控制台 中,点击创建存储桶。为存储桶指定一个名称,并指定您希望将其部署到的区域。
步骤 2:创建 SQS 队列
编辑您现在应该有一个可以导出日志的 S3 存储桶,但您还需要一个 SQS 队列。为了避免在轮询每个 S3 存储桶的所有日志文件时出现明显的延迟,我们将使用 Amazon Simple Queue Service (SQS)。这将为我们提供在创建新的 S3 对象时发送的 Amazon S3 通知。Filebeat S3 输入 检查 SQS 中是否有关于 S3 中创建的新对象的消息,并使用这些消息中的信息从 S3 存储桶中检索日志。通过这种设置,无需定期轮询每个 S3 存储桶。相反,Filebeat S3 输入保证了从 S3 存储桶中以速度和可靠性进行近乎实时的数据收集。
创建一个 SQS 队列,并配置我们的 S3 存储桶,以便在 S3 存储桶中存在新日志时向 SQS 队列发送消息。转到 SQS 控制台
确保队列是在与 S3 存储桶相同的区域中创建的。
创建一个标准的 SQS 队列,并使用 JSON 对象定义高级访问策略来编辑访问策略
将 <sqs-arn>
替换为 SQS 队列的 ARN,<s3-bucket-arn>
替换为刚刚创建的 S3 存储桶的 ARN,<source-account>
替换为您的源帐户。
{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SQS:SendMessage", "Resource": "<sqs-arn>", "Condition": { "StringEquals": { "aws:SourceAccount": "<source-account>" }, "ArnLike": { "aws:SourceArn": "<s3-bucket-arn>" } } } ] }
步骤 3:启用事件通知
编辑现在您的队列已创建,请转到您创建的 S3 存储桶的属性,然后点击创建事件通知。
指定您希望在每个对象创建事件上发送通知。
将目标设置为刚刚创建的 SQS 队列。
步骤 4:安装和配置 Filebeat
编辑要使用 Elastic Stack 监控 AWS,您需要两个主要组件:一个 Elastic 部署来存储和分析数据,以及一个代理来收集和发送数据。
安装 Filebeat
编辑下载并安装 Filebeat。
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.16.0-amd64.deb sudo dpkg -i filebeat-8.16.0-amd64.deb
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.16.0-x86_64.rpm sudo rpm -vi filebeat-8.16.0-x86_64.rpm
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.16.0-darwin-x86_64.tar.gz tar xzvf filebeat-8.16.0-darwin-x86_64.tar.gz
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.16.0-linux-x86_64.tar.gz tar xzvf filebeat-8.16.0-linux-x86_64.tar.gz
- 从 下载页面 下载 Filebeat Windows zip 文件。
- 将 zip 文件的内容解压缩到
C:\Program Files
。 - 将
filebeat-<version>-windows
目录重命名为Filebeat
。 - 以管理员身份打开 PowerShell 提示符(右键点击 PowerShell 图标,然后选择以管理员身份运行)。
-
在 PowerShell 提示符下,运行以下命令将 Filebeat 安装为 Windows 服务
PS > cd 'C:\Program Files\Filebeat' PS C:\Program Files\Filebeat> .\install-service-filebeat.ps1
如果您的系统上禁用了脚本执行,则需要将当前会话的执行策略设置为允许脚本运行。例如:PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-filebeat.ps1
。
设置资源
编辑Filebeat 附带用于解析、索引和可视化数据的预定义资源。运行以下命令加载这些资源。可能需要几分钟。
./filebeat setup -e -E 'cloud.id=YOUR_DEPLOYMENT_CLOUD_ID' -E 'cloud.auth=elastic:YOUR_SUPER_SECRET_PASS'
在此命令中替换您的 Cloud ID 和管理员的 |
设置 Filebeat 是需要额外权限的管理员级任务。最佳实践是 使用管理员角色进行设置,并使用更严格的角色进行事件发布(您将在下一步执行此操作)。
配置 Filebeat 输出
编辑接下来,您将配置 Filebeat 输出到 Elasticsearch Service。
-
使用 Filebeat 密钥库存储 安全设置。将 Cloud ID 存储在密钥库中。
./filebeat keystore create echo -n "<Your Deployment Cloud ID>" | ./filebeat keystore add CLOUD_ID --stdin
-
要以最少的权限将日志存储在 Elasticsearch 中,请创建一个 API 密钥以将数据从 Filebeat 发送到 Elasticsearch Service。登录 Kibana(您可以在不输入任何权限的情况下从 Cloud 控制台执行此操作),并在 全局搜索字段 中找到
Dev Tools
。发送以下请求POST /_security/api_key { "name": "filebeat-monitor-gcp", "role_descriptors": { "filebeat_writer": { "cluster": [ "monitor", "read_ilm", "cluster:admin/ingest/pipeline/get", "cluster:admin/ingest/pipeline/put" ], "index": [ { "names": ["filebeat-*"], "privileges": ["view_index_metadata", "create_doc"] } ] } } }
Filebeat 需要额外的集群权限才能发布日志,这与 Metricbeat 配置不同。您可以在 此处 找到更多详细信息。
-
响应包含一个
api_key
字段和一个id
字段,可以以下格式存储在 Filebeat 密钥库中:id:api_key
。echo -n "IhrJJHMB4JmIUAPLuM35:1GbfxhkMT8COBB4JWY3pvQ" | ./filebeat keystore add ES_API_KEY --stdin
确保您指定了
-n
参数;否则,由于在 API 密钥末尾添加了换行符,您将遇到痛苦的调试会话。 -
要查看是否已存储这两个设置,请运行以下命令
./filebeat keystore list
-
要将 Filebeat 配置为输出到 Elasticsearch Service,请编辑
filebeat.yml
配置文件。将以下行添加到文件的末尾。cloud.id: ${CLOUD_ID} output.elasticsearch: api_key: ${ES_API_KEY}
-
最后,测试配置是否有效。如果无效,请验证您是否使用了正确的凭据,并在必要时重新添加它们。
./filebeat test output
步骤 5:配置 AWS 模块
编辑现在输出已正常工作,您可以设置 Filebeat AWS 模块,该模块将自动创建 AWS 输入。此模块检查 SQS 中是否有关于 S3 存储桶中创建的新对象的消息,并使用这些消息中的信息从 S3 存储桶中检索日志。通过这种设置,无需定期轮询每个 S3 存储桶。
有许多不同的文件集可用:cloudtrail
、vpcflow
、ec2
、cloudwatch
、elb
和 s3access
。在本教程中,我们将向您展示使用 ec2
和 s3access
文件集的一些示例。
ec2
文件集用于发送和处理存储在 CloudWatch 中的日志,并将其导出到 S3 存储桶。s3access
文件集用于收集 S3 访问日志。它为对存储桶发出的请求提供了详细的记录。服务器访问日志对许多应用程序很有用。例如,访问日志信息可用于安全和访问审计。它还可以帮助您了解您的客户群并了解您的 Amazon S3 账单。
让我们在 Filebeat 中启用 AWS 模块。
./filebeat modules enable aws
使用以下配置编辑 modules.d/aws.yml
文件。
- module: aws cloudtrail: enabled: false cloudwatch: enabled: false ec2: enabled: true var.credential_profile_name: fb-aws var.queue_url: https://sqs.eu-central-1.amazonaws.com/836370109380/howtoguide-tutorial elb: enabled: false s3access: enabled: false vpcflow: enabled: false
启用 |
|
这是按照 AWS 标准 定义的 AWS 配置文件。 |
|
添加包含有关存储 EC2 日志的存储桶的通知的队列的 URL |
确保用于从 S3 收集日志的 AWS 用户至少具有以下权限附加到其身上
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "sqs:ReceiveMessage", "sqs:ChangeMessageVisibility", "sqs:DeleteMessage" ], "Effect": "Allow", "Resource": "*" } ] }
您现在可以将日志上传到 S3 存储桶。如果您使用的是 CloudWatch,请确保按照 AWS 用户指南的步骤 3 编辑存储桶的策略。这将帮助您避免权限问题。
启动 Filebeat 以收集日志。
./filebeat -e
到目前为止,我们已经实现了以下目标
现在,让我们配置 s3access
文件集。这里的目标是能够监控人们如何访问我们创建的存储桶。为此,我们将创建另一个存储桶和另一个队列。新的架构将如下所示
创建一个新的 S3 存储桶和 SQS 队列。确保启用了新存储桶上的事件通知,并确保它将通知发送到新队列。
现在返回第一个存储桶,然后转到属性 > 服务器访问日志记录。指定您希望将访问日志发送到您最近创建的存储桶。
复制您创建的队列的 URL。使用以下配置编辑 `modules.d/aws.yml` 文件。
- module: aws cloudtrail: enabled: false cloudwatch: enabled: false ec2: enabled: true var.credential_profile_name: fb-aws var.queue_url: https://sqs.eu-central-1.amazonaws.com/836370109380/howtoguide-tutorial elb: enabled: false s3access: enabled: true var.credential_profile_name: fb-aws var.queue_url: https://sqs.eu-central-1.amazonaws.com/836370109380/access-log vpcflow: enabled: false
启用 |
|
这是按照 AWS 标准 定义的 AWS 配置文件。 |
|
添加包含有关存储 EC2 日志的存储桶的通知的队列的 URL |
|
将包含有关包含 S3 访问日志的存储桶的通知的队列的 URL 添加到此处。 |
编辑完配置文件后,您需要重新启动 Filebeat。要停止 Filebeat,可以在终端中按 CTRL + C。现在,让我们通过运行以下命令重新启动 Filebeat
./filebeat -e
步骤 6:可视化日志
编辑现在日志已发送到 Elasticsearch,我们可以在 Kibana 中对其进行可视化。要查看原始日志,请在主菜单中找到 发现 或使用 全局搜索字段。
我们在前面步骤中使用的文件集还附带了预构建的仪表板,您可以使用这些仪表板来可视化数据。在 Kibana 中,在主菜单中找到 仪表板 或使用 全局搜索字段。搜索 S3 并选择名为 [Filebeat AWS] S3 服务器访问日志概述 的仪表板。
这将为您提供有关如何访问 S3 存储桶的概述。
步骤 7:收集基础设施指标
编辑要监控您的 AWS 基础设施,您首先需要确保您的基础设施数据已发送到 CloudWatch。要将数据发送到 Elasticsearch,我们将使用 Metricbeat 中的 AWS 模块。此模块使用 GetMetricData API 定期从 AWS CloudWatch 获取 AWS 服务的监控指标。
此模块将生成 CloudWatch API 请求的额外 AWS 费用。有关更多详细信息,请参阅 AWS API 请求。
步骤 8:安装和配置 Metricbeat
编辑在新终端窗口中,运行以下命令。
安装 Metricbeat
编辑下载并安装 Metricbeat。
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-8.16.0-amd64.deb sudo dpkg -i metricbeat-8.16.0-amd64.deb
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-8.16.0-x86_64.rpm sudo rpm -vi metricbeat-8.16.0-x86_64.rpm
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-8.16.0-darwin-x86_64.tar.gz tar xzvf metricbeat-8.16.0-darwin-x86_64.tar.gz
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-8.16.0-linux-x86_64.tar.gz tar xzvf metricbeat-8.16.0-linux-x86_64.tar.gz
- 从 下载页面 下载 Metricbeat Windows zip 文件。
- 将 zip 文件的内容解压缩到
C:\Program Files
。 - 将
metricbeat-<version>-windows
目录重命名为Metricbeat
。 - 以管理员身份打开 PowerShell 提示符(右键点击 PowerShell 图标,然后选择以管理员身份运行)。
-
从 PowerShell 提示符处,运行以下命令将 Metricbeat 安装为 Windows 服务
PS > cd 'C:\Program Files\Metricbeat' PS C:\Program Files\Metricbeat> .\install-service-metricbeat.ps1
如果您的系统上禁用了脚本执行,则需要将当前会话的执行策略设置为允许脚本运行。例如:PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-metricbeat.ps1
。
设置资产
编辑Metricbeat 附带了用于解析、索引和可视化数据的预定义资产。运行以下命令加载这些资产。这可能需要几分钟。
./metricbeat setup -e -E 'cloud.id=YOUR_DEPLOYMENT_CLOUD_ID' -E 'cloud.auth=elastic:YOUR_SUPER_SECRET_PASS'
在此命令中替换您的 Cloud ID 和管理员的 |
设置 Metricbeat 是一项需要额外权限的管理员级任务。作为最佳实践,使用管理员角色进行设置,并使用更严格的角色进行事件发布(您将在下一步执行此操作)。
配置 Metricbeat 输出
编辑接下来,您将配置 Metricbeat 输出到 Elasticsearch Service。
-
使用 Metricbeat 密钥库来存储 安全设置。将 Cloud ID 存储在密钥库中。
./metricbeat keystore create echo -n "<Your Deployment Cloud ID>" | ./metricbeat keystore add CLOUD_ID --stdin
-
要以最少的权限将指标存储在 Elasticsearch 中,请创建一个 API 密钥以将数据从 Metricbeat 发送到 Elasticsearch Service。登录 Kibana(您可以从 Cloud Console 登录,无需输入任何权限)并在 全局搜索字段 中找到
Dev Tools
。从 控制台 发送以下请求POST /_security/api_key { "name": "metricbeat-monitor", "role_descriptors": { "metricbeat_writer": { "cluster": ["monitor", "read_ilm"], "index": [ { "names": ["metricbeat-*"], "privileges": ["view_index_metadata", "create_doc"] } ] } } }
-
响应包含
api_key
和id
字段,可以以下列格式存储在 Metricbeat 密钥库中:id:api_key
。echo -n "IhrJJHMB4JmIUAPLuM35:1GbfxhkMT8COBB4JWY3pvQ" | ./metricbeat keystore add ES_API_KEY --stdin
确保您指定了
-n
参数;否则,由于在 API 密钥末尾添加了换行符,您将遇到痛苦的调试会话。 -
要查看是否已存储这两个设置,请运行以下命令
./metricbeat keystore list
-
要将 Metricbeat 配置为输出到 Elasticsearch Service,请编辑
metricbeat.yml
配置文件。将以下行添加到文件的末尾。cloud.id: ${CLOUD_ID} output.elasticsearch: api_key: ${ES_API_KEY}
-
最后,测试配置是否有效。如果无效,请验证您是否使用了正确的凭据并再次添加它们。
./metricbeat test output
现在输出已生效,您将设置 AWS 模块。
步骤 9:配置 AWS 模块
编辑要从您的 AWS 基础设施收集指标,我们将使用 Metricbeat AWS 模块。此模块包含许多指标集:billing
、cloudwatch
、dynamodb
、ebs
、ec2
、elb
、lambda
等。每个指标集都旨在帮助您流式传输和处理数据。在本教程中,我们将向您展示一些使用 ec2
和 billing
指标集的示例。
-
让我们在 Metricbeat 中启用 AWS 模块。
./metricbeat modules enable aws
-
使用以下配置编辑
modules.d/aws.yml
文件。- module: aws period: 24h metricsets: - billing credential_profile_name: mb-aws cost_explorer_config: group_by_dimension_keys: - "AZ" - "INSTANCE_TYPE" - "SERVICE" group_by_tag_keys: - "aws:createdBy" - module: aws period: 300s metricsets: - ec2 credential_profile_name: mb-aws
定义将要使用的模块。
定义将要收集指标的周期。
定义将要使用的指标集。
这是按照 AWS 标准 定义的 AWS 配置文件。
确保用于从 CloudWatch 收集指标的 AWS 用户至少具有以下权限附加到其身上
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:DescribeInstances", "ec2:DescribeRegions", "cloudwatch:GetMetricData", "cloudwatch:ListMetrics", "sts:GetCallerIdentity", "iam:ListAccountAliases", "tag:getResources", "ce:GetCostAndUsage" ], "Effect": "Allow", "Resource": "*" } ] }
您现在可以启动 Metricbeat 了
./metricbeat -e
步骤 10:可视化指标
编辑现在指标已流式传输到 Elasticsearch,我们可以在 Kibana 中对其进行可视化。要打开 基础设施清单,请在主菜单中找到 基础设施 或使用 全局搜索字段。确保显示 AWS 源和 EC2 实例
我们在前面步骤中使用的指标集还附带了预构建的仪表板,您可以使用这些仪表板来可视化数据。在 Kibana 中,在主菜单中找到 仪表板 或使用 全局搜索字段。搜索 EC2 并选择名为 [Metricbeat AWS] EC2 概述 的仪表板。
如果您想跟踪您在 AWS 上的账单,您还可以查看 [Metricbeat AWS] 账单概述 仪表板。