AWS Fargate 模块
编辑AWS Fargate 模块
编辑此功能为 Beta 版,可能会发生更改。其设计和代码不如官方 GA 功能成熟,按“原样”提供,不提供任何保证。Beta 功能不受官方 GA 功能的支持 SLA 的约束。
此模块可用于从 Fargate 上的 Amazon ECS 收集容器日志。它使用 Filebeat 的 awscloudwatch
输入来从 AWS CloudWatch 中的一个或多个日志流中获取日志文件。通过在任务定义中的 logConfiguration
部分下添加 awslogs
日志驱动程序,可以将 Fargate 启动类型任务中所有容器的日志发送到 CloudWatch。例如,可以通过将此部分添加到 containerDefinitions
中,将 logConfiguration
添加到任务定义中
{ "logDriver":"awslogs", "options":{ "awslogs-group":"awslogs-wordpress", "awslogs-region":"us-west-2", "awslogs-stream-prefix":"awslogs-example" } }
awsfargate
模块需要配置 AWS 凭证才能进行 AWS API 调用。用户可以使用 access_key_id
、secret_access_key
和/或 session_token
,或使用 role_arn
AWS IAM 角色,或使用共享的 AWS 凭证文件。
有关更多详细信息,请参阅 AWS 凭证选项。
模块配置
编辑示例配置
- module: awsfargate log: enabled: true var.credential_profile_name: test-filebeat var.log_group_arn: arn:aws:logs:us-east-1:1234567890:log-group:/ecs/test-log-group:*
-
var.log_group_arn
- 要从中收集日志的日志组的 ARN。
-
var.log_group_name
- 要从中收集日志的日志组的名称。注意:当给出 log_group_name 时,需要 region_name。
-
var.region_name
- 指定日志组所属的区域。
-
var.log_streams
- Filebeat 从中收集日志事件的日志流名称的字符串列表。
-
var.log_stream_prefix
- 一个字符串,用于过滤结果,仅包括名称以此前缀开头的日志流的日志事件。
-
var.start_position
-
start_position
允许用户指定此输入是从beginning
还是从end
读取日志文件。-
beginning
:从日志组的开头读取(默认)。 -
end
:仅从当前时间减去scan_frequency
开始读取新消息
-
-
var.scan_frequency
- 此配置参数设置 Filebeat 从指定日志组检查新日志事件的频率。默认的
scan_frequency
为 1 分钟,这意味着 Filebeat 将休眠 1 分钟,然后再查询新的日志。 -
var.api_timeout
- AWS API 可以花费的最长时间。如果超过超时时间,AWS API 将被中断。消息的默认 AWS API 超时时间为 120 秒。最小值为 0 秒。
-
var.api_sleep
- 这用于在同一收集周期内 AWS
FilterLogEvents
API 调用之间休眠。FilterLogEvents
API 的配额为每秒 5 个事务 (TPS)/帐户/区域。默认情况下,api_sleep
为 200 毫秒。只有当多个 Filebeat 或多个 Filebeat 输入从同一区域和 AWS 帐户收集日志时,才应调整此值。 -
var.shared_credential_file
- AWS 凭证文件的文件名。
-
var.credential_profile_name
- AWS 凭证配置文件名称。
-
var.access_key_id
- 访问密钥的第一部分。
-
var.secret_access_key
- 访问密钥的第二部分。
-
var.session_token
- 使用临时安全凭证时必需。
-
var.role_arn
- 要承担的 AWS IAM 角色。
-
var.endpoint
- 用于访问 AWS API 的自定义端点。
AWS 凭证配置
编辑要配置 AWS 凭证,请将凭证放入 Filebeat 配置中,或使用共享的凭证文件,如下例所示。
配置参数
编辑- access_key_id:访问密钥的第一部分。
- secret_access_key:访问密钥的第二部分。
- session_token:使用临时安全凭证时必需。
- credential_profile_name:共享凭证文件中的配置文件名称。
- shared_credential_file:共享凭证文件的目录。
- role_arn:要承担的 AWS IAM 角色。
- external_id:在另一个帐户中承担角色时要使用的外部 ID,请参阅 AWS 文档,了解如何使用外部 ID。
-
proxy_url:用于连接到 AWS Web 服务的代理的 URL。语法为
http(s)://<IP/主机名>:<端口>
-
fips_enabled:启用此选项会指示 Filebeat 使用服务的 FIPS 端点。Filebeat 使用的所有服务都与 FIPS 兼容,除了
tagging
,但只有某些区域与 FIPS 兼容。有关 FIPS 端点和区域的完整列表,请参阅 https://aws.amazon.com/compliance/fips/ 或相应的服务页面 https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html。 - ssl:这指定 SSL/TLS 配置。如果缺少 ssl 部分,则主机的 CA 将用于 HTTPS 连接。有关更多信息,请参阅 SSL。
- default_region:如果没有设置其他区域,则要查询的默认区域。大多数 AWS 服务都提供可用于发出请求的区域端点。某些服务(例如 IAM)不支持区域。如果没有任何其他方式(环境变量、凭证或实例配置文件)提供区域,则将使用此处设置的值。
- assume_role.duration:请求的承担角色会话的持续时间。默认值为 15 分钟(如果未设置)。AWS 允许的最大会话持续时间在 1 小时到 12 小时之间,具体取决于您的最大会话持续时间策略。
- assume_role.expiry_window:expiry_window 将允许在会话过期之前刷新会话。这有利于防止过期的令牌导致请求因 ExpiredTokenException 而失败。
支持的格式
编辑本节中的示例引用 Metricbeat,但与 AWS 进行身份验证的凭证选项是相同的,无论使用哪个 Beat。
- 使用
access_key_id
、secret_access_key
和/或session_token
用户可以将凭证放入 Metricbeat 模块配置中,也可以改用环境变量 AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
和/或 AWS_SESSION_TOKEN
。
如果在 Docker 上运行,这些环境变量应作为 docker 命令的一部分添加。例如,使用 Metricbeat
$ docker run -e AWS_ACCESS_KEY_ID=abcd -e AWS_SECRET_ACCESS_KEY=abcd -d --name=metricbeat --user=root --volume="$(pwd)/metricbeat.aws.yml:/usr/share/metricbeat/metricbeat.yml:ro" docker.elastic.co/beats/metricbeat:7.11.1 metricbeat -e -E cloud.auth=elastic:1234 -E cloud.id=test-aws:1234
示例 metricbeat.aws.yml
如下所示
metricbeat.modules: - module: aws period: 5m access_key_id: ${AWS_ACCESS_KEY_ID} secret_access_key: ${AWS_SECRET_ACCESS_KEY} session_token: ${AWS_SESSION_TOKEN} metricsets: - ec2
也可以通过文件添加环境变量。例如
$ cat env.list AWS_ACCESS_KEY_ID=abcd AWS_SECRET_ACCESS_KEY=abcd $ docker run --env-file env.list -d --name=metricbeat --user=root --volume="$(pwd)/metricbeat.aws.yml:/usr/share/metricbeat/metricbeat.yml:ro" docker.elastic.co/beats/metricbeat:7.11.1 metricbeat -e -E cloud.auth=elastic:1234 -E cloud.id=test-aws:1234
- 使用
credential_profile_name
和/或shared_credential_file
如果未提供 access_key_id
、secret_access_key
和 role_arn
,则 filebeat 将检查 credential_profile_name
。如果对不同的工具或应用程序使用不同的凭证,可以使用配置文件在同一配置文件中配置多个访问密钥。如果没有提供 credential_profile_name
,将使用默认配置文件。
shared_credential_file
是可选的,用于指定共享凭证文件的目录。如果为空,则将使用默认目录。在 Windows 中,共享凭证文件位于 C:\Users\<yourUserName>\.aws\credentials
。对于 Linux、macOS 或 Unix,该文件位于 ~/.aws/credentials
。当作为服务运行时,主路径取决于管理该服务的用户,因此可以使用 shared_credential_file
参数来避免歧义。有关更多详细信息,请参阅 创建共享凭证文件。
- 使用
role_arn
role_arn
用于指定要承担哪个 AWS IAM 角色以生成临时凭证。如果提供了 role_arn
,filebeat 将检查是否提供了访问密钥。如果没有,filebeat 将检查凭证配置文件名称。如果两者都没有提供,则将使用默认的凭证配置文件。请确保在凭证配置文件或访问密钥下提供了凭证。
如果在 Docker 上运行,则需要通过卷挂载提供凭证文件。例如,使用 Metricbeat
docker run -d --name=metricbeat --user=root --volume="$(pwd)/metricbeat.aws.yml:/usr/share/metricbeat/metricbeat.yml:ro" --volume="/Users/foo/.aws/credentials:/usr/share/metricbeat/credentials:ro" docker.elastic.co/beats/metricbeat:7.11.1 metricbeat -e -E cloud.auth=elastic:1234 -E cloud.id=test-aws:1234
示例 metricbeat.aws.yml
如下所示
metricbeat.modules: - module: aws period: 5m credential_profile_name: elastic-beats shared_credential_file: /usr/share/metricbeat/credentials metricsets: - ec2
-
在 Filebeat 配置中使用 AWS 凭证
filebeat.inputs: - type: aws-s3 queue_url: https://sqs.us-east-1.amazonaws.com/123/test-queue access_key_id: '<access_key_id>' secret_access_key: '<secret_access_key>' session_token: '<session_token>'
或
filebeat.inputs: - type: aws-s3 queue_url: https://sqs.us-east-1.amazonaws.com/123/test-queue access_key_id: '${AWS_ACCESS_KEY_ID:""}' secret_access_key: '${AWS_SECRET_ACCESS_KEY:""}' session_token: '${AWS_SESSION_TOKEN:""}'
-
使用 IAM 角色 ARN
filebeat.inputs: - type: aws-s3 queue_url: https://sqs.us-east-1.amazonaws.com/123/test-queue role_arn: arn:aws:iam::123456789012:role/test-mb
-
使用共享的 AWS 凭证文件
filebeat.inputs: - type: aws-s3 queue_url: https://sqs.us-east-1.amazonaws.com/123/test-queue credential_profile_name: test-fb
AWS 凭证类型
编辑可以使用两种不同的 AWS 凭证类型:访问密钥和临时安全凭证。
- 访问密钥
AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
是访问密钥的两个部分。它们是 IAM 用户或 AWS 账户根用户的长期凭证。有关更多详细信息,请参阅 AWS 访问密钥和秘密访问密钥。
- IAM 角色 ARN
IAM 角色是您可以在您的账户中创建的 IAM 身份,它具有特定的权限,这些权限决定了该身份在 AWS 中可以做什么和不能做什么。角色不具有标准的长期凭证,例如密码或访问密钥。相反,当您承担角色时,它会为您提供角色会话的临时安全凭证。IAM 角色 Amazon Resource Name (ARN) 可用于指定要承担哪个 AWS IAM 角色以生成临时凭证。有关更多详细信息,请参阅AssumeRole API 文档。
以下是使用 AWS CLI 为 Metricbeat 设置 IAM 角色的步骤。请将 123456789012
替换为您自己的账户 ID。
步骤 1. 创建 example-policy.json
文件以包含所有权限
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:GetObject", "sqs:ReceiveMessage" ], "Resource": "*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "sqs:ChangeMessageVisibility", "Resource": "arn:aws:sqs:us-east-1:123456789012:test-fb-ks" }, { "Sid": "VisualEditor2", "Effect": "Allow", "Action": "sqs:DeleteMessage", "Resource": "arn:aws:sqs:us-east-1:123456789012:test-fb-ks" }, { "Sid": "VisualEditor3", "Effect": "Allow", "Action": [ "sts:AssumeRole", "sqs:ListQueues", "tag:GetResources", "ec2:DescribeInstances", "cloudwatch:GetMetricData", "ec2:DescribeRegions", "iam:ListAccountAliases", "sts:GetCallerIdentity", "cloudwatch:ListMetrics" ], "Resource": "*" } ] }
步骤 2. 使用 aws iam create-policy
命令创建 IAM 策略
$ aws iam create-policy --policy-name example-policy --policy-document file://example-policy.json
步骤 3. 创建 JSON 文件 example-role-trust-policy.json
,该文件定义 IAM 角色的信任关系
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "sts:AssumeRole" } }
步骤 4. 创建 IAM 角色并附加策略
$ aws iam create-role --role-name example-role --assume-role-policy-document file://example-role-trust-policy.json $ aws iam attach-role-policy --role-name example-role --policy-arn "arn:aws:iam::123456789012:policy/example-policy"
完成这些步骤后,IAM 角色 ARN 可用于 Metricbeat aws
模块中的身份验证。
- 临时安全凭证
临时安全凭证具有有限的生命周期,它由访问密钥 ID、秘密访问密钥和安全令牌组成,这些令牌通常是从 GetSessionToken
返回的。启用 MFA 的 IAM 用户在调用 GetSessionToken
时需要提交 MFA 代码。有关更多详细信息,请参阅临时安全凭证。sts get-session-token
AWS CLI 可用于生成临时凭证。例如,对于启用 MFA 的情况:
aws> sts get-session-token --serial-number arn:aws:iam::1234:mfa/[email protected] --token-code 456789 --duration-seconds 129600
由于临时安全凭证是短期的,因此在过期后,用户需要生成新的凭证并使用新凭证修改 aws.yml 配置文件。除非为 Metricbeat 启用了实时重新加载功能,否则用户需要在更新配置文件后手动重启 Metricbeat,才能继续收集 Cloudwatch 指标。如果在旧凭证过期之前没有用新凭证更新配置文件,这将导致数据丢失。对于 Metricbeat,我们建议用户在配置文件中使用访问密钥来启用 aws 模块,这样可以调用 AWS API,而无需频繁生成新的临时凭证和更新配置。
IAM 策略是一个实体,用于定义对 AWS 环境中对象的权限。需要在 IAM 用户的策略中添加特定权限,以授权 Metricbeat 收集 AWS 监控指标。有关所需权限,请参阅每个指标集的文档。
字段
编辑有关模块中每个字段的描述,请参阅导出的字段部分。