

# Fargate 上任务的 Amazon ECS 任务元数据端点版本 4
<a name="task-metadata-endpoint-v4-fargate"></a>

**重要**  
如果您正在使用托管在 Amazon EC2 实例上的 Amazon ECS 任务，请参阅 [Amazon ECS 任务元数据端点](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-metadata-endpoint.html)。

从 Fargate 平台版本 `1.4.0` 开始，名为 `ECS_CONTAINER_METADATA_URI_V4` 的环境变量被注入到任务中的每个容器中。在您查询任务元数据版本 4 端点时，将为任务提供各种任务元数据和 [Docker 统计数据](https://docs.docker.com/engine/api/v1.30/#operation/ContainerStats)。

任务元数据版本 4 端点的功能与版本 3 端点相似，但为容器和任务提供了额外的网络元数据。查询 `/stats` 端点时还可以使用其他网络指标。

默认情况下，对于使用平台版本 `1.4.0` 或更高版本在 AWS Fargate 上运行的所有 Amazon ECS 任务，都会启用任务元数据端点。

**注意**  
为避免将来需要创建新的任务元数据端点版本，可能会将其他元数据添加到版本 4 输出中。我们不会删除任何现有元数据或更改元数据字段名称。

## Fargate 任务元数据端点版本 4 路径
<a name="task-metadata-endpoint-v4-fargate-paths"></a>

以下任务元数据端点可用于容器：

`${ECS_CONTAINER_METADATA_URI_V4}`  
此路径返回容器的元数据。

`${ECS_CONTAINER_METADATA_URI_V4}/task`  
此路径返回任务的元数据，包括与任务相关的所有容器的 ID 和名称列表。有关此端点响应的更多信息，请参阅[Fargate 上任务的 Amazon ECS 任务元数据 v4 JSON 响应](task-metadata-endpoint-v4-fargate-response.md)。

`${ECS_CONTAINER_METADATA_URI_V4}/stats`  
此路径返回 Docker 容器的 Docker 统计数据。有关每个返回的统计信息的更多信息，请参阅 Docker API 文档中的 [ContainerStats](https://docs.docker.com/engine/api/v1.30/#operation/ContainerStats)。  
AWS Fargate 上的 Amazon ECS 任务要求容器在返回容器统计数据之前运行约 1 秒。

`${ECS_CONTAINER_METADATA_URI_V4}/task/stats`  
此路径返回与任务相关的所有容器的 Docker 统计数据 。有关每个返回的统计信息的更多信息，请参阅 Docker API 文档中的 [ContainerStats](https://docs.docker.com/engine/api/v1.30/#operation/ContainerStats)。  
AWS Fargate 上的 Amazon ECS 任务要求容器在返回容器统计数据之前运行约 1 秒。

# Fargate 上任务的 Amazon ECS 任务元数据 v4 JSON 响应
<a name="task-metadata-endpoint-v4-fargate-response"></a>

以下元数据返回自任务元数据端点（`${ECS_CONTAINER_METADATA_URI_V4}/task`）JSON 响应。

`Cluster`  
任务所属的 Amazon ECS 集群的 Amazon 资源名称（ARN）或短名称。

`ServiceName`  
任务所属服务的名称。如果 Fargate 任务与某个服务相关联，则会显示服务名称。

`VPCID`  
Amazon EC2 容器实例的 VPC ID。此字段仅针对 Amazon EC2 实例显示。  
仅在使用 Amazon ECS 容器代理版本 `1.63.1` 或更高版本时包含 `VPCID` 元数据。

`TaskARN`  
容器所属的任务的 Amazon 资源名称（ARN）。

`Family`  
任务的 Amazon ECS 任务定义系列。

`Revision`  
任务的 Amazon ECS 任务定义修订。

`DesiredStatus`  
来自 Amazon ECS 的任务的所需状态。

`KnownStatus`  
来自 Amazon ECS 的任务的已知状态。

`Limits`  
在任务级别上指定的资源限制，如 CPU（以 vCPU 表示）和内存。如果未定义资源限制，则省略此参数。

`PullStartedAt`  
开始提取第一个容器映像时的时间戳。

`PullStoppedAt`  
完成提取最后一个容器映像时的时间戳。

`AvailabilityZone`  
任务所在的可用区。  
可用区元数据仅适用于使用平台版本 1.4 或更高版本（Linux）或者 1.0.0（Windows）的 Fargate 任务。

`LaunchType`  
任务使用的启动类型。使用集群容量提供程序时，这表明任务使用的是 Fargate 还是 EC2 基础设施。  
仅在使用 Amazon ECS Linux 容器代理版本 `1.45.0` 或更高版本（Linux）或者 1.0.0 或更高版本（Windows）时将该 `LaunchType` 元数据包含在内。

`EphemeralStorageMetrics`  
此任务短暂存储的预留大小和当前使用情况。  
Fargate 可保留磁盘空间。该磁盘空间仅由 Fargate 使用。您无需为此付费。它没有显示在这些指标中。但是，您可以在 `df` 等其他工具中看到这种额外的存储空间。  
`Utilized`  
此任务的当前短暂存储使用量（MiB 为单位）。  
`Reserved`  
此任务的预留短暂存储（MiB 为单位）。无法在正在运行的任务中更改短暂存储大小。您可以在任务定义中指定的 `ephermalStorage` 对象以更改短暂存储量。以 GiB 而不是 MiB 为单位指定 `ephermalStorage`。`ephermalStorage` 和 `EphemeralStorageMetrics` 仅适用于 Fargate Linux 平台版本 1.4.0 或更高版本。

`Containers`  
与任务关联的每个容器的容器元数据列表。    
`DockerId`  
容器的 Docker ID。  
当您使用 Fargate 时，id 是一个 32 位十六进制，后面是 10 位数字。  
`Name`  
任务定义中所指定的容器的名称。  
`DockerName`  
提供给 Docker 的容器的名称。Amazon ECS 容器代理为容器生成一个唯一名称，以避免相同任务定义的多个副本在一个实例上运行时发生名称冲突。  
`Image`  
容器的映像。  
`ImageID`  
映像清单的 SHA-256 摘要。这是可用于通过 `repository-url/image@sha256:digest` 格式拉取映像的摘要。  
`Ports`  
对于容器公开的任何端口。如果没有公开的端口，则省略此参数。  
`Labels`  
应用到容器的任何标签。如果没有应用的标签，则省略此参数。  
`DesiredStatus`  
来自 Amazon ECS 的容器的所需状态。  
`KnownStatus`  
来自 Amazon ECS 的容器的已知状态。  
`ExitCode`  
容器的退出代码。如果没有容器退出，则省略此参数。  
`Limits`  
在容器级别上指定的资源限制，如 CPU（以 CPU 单位表示）和内存。如果未定义资源限制，则省略此参数。  
`CreatedAt`  
创建容器时的时间戳。如果尚未创建容器，则省略此参数。  
`StartedAt`  
容器启动时的时间戳。如果尚未启动容器，则省略此参数。  
`FinishedAt`  
容器停止时的时间戳。如果尚未停止容器，则省略此参数。  
`Type`  
容器的类型。在您的任务定义中指定的容器属于 `NORMAL` 类型。您可以省略其他被 Amazon ECS 容器代理用来进行内部任务资源预配置的容器类型。  
`LogDriver`  
容器使用的日志驱动程序。  
该 `LogDriver` 元数据仅在使用Amazon ECS Linux 容器代理版本时包含 `1.45.0` 或更高版本。  
`LogOptions`  
为容器定义的日志驱动程序选项。  
该 `LogOptions` 元数据仅在使用Amazon ECS Linux 容器代理版本时包含 `1.45.0` 或更高版本。  
`ContainerARN`  
容器的 Amazon 资源名称（ARN）。  
该 `ContainerARN` 元数据仅在使用Amazon ECS Linux 容器代理版本时包含 `1.45.0` 或更高版本。  
`Networks`  
容器的网络信息，如网络模式和 IP 地址。如果未定义网络信息，则省略此参数。  
`Snapshotter`  
containerd 用于下载此容器映像的 snapshotter。有效值为 `overlayfs`（默认值）和延迟加载 SOCI 索引时使用的 `soci`。该参数仅适用于在 Linux 平台版本 `1.4.0` 上运行的任务。  
`RestartCount`  
容器已重启的次数。  
仅当为容器启用了重启策略时，才会包含 `RestartCount` 元数据。有关更多信息，请参阅 [使用容器重启策略重启 Amazon ECS 任务中的单个容器](container-restart-policy.md)。

`ClockDrift`  
有关参考时间和系统时间之间差异的信息。此功能使用 Amazon Time Sync Service 来测量时钟精度，并提供容器绑定的时钟误差。有关更多信息，请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》**中的[为您的 Linux 实例设定时间](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html)。    
`ReferenceTime`  
时钟准确度的基础。Amazon ECS 通过 NTP 使用协调世界时（UTC）全球标准，例如 `2021-09-07T16:57:44Z`。  
`ClockErrorBound`  
时钟误差的度量，定义为与 UTC 的偏移量。此错误是参考时间和系统时间之间的差异（以毫秒为单位）。  
`ClockSynchronizationStatus`  
指示系统时间和参考时间之间的最近一次同步尝试是否成功。  
有效值为 `SYNCHRONIZED` 和 ` NOT_SYNCHRONIZED`。

`ExecutionStoppedAt`  
任务的 `DesiredStatus` 变为 `STOPPED` 时的时间戳。这将发生在关键容器变成 `STOPPED` 时。

# Fargate 上任务的 Amazon ECS 任务元数据 v4 示例
<a name="task-metadata-endpoint-v4-fargate-examples"></a>

以下示例显示了在上 AWS Fargate 运行的 Amazon ECS 任务的任务元数据端点的输出示例。

通过容器，您可以在任务元数据端点后面使用 curl 来查询端点，例如 `curl ${ECS_CONTAINER_METADATA_URI_V4}/task`。

## 容器元数据响应示例
<a name="task-metadata-endpoint-v4-fargate-example-container-metadata-response"></a>

查询 `${ECS_CONTAINER_METADATA_URI_V4}` 端点时，仅返回有关容器本身的元数据。下面是一个示例输出。

```
{
    "DockerId": "cd189a933e5849daa93386466019ab50-2495160603",
    "Name": "curl",
    "DockerName": "curl",
    "Image": "111122223333.dkr.ecr.us-west-2.amazonaws.com/curltest:latest",
    "ImageID": "sha256:25f3695bedfb454a50f12d127839a68ad3caf91e451c1da073db34c542c4d2cb",
    "Labels": {
        "com.amazonaws.ecs.cluster": "arn:aws:ecs:us-west-2:111122223333:cluster/default",
        "com.amazonaws.ecs.container-name": "curl",
        "com.amazonaws.ecs.task-arn": "arn:aws:ecs:us-west-2:111122223333:task/default/cd189a933e5849daa93386466019ab50",
        "com.amazonaws.ecs.task-definition-family": "curltest",
        "com.amazonaws.ecs.task-definition-version": "2"
    },
    "DesiredStatus": "RUNNING",
    "KnownStatus": "RUNNING",
    "Limits": {
        "CPU": 10,
        "Memory": 128
    },
    "CreatedAt": "2020-10-08T20:09:11.44527186Z",
    "StartedAt": "2020-10-08T20:09:11.44527186Z",
    "Type": "NORMAL",
    "Networks": [
        {
            "NetworkMode": "awsvpc",
            "IPv4Addresses": [
                "192.0.2.3"
            ],
            "AttachmentIndex": 0,
            "MACAddress": "0a:de:f6:10:51:e5",
            "IPv4SubnetCIDRBlock": "192.0.2.0/24",
            "DomainNameServers": [
                "192.0.2.2"
            ],
            "DomainNameSearchList": [
                "us-west-2.compute.internal"
            ],
            "PrivateDNSName": "ip-10-0-0-222.us-west-2.compute.internal",
            "SubnetGatewayIpv4Address": "192.0.2.0/24"
        }
    ],
    "ContainerARN": "arn:aws:ecs:us-west-2:111122223333:container/05966557-f16c-49cb-9352-24b3a0dcd0e1",
    "LogOptions": {
        "awslogs-create-group": "true",
        "awslogs-group": "/ecs/containerlogs",
        "awslogs-region": "us-west-2",
        "awslogs-stream": "ecs/curl/cd189a933e5849daa93386466019ab50"
    },
    "LogDriver": "awslogs",
    "Snapshotter": "overlayfs"
}
```

## Fargate 上任务的 Amazon ECS 任务元数据 v4 示例
<a name="task-metadata-endpoint-v4-fargate-example-task-metadata-response"></a>

查询 `${ECS_CONTAINER_METADATA_URI_V4}/task` 端点时，将返回有关容器所属的任务的元数据。下面是一个示例输出。

```
{
  "Cluster": "arn:aws:ecs:us-east-1:123456789012:cluster/MyEmptyCluster",
  "TaskARN": "arn:aws:ecs:us-east-1:123456789012:task/MyEmptyCluster/bfa2636268144d039771334145e490c5",
  "Family": "sample-fargate",
  "Revision": "5",
  "DesiredStatus": "RUNNING",
  "KnownStatus": "RUNNING",
  "Limits": {
    "CPU": 0.25,
    "Memory": 512 
  },
  "PullStartedAt": "2023-07-21T15:45:33.532811081Z",
  "PullStoppedAt": "2023-07-21T15:45:38.541068435Z",
  "AvailabilityZone": "us-east-1d",
  "Containers": [
    {
      "DockerId": "bfa2636268144d039771334145e490c5-1117626119",
      "Name": "curl-image",
      "DockerName": "curl-image",
      "Image": "curlimages/curl",
      "ImageID": "sha256:daf3f46a2639c1613b25e85c9ee4193af8a1d538f92483d67f9a3d7f21721827",
      "Labels": {
        "com.amazonaws.ecs.cluster": "arn:aws:ecs:us-east-1:123456789012:cluster/MyEmptyCluster",
        "com.amazonaws.ecs.container-name": "curl-image",
        "com.amazonaws.ecs.task-arn": "arn:aws:ecs:us-east-1:123456789012:task/MyEmptyCluster/bfa2636268144d039771334145e490c5",
        "com.amazonaws.ecs.task-definition-family": "sample-fargate",
        "com.amazonaws.ecs.task-definition-version": "5"
      },
      "DesiredStatus": "RUNNING",
      "KnownStatus": "RUNNING",
      "Limits": { "CPU": 128 },
      "CreatedAt": "2023-07-21T15:45:44.91368314Z",
      "StartedAt": "2023-07-21T15:45:44.91368314Z",
      "Type": "NORMAL",
      "Networks": [
        {
          "NetworkMode": "awsvpc",
          "IPv4Addresses": ["172.31.42.189"],
          "AttachmentIndex": 0,
          "MACAddress": "0e:98:9f:33:76:d3",
          "IPv4SubnetCIDRBlock": "172.31.32.0/20",
          "DomainNameServers": ["172.31.0.2"],
          "DomainNameSearchList": ["ec2.internal"],
          "PrivateDNSName": "ip-172-31-42-189.ec2.internal",
          "SubnetGatewayIpv4Address": "172.31.32.1/20"
        }
      ],
      "ContainerARN": "arn:aws:ecs:us-east-1:123456789012:container/MyEmptyCluster/bfa2636268144d039771334145e490c5/da6cccf7-1178-400c-afdf-7536173ee209",
      "Snapshotter": "overlayfs"
    },
    {
      "DockerId": "bfa2636268144d039771334145e490c5-3681984407",
      "Name": "fargate-app",
      "DockerName": "fargate-app",
      "Image": "public.ecr.aws/docker/library/httpd:latest",
      "ImageID": "sha256:8059bdd0058510c03ae4c808de8c4fd2c1f3c1b6d9ea75487f1e5caa5ececa02",
      "Labels": {
        "com.amazonaws.ecs.cluster": "arn:aws:ecs:us-east-1:123456789012:cluster/MyEmptyCluster",
        "com.amazonaws.ecs.container-name": "fargate-app",
        "com.amazonaws.ecs.task-arn": "arn:aws:ecs:us-east-1:123456789012:task/MyEmptyCluster/bfa2636268144d039771334145e490c5",
        "com.amazonaws.ecs.task-definition-family": "sample-fargate",
        "com.amazonaws.ecs.task-definition-version": "5"
      },
      "DesiredStatus": "RUNNING",
      "KnownStatus": "RUNNING",
      "Limits": { "CPU": 2 },
      "CreatedAt": "2023-07-21T15:45:44.954460255Z",
      "StartedAt": "2023-07-21T15:45:44.954460255Z",
      "Type": "NORMAL",
      "Networks": [
        {
          "NetworkMode": "awsvpc",
          "IPv4Addresses": ["172.31.42.189"],
          "AttachmentIndex": 0,
          "MACAddress": "0e:98:9f:33:76:d3",
          "IPv4SubnetCIDRBlock": "172.31.32.0/20",
          "DomainNameServers": ["172.31.0.2"],
          "DomainNameSearchList": ["ec2.internal"],
          "PrivateDNSName": "ip-172-31-42-189.ec2.internal",
          "SubnetGatewayIpv4Address": "172.31.32.1/20"
        }
      ],
      "ContainerARN": "arn:aws:ecs:us-east-1:123456789012:container/MyEmptyCluster/bfa2636268144d039771334145e490c5/f65b461d-aa09-4acb-a579-9785c0530cbc",
      "Snapshotter": "overlayfs"
    }
  ],
  "LaunchType": "FARGATE",
  "ClockDrift": {
    "ClockErrorBound": 0.446931,
    "ReferenceTimestamp": "2023-07-21T16:09:17Z",
    "ClockSynchronizationStatus": "SYNCHRONIZED"
  },
  "EphemeralStorageMetrics": { 
    "Utilized": 261, 
    "Reserved": 20496 
  }
}
```

## 示例任务统计信息响应
<a name="task-metadata-endpoint-v4-fargate-example-task-stats-response"></a>

查询 `${ECS_CONTAINER_METADATA_URI_V4}/task/stats` 端点时，将返回有关容器所属的任务的网络指标。下面是一个示例输出。

```
{
  "3d1f891cded94dc795608466cce8ddcf-464223573": {
    "read": "2020-10-08T21:24:44.938937019Z",
    "preread": "2020-10-08T21:24:34.938633969Z",
    "pids_stats": {},
    "blkio_stats": {
      "io_service_bytes_recursive": [
        {
          "major": 202,
          "minor": 26368,
          "op": "Read",
          "value": 638976
        },
        {
          "major": 202,
          "minor": 26368,
          "op": "Write",
          "value": 0
        },
        {
          "major": 202,
          "minor": 26368,
          "op": "Sync",
          "value": 638976
        },
        {
          "major": 202,
          "minor": 26368,
          "op": "Async",
          "value": 0
        },
        {
          "major": 202,
          "minor": 26368,
          "op": "Total",
          "value": 638976
        }
      ],
      "io_serviced_recursive": [
        {
          "major": 202,
          "minor": 26368,
          "op": "Read",
          "value": 12
        },
        {
          "major": 202,
          "minor": 26368,
          "op": "Write",
          "value": 0
        },
        {
          "major": 202,
          "minor": 26368,
          "op": "Sync",
          "value": 12
        },
        {
          "major": 202,
          "minor": 26368,
          "op": "Async",
          "value": 0
        },
        {
          "major": 202,
          "minor": 26368,
          "op": "Total",
          "value": 12
        }
      ],
      "io_queue_recursive": [],
      "io_service_time_recursive": [],
      "io_wait_time_recursive": [],
      "io_merged_recursive": [],
      "io_time_recursive": [],
      "sectors_recursive": []
    },
    "num_procs": 0,
    "storage_stats": {},
    "cpu_stats": {
      "cpu_usage": {
        "total_usage": 1137691504,
        "percpu_usage": [
          696479228,
          441212276,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0
        ],
        "usage_in_kernelmode": 80000000,
        "usage_in_usermode": 810000000
      },
      "system_cpu_usage": 9393210000000,
      "online_cpus": 2,
      "throttling_data": {
        "periods": 0,
        "throttled_periods": 0,
        "throttled_time": 0
      }
    },
    "precpu_stats": {
      "cpu_usage": {
        "total_usage": 1136624601,
        "percpu_usage": [
          695639662,
          440984939,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0
        ],
        "usage_in_kernelmode": 80000000,
        "usage_in_usermode": 810000000
      },
      "system_cpu_usage": 9373330000000,
      "online_cpus": 2,
      "throttling_data": {
        "periods": 0,
        "throttled_periods": 0,
        "throttled_time": 0
      }
    },
    "memory_stats": {
      "usage": 6504448,
      "max_usage": 8458240,
      "stats": {
        "active_anon": 1675264,
        "active_file": 557056,
        "cache": 651264,
        "dirty": 0,
        "hierarchical_memory_limit": 536870912,
        "hierarchical_memsw_limit": 9223372036854772000,
        "inactive_anon": 0,
        "inactive_file": 3088384,
        "mapped_file": 430080,
        "pgfault": 11034,
        "pgmajfault": 5,
        "pgpgin": 8436,
        "pgpgout": 7137,
        "rss": 4669440,
        "rss_huge": 0,
        "total_active_anon": 1675264,
        "total_active_file": 557056,
        "total_cache": 651264,
        "total_dirty": 0,
        "total_inactive_anon": 0,
        "total_inactive_file": 3088384,
        "total_mapped_file": 430080,
        "total_pgfault": 11034,
        "total_pgmajfault": 5,
        "total_pgpgin": 8436,
        "total_pgpgout": 7137,
        "total_rss": 4669440,
        "total_rss_huge": 0,
        "total_unevictable": 0,
        "total_writeback": 0,
        "unevictable": 0,
        "writeback": 0
      },
      "limit": 9223372036854772000
    },
    "name": "curltest",
    "id": "3d1f891cded94dc795608466cce8ddcf-464223573",
    "networks": {
      "eth1": {
        "rx_bytes": 2398415937,
        "rx_packets": 1898631,
        "rx_errors": 0,
        "rx_dropped": 0,
        "tx_bytes": 1259037719,
        "tx_packets": 428002,
        "tx_errors": 0,
        "tx_dropped": 0
      }
    },
    "network_rate_stats": {
      "rx_bytes_per_sec": 43.298687872232854,
      "tx_bytes_per_sec": 215.39347269466413
    }
  }
}
```