New

The executive guide to generative AI

Read more

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_idsecret_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_idsecret_access_key 和/或 session_token

用户可以将凭证放入 Metricbeat 模块配置中,也可以改用环境变量 AWS_ACCESS_KEY_IDAWS_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_idsecret_access_keyrole_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_IDAWS_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/your-email@example.com --token-code 456789 --duration-seconds 129600

由于临时安全凭证是短期的,因此在过期后,用户需要生成新的凭证并使用新凭证修改 aws.yml 配置文件。除非为 Metricbeat 启用了实时重新加载功能,否则用户需要在更新配置文件后手动重启 Metricbeat,才能继续收集 Cloudwatch 指标。如果在旧凭证过期之前没有用新凭证更新配置文件,这将导致数据丢失。对于 Metricbeat,我们建议用户在配置文件中使用访问密钥来启用 aws 模块,这样可以调用 AWS API,而无需频繁生成新的临时凭证和更新配置。

IAM 策略是一个实体,用于定义对 AWS 环境中对象的权限。需要在 IAM 用户的策略中添加特定权限,以授权 Metricbeat 收集 AWS 监控指标。有关所需权限,请参阅每个指标集的文档。

字段

编辑

有关模块中每个字段的描述,请参阅导出的字段部分。

Was this helpful?
Feedback