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/[email protected] --token-code 456789 --duration-seconds 129600

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

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

字段

编辑

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