Vector datadog_agent 源组件:接收 Datadog Agent 的日志、指标与追踪数据
发布时间:2026/9/13 4:48:50 作者:尧图编辑部 阅读量:1,286

Vector datadog_agent 源组件接收 Datadog Agent 的日志、指标与追踪数据【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector本文以 Vector 的datadog_agent源组件文档为主体完整覆盖其配置参数、Datadog Agent 侧的接入方法、HTTP 端点与事件字段语义、超时处理机制等核心内容并结合当前仓库中src/sources/datadog_agent/的源码实现说明日志/指标/追踪的解码链路、API Key 提取逻辑与内部指标来源帮助你在现有 Datadog Agent 采集体系下把观测数据改道或分流进 Vector 管道。组件概览datadog_agent源通过 HTTP/HTTPS 接收由 Datadog Agent 采集的观测数据可同时承载三类外加 LLM Observability事件流日志logsJSON 编码的日志批次接收来自/v1/input/旧路径与/api/v2/logs/新路径的 POST 请求指标metrics支持/api/v1/series、/api/v2/seriesv2 为 Protobuf 编码与/api/beta/sketchesDDSketch 分布直方图三类端点追踪traces接收/api/v0.2/traces的 Protobuf 追踪负载LLM Observabilityllmobs接收/api/v2/llmobs及evp_proxy代理路径下的 LLM 观测事件。以上端点划分可直接在 源码 的build_warp_filters及四个子模块 logs.rs、metrics.rs、traces.rs、llmobs.rs 中确认。组件的关键属性来自生成文档所用的 CUE 数据 website/cue/reference/components/sources/datadog_agent.cue属性值说明开发状态stable稳定组件投递语义at_least_once至少一次投递出口方式batch以批为单位向下游发送部署角色aggregator, sidecar适合作为聚合器或 sidecar 部署默认监听端口8080见配置示例传输协议HTTP支持可选 TLS分帧framing默认bytes按 HTTP body 整体解码多行支持不支持multiline 未启用端到端确认支持acknowledgements 可用配置参数详解该组件的完整配置定义由 src/sources/datadog_agent/mod.rs 中的DatadogAgentConfig结构体描述参数元数据同时收录在 website/cue/reference/components/sources/generated/datadog_agent.cue。逐项说明如下参数类型默认值说明addressstring必填监听的 socket 地址必须包含端口如0.0.0.0:80、localhost:80tlsobject无配置入站连接的 TLS 选项TlsEnableableConfig不启用则使用纯 HTTPstore_api_keybooltrue当事件携带 Datadog API key 时将其存入事件元数据若事件随后发往 Datadog sink该 key 会被复用disable_logsboolfalse设为true时不再接收日志disable_metricsboolfalse设为true时不再接收指标disable_tracesboolfalse设为true时不再接收追踪disable_llmobsboolfalse设为true时不再接收 LLM Observability 事件multiple_outputsboolfalse设为true时日志/指标/追踪及 llmobs分别写入不同输出端口parse_ddtagsboolfalse设为true时日志事件中的ddtags字符串逗号分隔的 key:value 标签列表会被解析展开为数组split_metric_namespacebooltrue设为true时指标名在第一个.处切分为 namespace 与 name如system.cpu.usage→ namespacesystem namecpu.usage若下游 sink 使用默认 namespace可设为false保留完整指标名send_timeout_secsfloat无向下游发送事件的超时时间秒超时后以 HTTP 503 响应详见下文“请求超时处理”framingobjectbytesHTTP body 的分帧配置decodingobject无原始字节的解码配置部分解码器还能决定事件输出类型log/metric/tracekeepaliveobject默认HTTP 服务 keepalive 参数TCP keepalive、max_connection_age_secs等acknowledgementsbool无已废弃。源级开关对确认行为没有效果请在全局配置或 sink 级启用确认注意disable_logs、disable_metrics、disable_traces、disable_llmobs不能同时全为true源码中会直接报错 At least one of the supported data type shall be enabled见 mod.rs 的build_warp_filters。配置示例sources: dd_agent: type: datadog_agent address: 0.0.0.0:9000 # 必须包含端口Datadog Agent 将向此地址发数据 tls: # 可选启用后 Datadog Agent 需使用 https URL enabled: true cert_file: /path/to/cert.pem key_file: /path/to/key.pem multiple_outputs: true # 日志/指标/追踪/llmobs 分端口输出 parse_ddtags: true # 将 ddtags 字符串展开为数组 split_metric_namespace: true # 指标名按第一个 . 拆分为 namespace/name store_api_key: true # 提取 Datadog API key 供下游 Datadog sink 复用 send_timeout_secs: 8 # 建议小于 Agent 侧超时默认 10 秒启用multiple_outputs后若源组件名为dd_agent下游可通过dd_agent.logs、dd_agent.metrics、dd_agent.traces、dd_agent.llmobs分别引用对应输出流CUE 数据中 outputs 一节完整定义了这四个端口及默认输出端口的语义。配置 Datadog Agent向该源发送日志或指标要求 Datadog Agentv7.35 / 6.35 或更高版本如果你的 Datadog Agent 默认压缩模式为zstd还需要 Vector0.40.2 或更高版本。发送日志在 Datadog Agent 配置中加入vector: logs.enabled: true logs.url: http://VECTOR_HOST:SOURCE_PORT # Vector 源启用 SSL 时改为 https发送指标vector: metrics.enabled: true metrics.url: http://VECTOR_HOST:SOURCE_PORT # Vector 源启用 SSL 时改为 https发送追踪vector: traces.enabled: true traces.url: http://VECTOR_HOST:SOURCE_PORT # Vector 源启用 SSL 时改为 https压缩编码与空载荷处理从源码 mod.rs 的decode方法看Vector 会按content-encoding头从右向左依次解码identity、gzip/x-gzip、zstd、deflate/x-deflate编码遇到不支持的编码返回 415 Unsupported Media Type。源码注释明确指出所有解压都经过CappedDecoder限制解压后大小上限目的是防止在这个无认证 HTTP 监听器上利用压缩炸弹造成无限制内存分配。另外Datadog Agent 会以空载荷或logs场景下的{}作为 keep alive 心跳logs.rs 与 metrics.rs 均显式忽略空 body 并直接返回成功不会报错。日志事件字段日志请求体是一个 JSON 数组每个元素由 mod.rs 中的LogMsg结构严格解析deny_unknown_fields字段与输出事件的对应关系如下输入字段说明输出字段必填message纯文本消息体message是status日志级别status语义映射为 severity是timestamp毫秒级 Unix 时间戳timestamp是hostname主机名hostname是service服务名service是ddsource数据来源ddsource是ddtags逗号分隔的标签列表ddtagsparse_ddtags为true时展开为数组是其中status被刻意在 schema 层面标注为 severity 语义源码注释引用了 Datadog 对 status 的语义约定timestamp、hostname、service、ddsource、ddtags分别标注为 timestamp/host/source/tags 语义见 mod.rs 的outputs实现。parse_ddtags的解析行为有专门单元测试覆盖logs.rs例如filename:driver.log,debug,wizard:the_grey会展开为[filename:driver.log, debug, wizard:the_grey]。指标解码series 与 sketches指标端点共有三条路由metrics.rsPOST /api/v1/series/...JSON 格式{series: [...]}POST /api/v2/series/...Protobuf 格式MetricPayload支持 origin 元数据与 resources 字段POST /api/beta/sketches/...Protobuf 格式的 DDSketch 负载解码为分布直方图distribution指标。从实现看metrics.rs各 Datadog 指标类型到 Vector 指标的映射为Datadog 类型Vector 映射说明countIncremental Counter直接转为计数器gaugeAbsolute Gauge直接转为仪表值v2 中若携带非零 intervalDogStatsD 场景会作为 gauge 的 interval 保留rateIncremental Counter值 × interval与 DogStatsD 源行为保持一致interval秒换算为毫秒后写入 intervalDDSketchIncremental Distribution通过AgentDDSketch::from_raw还原 min/max/sum/avg 与桶结构v2 series 的resources字段处理也值得注意host资源会替换日志 schema 中的主机 tagdevice资源保留为devicetag其他资源类型以带前缀的通用 tag 保留metrics.rs。split_metric_namespace的切分逻辑由 metrics.rs 的namespace_name_from_dd_metric实现即“解析第一个.之前的部分作为 namespace没有分隔符则无 namespace”。追踪与 LLM Observability追踪负载同样由 traces.rs 处理。POST /api/v0.2/traces接收 Datadog 的TracePayloadProtobuf源码会自动区分新旧两种 schema新 schema含tracer_payloads每个 chunk 映射为一个TraceEvent携带priority、origin、dropped、tags、spans数组以及container_id、language_name、tracer_version、runtime_id、app_version等负载级字段并标记payload_version: v2旧 schema每个 trace 映射为一个事件trace_id、start_time、end_time、spanstransactions中的 APM 事件也被逐一映射标记payload_version: v1。每个 span 被展开为包含service、name、resource、trace_id、span_id、parent_id、start、duration、error、meta、metrics、type、meta_struct的对象traces.rs。另有一条特殊路由POST /api/v0.2/stats会被直接丢弃并返回 200 OK——源码注释说明 APM 统计是有意丢弃的因为它们会在下游datadog_tracessink 中重新计算。追踪支持注意事项原文档“Trace support caveats”datadog_agent源能够接收 Datadog Agent 的追踪并转发到 Datadog。为保证 APM 统计如 span 命中次数、duration 分布准确应在 Datadog Agent 或客户端 SDK 中禁用任何追踪采样因为这些驱动 APM 统计的指标是由 Vector 计算的。LLM Observability 端点llmobs.rs接收event_type包裹的 span 集合兼容单个 JSON 对象与 JSON 数组两种信封形态将每个 span 的span_id、trace_id、name、session_id、service、start_ns、duration、status、meta、metrics、tags、ml_app从_dd.ml_app或tags中提取等字段展开为日志事件start_ns同时用于填充timestamp。API Key 提取与 store_api_keystore_api_key默认true控制是否从请求中提取 Datadog API key。从 mod.rs 的ApiKeyExtractor看提取优先级为URL 路径正则^/v1/input/(?Papi_key[[:alnum:]]{32})/??匹配/v1/input/32位key形式的旧版日志端点查询参数?dd-api-key...请求头dd-api-key。提取到的 key 通过metadata.set_datadog_api_key写入事件元数据日志、指标、追踪、llmobs 四条链路均如此当事件最终发往 Datadog sink 时会被直接使用——这使得“Datadog Agent → Vector → Datadog”的转发路径无需在每个 sink 中重复配置同一 API key。设为false时提取逻辑短路返回None。请求超时处理这是该源文档中非常实用的一个主题。当 Datadog Agent 向本源发送请求、而源在把事件送往下游 transforms/sinks 时阻塞Agent 最终会超时并断开连接。此时默认情况下 Vector 会报 “Events dropped.” 错误并递增component_discarded_events_total内部指标。但严格来说事件并未真正丢失Agent 会无限重试重发该请求只要阻塞不是永久性的事件最终仍会被接收。为避免这种有误导性的遥测可以将send_timeout_secs配置为小于Agent 超时默认 10 秒的值。此时 Vector 会向 Agent 返回HTTP 503 Service Unavailable发出warning而非 error递增component_timed_out_requests_total指标。从 mod.rs 的handle_events实现可验证这一链路SendError::Timeout触发 503 响应SendError::Closed服务器关闭则拒绝请求端到端确认场景下BatchStatus::Errored/Rejected分别映射为 500/400 响应从而驱动 Agent 侧重试或放弃。组件内部指标该源暴露的内部指标来自 CUE 数据 telemetry 一节包括指标含义component_timed_out_events_total因发送超时而被放弃/标记的事件数component_timed_out_requests_total因发送超时而被标记的请求数配合send_timeout_secs产生http_server_handler_duration_secondsHTTP 请求处理耗时http_server_requests_received_total收到的 HTTP 请求数http_server_responses_sent_total已发送的 HTTP 响应数此外每次成功解码都会通过EventsReceived内部事件上报事件数量与估算的 JSON 字节大小见各模块中的events_received.emit调用。相关源码与测试深入阅读该组件实现可从以下路径入手组件配置与 HTTP 服务搭建src/sources/datadog_agent/mod.rs日志解码src/sources/datadog_agent/logs.rs指标解码series v1/v2、DDSketchsrc/sources/datadog_agent/metrics.rs追踪解码新旧 Protobuf schemasrc/sources/datadog_agent/traces.rsLLM Observability 解码src/sources/datadog_agent/llmobs.rs单元测试src/sources/datadog_agent/tests.rs与真实 Datadog Agent 的集成测试特性datadog-agent-integration-testssrc/sources/datadog_agent/integration_tests.rs文档元数据来源CUEwebsite/cue/reference/components/sources/datadog_agent.cue综上datadog_agent源是 Vector 中对接 Datadog 采集体系的“数据入口”在 Agent 侧添加一段vector:配置即可把日志、指标、追踪甚至 LLM Observability 数据导入 Vector 管道再配合multiple_outputs分端口输出与datadog_traces等下游 sink即可实现数据在 Vector 中加工后回流 Datadog或改道至其他后端。【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考