Vector aws_ecs_metrics 源:采集 AWS ECS / Fargate 容器指标的配置与实现解析 Vector aws_ecs_metrics 源采集 AWS ECS / Fargate 容器指标的配置与实现解析【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vectorVector 的aws_ecs_metrics源用于周期性抓取运行在 AWS ECS 或 AWS Fargate 中的任务Task的 Docker 容器统计信息并将其转换为 Vector 原生的指标事件metrics。本篇围绕该组件的完整配置参数、指标输出结构与版本发现机制展开并结合 源实现文件 与 解析器实现 说明其底层工作原理。读完本文你将掌握如何在 ECS 任务中部署 Vector 作为 sidecar 采集容器 CPU、内存、块设备 IO 与网络指标以及如何定位常见的端点发现与解析问题。组件定位与基本能力aws_ecs_metrics是一个source类型组件其组件元数据定义在 CUE 数据文件 中从源码结构可以确认以下关键属性交付语义at_least_once至少一次且不支持 ack 确认源码中can_acknowledge返回false部署角色定位为sidecar即与业务容器同 Pod/Task 部署的旁路采集器输出类型仅输出 metrics 流SourceOutput::new_metrics()不产生日志或 trace数据出口方式batch 批量发送组件本身无状态stateful: false采集接口通过 HTTP 协议出站请求 AWS ECS 任务元数据端点task metadata endpoint接口标识为 Amazon ECS task metadata endpoint。组件通过 Feature 开关sources-aws_ecs_metrics参与编译属于 Vector 的标准稳定组件之一。配置参数详解配置结构体为 AwsEcsMetricsSourceConfig共 4 个字段全部可选均有默认值或自动发现逻辑。生成的参数元数据见 generated CUE 文件。endpoint任务元数据端点的基础 URI类型string默认值http://169.254.170.2/v2仅在环境变量均未定义时回退到该值该参数指定 ECS 任务元数据端点的基础 URI。若留空使用默认发现逻辑端点按以下优先级自动发现见 default_endpoint 函数环境变量ECS_CONTAINER_METADATA_URI_V4版本 4 端点环境变量ECS_CONTAINER_METADATA_URI版本 3 端点硬编码回退http://169.254.170.2/v2版本 2 端点link-local 地址。注意源码中常量命名与注释存在交叉METADATA_URI_V4实际指向ECS_CONTAINER_METADATA_URI但行为与官方文档语义一致——先取最新的环境变量逐层回退。version元数据端点版本类型枚举字符串取值v2/v3/v4默认值v2自动发现模式下则跟随环境变量版本发现规则default_version 函数定义了ECS_CONTAINER_METADATA_URI_V4→ 使用v4未定义 V4 变量但定义了ECS_CONTAINER_METADATA_URI→ 使用v3两者都未定义 → 使用v2。版本直接决定实际抓取的子路径。从 stats_endpoint 方法 可以看到v2→{endpoint}/statsv3、v4→{endpoint}/task/stats也就是说v3/v4 端点下统计信息位于task/stats子资源而 v2 端点下直接位于stats子资源。scrape_interval_secs抓取间隔类型uint单位秒默认值15控制两次抓取之间的间隔。实现上基于tokio的定时流IntervalStream::new(time::interval(interval))见 抓取主循环并以take_until(shutdown)挂接 Vector 的全局 shutdown 信号进程退出时循环自然终止。namespace指标命名空间类型string默认值awsecs为输出的指标添加 Vector 指标命名空间便于下游按命名空间区分来源。若设置为空字符串则禁用命名空间源码中build方法会过滤掉空值见 SourceConfig 实现。配置示例以下是一个运行在 ECS Task 内部、依赖环境变量自动发现端点的典型配置sources: ecs: type: aws_ecs_metrics # endpoint: http://169.254.170.254 # 可选显式指定基础 URI # version: v4 # 可选v2 / v3 / v4默认按环境变量自动发现 # scrape_interval_secs: 15 # 可选默认 15 秒 # namespace: awsecs # 可选空字符串表示禁用在 ECS 中ECS_CONTAINER_METADATA_URI(_V4)环境变量由 ECS Agent 注入因此 sidecar 容器内的 Vector 通常无需任何额外配置即可工作。输出指标结构该源输出的全部指标定义在 组件 CUE 元数据 中。所有指标默认携带两个基础标签标签说明示例值container_idECS 容器标识符必填0cf54b87-f0f0-4044-b9d6-20dc54d5c414-4057181352container_nameECS 容器名称必填myapp部分指标会额外携带device如网络接口eth1、块设备202:26368、opIO 操作类型read/write/sync/async/total或cpu核编号0、1标签。CPU 指标cpu_stats指标名类型说明cpu_online_cpusgauge在线 CPU 核数cpu_usage_system_jiffies_totalcounter系统宿主机消耗的 CPU jiffiescpu_usage_usermode_jiffies_totalcounter容器用户态消耗的 CPU jiffiescpu_usage_kernelmode_jiffies_totalcounter容器内核态消耗的 CPU jiffiescpu_usage_total_jiffies_totalcounter容器消耗的 CPU jiffies 总量cpu_throttling_periods_totalcounter限流周期总数cpu_throttled_periods_totalcounter被限流的周期数cpu_throttled_time_seconds_totalcounter被限流的累计时间秒cpu_usage_percpu_jiffies_totalcounter带cpu标签每个 CPU 核消耗的 jiffies解析器还会将precpu_stats上一次采样的 CPU 快照以precpu_前缀同样转换为一组指标供下游计算增量速率使用。内存指标memory_stats内存类指标均为 gauge 或 counter覆盖 Dockerstats输出中的完整 cgroup 字段主要包括基础用量memory_used_bytes、memory_max_used_bytes、memory_limit_bytes分类内存memory_active_anonymous_bytes、memory_active_file_bytes、memory_cache_bytes、memory_dirty_bytes、memory_inactive_anonymous_bytes、memory_inactive_file_bytes、memory_mapped_file_bytes、memory_rss_bytes、memory_rss_hugepages_bytes、memory_unevictable_bytes、memory_writeback_bytes带 total 前缀的层级汇总如memory_total_rss_bytes、memory_total_cache_bytes等含义与上面对应项相同但汇总了层级 cgroup页事件 countermemory_page_faults_total、memory_major_faults_total、memory_page_charged_total对应pgpgin、memory_page_uncharged_total对应pgpgout及对应的total_版本层级限额memory_hierarchical_memory_limit_bytes、memory_hierarchical_memsw_limit_bytesmemory swap 限额。块设备 IO 指标blkio_stats每个*_recursive数组项转换为一条 counter 指标标签中包含devicemajor:minor组合与op小写化blkio_recursive_io_merged_total、blkio_recursive_io_queued_total、blkio_recursive_io_service_bytes_total、blkio_recursive_io_service_time_seconds_total、blkio_recursive_io_serviced_total、blkio_recursive_io_time_seconds_total、blkio_recursive_io_wait_time_seconds_total、blkio_recursive_sectors_total。从 blkio_metrics 解析函数 可以看到单位换算细节io_service_time与io_wait_time的原始值是纳秒除以1e9后输出秒io_time的原始值是毫秒除以1e3后输出秒。这与 解析器注释中引用的 cgroup v1 blkio 控制器文档 语义保持一致。网络指标networks按每个网络接口标签device如eth1输出 8 条 counternetwork_receive_bytes_total、network_receive_packets_total、network_receive_packets_drop_total、network_receive_errs_total、network_transmit_bytes_total、network_transmit_packets_total、network_transmit_packets_drop_total、network_transmit_errs_total。抓取与解析实现解析抓取主循环组件构建时创建HttpClient并启动一个异步循环aws_ecs_metrics 函数按scrape_interval_secs定时构造GET {stats_endpoint}请求仅当响应状态码为200 OK时才收集响应体并调用 parser::parse 解析解析成功后通过out.send_batch(metrics)批量发往下游同时发出BytesReceived与AwsEcsMetricsEventsReceived内部事件非 200 响应、HTTP 传输错误、解析错误分别发出HttpClientHttpResponseError、HttpClientHttpError、AwsEcsMetricsParseError内部事件定义见 内部事件模块组件本身不会因单次失败退出而是在下一个间隔继续重试。响应体解析ECS 统计端点返回的是以容器 ID 为键的 JSON 对象映射。解析器将其反序列化为BTreeMapString, StatsPayload其中 StatsPayload 是一个 untagged 枚举兼容三种取值完整的ContainerStats对象、空对象{}、null——后两者会被安全跳过这保证了部分容器统计缺失时整体解析不会失败。对每个容器解析器以 JSON 键作为container_id标签以name字段作为container_name标签以read字段RFC3339 时间戳作为所有指标的timestamp依次调用blkio_metrics、cpu_metrics、memory_metrics、network_metrics生成指标统一打上 namespace。所有原始数值都按MetricKind::Absolute绝对值建模counter 类型直接取自累计值由下游存储自行做速率推导。测试与验证方式仓库内置了三层可验证的证据链解析器单元测试parser.rs 测试模块使用真实形态的 ECS 统计 JSON 样本断言 blkio / cpu / precpu / memory 各组的指标名、值、标签与时间戳完全匹配。例如断言blkio_recursive_io_service_bytes_total的device标签为202:26368、op标签被小写化为read/write源集成式单元测试test_aws_ecs_metrics_source用 hyper 在本地地址上启动 mock 服务器返回双容器统计 JSON以Version::V4配置运行源并断言network_receive_bytes_total值为329932716.0、命名空间为awsecs、device标签为eth1真实环境集成测试integration_tests 模块通过 Cargo featureaws-ecs-metrics-integration-tests启用见 Cargo.toml依赖ECS_ADDRESS环境变量默认http://localhost:9088配合 AWS 官方的 local container endpoints mock 分别验证v2、v3、v4三条抓取路径。内置遥测指标除业务指标外该源还会暴露 HTTP 客户端通用遥测见 组件 CUE 元数据中的 telemetry 段http_client_responses_total与http_client_response_rtt_seconds可用于监控抓取成功率和端点延迟。结合 内部事件 中的parse_errors_total、component_errors_total等计数器你可以完整观测抓取失败 → 解析失败两类故障路径。适用前提与限制该源必须运行在能访问 ECS 任务元数据端点的网络环境中典型即 Task 内 sidecar 容器在 ECS 外部运行时需手动配置endpoint指向可达的端点输出为 metrics 单流不支持 ack端到端交付语义为至少一次指标时间戳取自响应中的read字段而非本地采集时间跨版本端点行为一致各参数的行为细节含版本发现优先级与子路径差异均以当前仓库源码为准参考文件为 src/sources/aws_ecs_metrics/mod.rs 与 src/sources/aws_ecs_metrics/parser.rs。【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考