
Vector 端到端测试实战基于 datadog_agent 源与 datadog_logs 接收端的 Agent→Vector 日志链路验证【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector本篇文章以当前仓库 tests/e2e/datadog-logs/README.md 为核心骨架系统讲解 Vector 端到端E2E测试中Datadog Agent 采集日志 → Vector 转发 → 后端接收这一完整链路的搭建、配置与验证方法。你将掌握该测试如何生成模拟日志、如何同时拉起两套 Agent 容器做基线对比Baseline vs 待测链路、如何在 compose.yaml 与 test.yaml 中精确控制拓扑与断言并能沿着 datadog_agent 源与 datadog_logs 接收端的源码理解其底层工作机理。一、测试背景为什么要做 Agent→Vector 日志 E2E 验证在真实的可观测性架构中Datadog Agent 常被部署在主机或 Kubernetes 节点上负责采集日志而 Vector 作为高性能数据管道负责汇聚、转换与转发。此时存在两种数据流基线链路Agent onlyAgent 把日志直接发送给 Datadog 后端本测试用fakeintake模拟后端接收待测链路Agent → VectorAgent 把日志发送给 Vector由 Vector 的datadog_agent源接收再经datadog_logs接收端转发给另一个fakeintake。该测试的判定思路非常直接两套fakeintake收到的数据在事件的接收时序与事件内容上应当形态一致只有时间戳本身不保证完全对齐timestamps themselves are not guaranteed to align。这意味着测试验证的是经过 Vector 转发后日志没有丢失、没有变形、顺序与内容与基线一致而不是毫秒级的时间一致性。该测试覆盖的两个核心组件在仓库中的对应实现为源端datadog_agent 源日志部分见 logs.rs接收端datadog_logs 接收端。二、测试整体架构与数据流根据 tests/e2e/datadog-logs/README.md 与 config/compose.yaml整个测试环境由 5 个 Docker Compose 服务构成服务作用数据流角色log_generator使用flog镜像生成随机 JSON 日志写入共享卷/var/log/a_custom.log数据源头datadog-agent基线链路中的 Agent将日志直发fakeintake-agent基线Baselinedatadog-agent-vector待测链路中的 Agent将日志发送到 Vector 服务待测Comparevector运行 Vectordatadog_agent源接收 Agent 日志datadog_logs接收端转发被测对象fakeintake-agent/fakeintake-vectorDatadog 官方fakeintake模拟接收端被测试运行器查询比对验证端点数据流示意log_generator (flog) │ 写入 /var/log/a_custom.log共享卷 ▼ 两个 Datadog Agent 容器分别 tail 该文件 │ ├─ datadog-agent基线 ──HTTP──▶ fakeintake-agent │ └─ datadog-agent-vector待测 ──HTTP──▶ vector(:8181) │ datadog_agent 源 ▼ datadog_logs 接收端 │ ▼ fakeintake-vector在 Compose 配置中可以看到关键拓扑约束log_generator通过depends_on等待两个 Agent 容器就绪后才开始写日志compose.yaml避免日志早于 Agent 启动造成丢失datadog-agent依赖fakeintake-agentdatadog-agent-vector依赖vectorvector又依赖fakeintake-vector保证下游先于上游就绪两个 Agent 共享同一个日志卷log_path挂载到/var/log/确保两套链路读到完全相同的原始数据这是比对成立的前提vector服务复用集成测试镜像${CONFIG_VECTOR_IMAGE}该镜像中已编译好 Vector并以-vvv详细日志级别运行配置文件来自仓库内的 data/vector.yaml。三、测试运行器如何启动、执行与断言按照 tests/e2e/README.md 的说明该目录属于vdev工具执行的端到端测试框架每个测试目录都包含config/compose.yaml容器编排与config/test.yaml测试描述含版本矩阵。3.1 测试描述文件解读config/test.yaml 是理解该测试行为的入口features: - e2e-tests-datadog test: e2e test_filter: datadog::logs:: runner: env: EXPECTED_LOG_EVENTS: 1000 VECTOR_RECEIVE_PORT: 8081 FAKE_INTAKE_AGENT_ENDPOINT: http://fakeintake-agent:80 FAKE_INTAKE_VECTOR_ENDPOINT: http://fakeintake-vector:80 matrix: agent_version: [latest, 6, 7] paths: - src/common/datadog.rs - src/sources/datadog_agent/** - src/internal_events/datadog_* - src/sinks/datadog/logs/** - src/sinks/util/** - tests/e2e/datadog-logs/**关键信息EXPECTED_LOG_EVENTS: 1000与flog生成-n 1000条日志对应断言两端fakeintake都应收到 1000 条事件FAKE_INTAKE_AGENT_ENDPOINT与FAKE_INTAKE_VECTOR_ENDPOINT测试运行器分别查询两个 fakeintake 做一致性比对matrix.agent_version: [latest, 6, 7]对 Datadog Agent 的 nightly 最新版以及稳定版 v6、v7 分别验证paths采用 micromatch 表达式只有这些路径源端、接收端、datadog 公共模块、工具类、本测试目录发生变化时才触发该 E2E 测试避免无关改动白白消耗 CI 资源。3.2 运行命令测试框架支持三种运行方式详见 tests/e2e/README.md# 列出所有 e2e 测试及其矩阵环境 cargo vdev e2e show # 运行单个测试环境的组合如 agent_version7 cargo vdev e2e test datadog-logs 7 # 运行该测试的全部矩阵环境 cargo vdev e2e test datadog-logs # 分步执行先启动环境可反复跑测试最后停止 cargo vdev e2e start datadog-logs ENVIRONMENT cargo vdev e2e test datadog-logs [ENVIRONMENT] cargo vdev e2e stop datadog-logs [ENVIRONMENT]这里datadog::logs::是测试运行器的 filter 前缀指向测试执行文件 tests/e2e/datadog-logs/mod.rs目录内的 mod.rs 以#[tokio::test]方式承载断言逻辑vdev会负责docker compose up、注入环境变量、运行测试后down的完整生命周期。3.3 E2E 与集成测试的区别按 tests/e2e/README.md 的界定E2E 测试是黑盒测试在 Docker Compose 中把完整的 Vector 实例作为服务之一与外部系统Datadog Agent、Splunk、OTEL Collector 等一起运行而集成测试则是在测试运行器容器内编译并运行 Vector隔离测试单个组件。本测试显然属于前者——它验证的是多组件协同的端到端行为。四、三个关键配置文件逐行拆解4.1 基线 Agent 配置agent_only.yamldata/agent_only.yaml 定义基线链路的 Agent 行为api_key: DEADBEEF log_level: debug # 关闭不需要的功能 inventories_configuration_enabled: false enable_metadata_collection: false enable_gohai: false cloud_provider_metadata: [] apm_config: enabled: false process_config: container_collection: enabled: false process_discovery: enabled: false disable_realtime_checks: true use_dogstatsd: false # 配置日志 logs_enabled: true logs_config: logs_dd_url: fakeintake-agent:80 logs_no_ssl: true force_use_http: true batch_wait: 1 # fakeintake 要求配置 dd_url dd_url: http://fakeintake-agent:80要点api_key: DEADBEEF是测试用假 Key仅用于让 Agent 正常初始化logs_config.logs_dd_url指向fakeintake-agent:80即基线链路的后端force_use_http: true强制 Agent 使用 HTTP 方式提交日志而非 TCP与 Vector 端datadog_agent源所采用的 HTTP 协议一致batch_wait: 1将 Agent 的批量等待时间压到 1 秒加快测试期间日志投递速度。4.2 待测 Agent 配置agent_vector.yamldata/agent_vector.yaml 与基线配置几乎相同唯一区别在日志出口# 发送到 vector vector: logs: enabled: true url: http://vector:8181url: http://vector:8181对应 Vector 端datadog_agent源监听的地址0.0.0.0:8181见下文 vector.yaml。注意这里仍保留了dd_url: http://fakeintake-agent:80因为 fakeintake 的 docker 运行方式要求该字段存在但真正的日志流已改道 Vector。4.3 Vector 管道配置vector.yamldata/vector.yaml 是本测试中被测对象的核心仅由一对源/接收端构成data_dir: /tmp/ sources: agent: type: datadog_agent address: 0.0.0.0:8181 multiple_outputs: true disable_metrics: true disable_traces: true store_api_key: false sinks: dd: inputs: - agent.logs type: datadog_logs default_api_key: unused endpoint: http://fakeintake-vector:80 batch: timeout_secs: 1逐项说明sources.agent声明datadog_agent源监听0.0.0.0:8181接收 Agent 上报multiple_outputs: true启用多输出端口使源按logs/metrics/traces分流因此接收端可引用agent.logsdisable_metrics: true、disable_traces: true本测试只关心日志关闭另外两个协议的解析以节省资源store_api_key: false不存储上报请求中的 API Key。sinks.dd声明datadog_logs接收端inputs: [agent.logs]订阅源的多输出端口agent.logs即仅日志流default_api_key: unused测试环境不需要真实 Key仅占位endpoint: http://fakeintake-vector:80覆盖默认 Datadog 后端地址指向待测链路的fakeintake-vectorbatch.timeout_secs: 1把批量超时压到 1 秒与 Agent 侧batch_wait: 1配合保证 1000 条日志能在合理时间内全部投递。从源码结构看该接收端在 src/sinks/datadog/logs/config.rs 中定义其默认批处理常量MAX_PAYLOAD_BYTES 5_000_000、BATCH_GOAL_BYTES 4_250_000、BATCH_MAX_EVENTS 1_000、BATCH_DEFAULT_TIMEOUT_SECS 5.0见 config.rs说明 Datadog API 对未压缩 payload 有 5MB 硬上限因此 Vector 有意将批量目标压在 750KB 余量以内避免 payload 过大被后端丢弃测试配置显式把timeout_secs调小到 1 秒就是要在保留这些保护机制的前提下加快测试节奏。4.4 自定义日志采集配置logs.conf.d/custom_logs.d/conf.yamldata/logs.conf.d/custom_logs.d/conf.yaml 是 Agent 侧的自定义日志 checklogs: - type: file path: /var/log/a_custom.log service: an_app source: custom_log start_position: beginning两个 Agent 容器都通过 bind mount 把logs.conf.d挂载到/conf.d从而 tail 同一份/var/log/a_custom.log。start_position: beginning确保从文件开头读取使两端 Agent 都能消费到 flog 写入的全部 1000 条日志保证基线数据与待测数据量一致。五、源码侧印证datadog_agent 源与 datadog_logs 接收端5.1 datadog_agent 源的多输出分流从仓库源码结构看src/sources/datadog_agent/ 目录将协议处理拆分为 logs.rs、metrics.rs、traces.rs 三个模块并在 mod.rs 中统一装配。这正好解释了multiple_outputs: true的意义源根据 HTTP 请求路径/内容将不同数据类型路由到logs、metrics、traces多个输出端口下游接收端通过agent.logs这样的限定名只订阅日志流。5.2 datadog_logs 接收端的批量与请求语义src/sinks/datadog/logs/config.rs 的注释与常量直接说明了生产环境的约束Datadog API 对未压缩 payload 有 5MB 硬上限超过即丢弃MAX_PAYLOAD_BYTES 5_000_000为避免在构建 payload 时逐个事件序列化带来的 CPU 开销Vector 把批量目标设为4_250_000字节低于 5MB 上限约 750KB因此个别极端场景如大量转义双引号下可能出现超限 payload但实践中极为罕见批量还受BATCH_MAX_EVENTS 1_000单批最多 1000 事件与BATCH_DEFAULT_TIMEOUT_SECS 5.0默认超时 5 秒约束。这正是 E2E 测试中设置batch.timeout_secs: 1的底层原因保持上述默认保护不变仅压缩超时窗口使测试在秒级完成 1000 条日志的投递与比对。另外该配置还支持conforms_as_agent选项config.rs开启后会将事件规范化为 Datadog Agent 标准并以DD-PROTOCOL: agent-json头发送请求——这一能力与本测试Agent 直发 vs Agent→Vector 转发两种形态的数据一致性目标相呼应。六、测试验证逻辑与判定依据综合 README 与 Compose/测试配置验证逻辑可归纳为三步等量EXPECTED_LOG_EVENTS: 1000断言两个fakeintake均收到与flog -n 1000一致的 1000 条事件同形测试运行器同时查询FAKE_INTAKE_AGENT_ENDPOINT与FAKE_INTAKE_VECTOR_ENDPOINT比对两套数据的接收时序形态与事件内容是否一致容差时间戳本身不做逐字节对齐断言因为经过 Vector 转发后事件到达后端的绝对时间必然存在偏移只要何时收到、内容如何的形状一致即视为通过。也就是说该测试验证的核心是Vector 作为中转管道不应改变日志事件的内容与相对顺序——这正是数据管道最基本也最重要的正确性保证。七、扩展阅读与相关资源E2E 测试框架总览tests/e2e/README.md被测源组件datadog_agent 源被测接收端组件datadog_logs 接收端同类 E2E 用例可作参照datadog 指标 E2E 测试、datadog/metrics 测试如果需要把该测试扩展到新场景例如验证 API Key 透传、增加 trace 链路、或改用真实 Datadog 后端做冒烟验证可直接基于 tests/e2e/datadog-logs/ 目录内的 Compose 与数据配置进行复制改造并保持同一份输入数据 双链路比对的验证范式。【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考