使用 Beats 监控亚马逊 Web 服务 (AWS)
编辑使用 Beats 监控亚马逊 Web 服务 (AWS)
编辑在本教程中,您将学习如何使用 Elastic 可观测性监控您的 AWS 基础设施:日志和基础设施指标。
您将学习什么
编辑您将学习如何
- 创建和配置 S3 存储桶
- 创建和配置 SQS 队列。
- 安装和配置 Filebeat 和 Metricbeat 以收集日志和基础设施指标
- 从 S3 收集日志
- 从 Amazon CloudWatch 收集指标
开始之前
编辑使用我们托管在 Elastic Cloud 上的 Elasticsearch 服务创建部署。该部署包括一个用于存储和搜索数据的 Elasticsearch 集群,以及一个用于可视化和管理数据的 Kibana。
在本教程中,我们假设您的日志和基础设施数据已发送到 CloudWatch。我们将向您展示如何将数据从 CloudWatch 流式传输到 Elasticsearch。如果您不知道如何将 AWS 日志和基础设施数据放入 CloudWatch,亚马逊提供了大量关于此特定主题的文档
- 从特定的 AWS 服务收集您的日志和基础设施数据
- 将您的日志导出到 S3 存储桶
步骤 1:创建 S3 存储桶
编辑要将您的日志集中在 Elasticsearch 中,您需要一个 S3 存储桶。您将用于收集日志的代理 Filebeat 具有 S3 的输入。
在 AWS S3 控制台中,单击 创建存储桶。为存储桶指定一个 名称,并指定您要部署它的区域。
步骤 2:创建 SQS 队列
编辑您现在应该有一个可以导出日志的 S3 存储桶,但您还需要一个 SQS 队列。为了避免轮询每个 S3 存储桶中的所有日志文件时出现明显的延迟,我们将使用 Amazon Simple Queue Service (SQS)。这将为我们提供一个 Amazon S3 通知,当创建一个新的 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.17.0-amd64.deb sudo dpkg -i filebeat-8.17.0-amd64.deb
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.17.0-x86_64.rpm sudo rpm -vi filebeat-8.17.0-x86_64.rpm
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.17.0-darwin-x86_64.tar.gz tar xzvf filebeat-8.17.0-darwin-x86_64.tar.gz
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.17.0-linux-x86_64.tar.gz tar xzvf filebeat-8.17.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 服务。
-
使用 Filebeat 密钥库存储安全设置。将 Cloud ID 存储在密钥库中。
./filebeat keystore create echo -n "<Your Deployment Cloud ID>" | ./filebeat keystore add CLOUD_ID --stdin
-
要使用最少的权限将日志存储在 Elasticsearch 中,请创建一个 API 密钥,以便从 Filebeat 向 Elasticsearch 服务发送数据。登录 Kibana(您可以从 Cloud Console 执行此操作,无需键入任何权限),然后在全局搜索字段中找到
开发工具
。发送以下请求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 服务,请编辑
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 配置文件。 |
|
将 URL 添加到包含有关包含 EC2 日志的存储桶的通知的队列 |
请确保用于从 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 配置文件。 |
|
将 URL 添加到包含有关包含 EC2 日志的存储桶的通知的队列 |
|
将 URL 添加到包含关于包含 S3 访问日志的存储桶的通知的队列 |
编辑配置文件后,您需要重新启动 Filebeat。要停止 Filebeat,您可以在终端中按 CTRL + C。现在,让我们通过运行以下命令来重新启动 Filebeat
./filebeat -e
步骤 6:可视化日志
编辑现在,日志正在被发送到 Elasticsearch,我们可以在 Kibana 中对其进行可视化。要查看原始日志,请在主菜单中找到 Discover(发现) 或使用全局搜索字段。
我们在之前步骤中使用的文件集还带有预构建的仪表板,您可以使用它们来可视化数据。在 Kibana 中,在主菜单中找到 Dashboards(仪表板) 或使用全局搜索字段。搜索 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.17.0-amd64.deb sudo dpkg -i metricbeat-8.17.0-amd64.deb
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-8.17.0-x86_64.rpm sudo rpm -vi metricbeat-8.17.0-x86_64.rpm
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-8.17.0-darwin-x86_64.tar.gz tar xzvf metricbeat-8.17.0-darwin-x86_64.tar.gz
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-8.17.0-linux-x86_64.tar.gz tar xzvf metricbeat-8.17.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(开发工具)
。在 Console(控制台) 中,发送以下请求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 中对其进行可视化。要打开 基础设施清单,请在主菜单中找到 Infrastructure(基础设施) 或使用全局搜索字段。确保显示 AWS 源和 EC2 实例
我们在之前步骤中使用的指标集还带有预构建的仪表板,您可以使用它们来可视化数据。在 Kibana 中,在主菜单中找到 Dashboards(仪表板) 或使用全局搜索字段。搜索 EC2 并选择名为:[Metricbeat AWS] EC2 概览 的仪表板
如果您想跟踪 AWS 上的账单,您还可以查看 [Metricbeat AWS] 账单概览 仪表板