Vector Prometheus Scrape 源(source)完全指南:采集 Prometheus 指标端点的配置与实现原理 📅 发布时间:2026/9/13 17:05:17 👁 浏览次数: Vector Prometheus Scrape 源source完全指南采集 Prometheus 指标端点的配置与实现原理【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vectorVector 的prometheus_scrape源组件负责定期向 Prometheus 兼容的指标端点exporter发起 HTTP 拉取scrape解析 Prometheus 文本暴露格式text-based exposition format并将其转换为 Vector 的指标事件counter / gauge / histogram / summary送入下游管道。本文以仓库中的组件元数据定义prometheus_scrape.cue与生成式配置说明generated/prometheus_scrape.cue为主体结合核心实现源码scrape.rs展开帮助你完整掌握该源组件的配置项、输出语义与底层工作机制。组件概览稳定可用的指标采集入口从组件元数据prometheus_scrape.cue可以看到该组件的关键属性属性值含义deliveryat_least_once至少一次投递语义采集到的指标事件不会静默丢失deployment_rolesdaemon、sidecar适合作为守护进程或边车sidecar部署developmentstable组件处于稳定阶段API 稳定可放心用于生产egress_methodbatch以批量方式向下游输出事件statefulfalse无状态组件不需要持久化任何检查点或状态在能力声明features中checkpoint.enabled为false即该组件不做断点续传式的状态恢复它通过 HTTP 出站连接interface.socket.direction: outgoing协议http主动拉取目标服务支持可选的 TLS 与代理配置且tls.enabled_default为false——只有当端点使用https协议时才会启用 TLS。acknowledgements为false对应源码中can_acknowledge()返回false见 scrape.rs这也与at_least_once的投递语义一致采集过程不依赖端到端确认机制。快速开始最小可运行配置prometheus_scrape唯一的必填配置项是endpoints。官方生成的最小示例配置minimal.yaml如下sources: my_source_id: type: prometheus_scrape endpoints: - http://localhost:9090/metrics注意endpoints同时支持hosts作为历史别名见 scrape.rs但推荐始终使用endpoints字段名。配置了该源之后Vector 会按默认 15 秒一次的间隔向http://localhost:9090/metrics发起 GET 请求解析返回的文本格式指标并输出为指标事件。关于路径的特别提醒元数据中为endpoints显式声明了一条警告见 prometheus_scrape.cueYou must explicitly add the path to your endpoints. Vector willnotautomatically add/metrics.也就是说你必须像示例一样在端点中显式写明/metrics路径。源码中同样保留了两条针对“未设置路径”的解析错误与 404 提示scrape.rs其中明确提到该行为在 Vector 0.11 版本发生过变更No path is set on the endpoint and we got a parse error, did you mean to use /metrics?。如果直接写http://localhost:9090而不带路径解析失败时你会看到类似的提示而不是 Vector 帮你自动补全/metrics。完整配置参数详解结合生成的配置定义generated/prometheus_scrape.cue与源码结构体scrape.rs该组件支持以下全部参数endpoints必填类型array元素为字符串说明要拉取指标的端点列表例如[http://localhost:9090/metrics]注意必须显式包含路径Vector 不会自动追加/metricsscrape_interval_secs可选类型uint单位秒默认值15说明两次拉取之间的间隔。源码中对应interval字段scrape.rs默认值来自default_interval()重要行为拉取请求是并发运行的。如果某一次 scrape 耗时超过间隔下一次 scrape 会立即开始而不是等待上一次完成。这可能导致额外的资源占用官方建议将 timeout 设置为低于 scrape interval 的值来避免请求堆积scrape_timeout_secs可选类型float单位秒默认值5.0说明每次 scrape 请求的超时时间对应源码中的timeout字段scrape.rs。建议保持其小于scrape_interval_secs防止并发请求数量无谓增长instance_tag可选类型string说明为每个事件添加一个标签标签值是被拉取实例的host:port例如localhost:9090源码行为当设置了instance_tag时Vector 会根据请求 URL 的 host 与端口构造实例字符串未显式给出端口时HTTP 默认取 80、HTTPS 默认取 443见 scrape.rs若不设置则不会注入instance标签endpoint_tag可选类型string说明为每个事件添加一个标签标签值是被拉取实例的完整端点例如http://localhost:9090/metrics源码行为端点信息由请求 URL 字符串直接生成scrape.rshonor_labels可选类型bool默认值false说明控制标签冲突的处理方式语义与 Prometheus 自身的honor_labels配置一致为true时如果被拉取的指标本身已带有同名标签Vector 不再注入新值保留原始标签值为false时将冲突的原始标签重命名为exported_标签名再注入 Vector 的标签值源码中的具体实现位于 scrape.rs当honor_label为false且指标中已存在同名标签时先把旧值迁移到exported_{tag}再覆盖为新的instance/endpoint值为true时则直接保留旧值。仓库中还包含test_prometheus_honor_labels与test_prometheus_do_not_honor_labels两组测试用例分别验证这两种行为见 scrape.rs。query可选类型object键为查询参数名值为一个或多个字符串说明为 scrape 请求自定义查询字符串参数同一参数键可提供多个值。这些参数会被追加到endpoints中手工书写的查询参数之后典型用途拉取 Prometheus 的/federate联邦端点时使用match[]参数源码对应字段为query: QueryParametersscrape.rsauth可选类型HTTP 认证配置对象说明HTTP 请求的认证策略。元数据特别强调认证信息以 HTTP 头形式传递除传输层自身加密外不做额外加密因此应仅在 HTTPS 上使用认证tls可选类型TLS 配置对象TlsConfig说明出站请求的 TLS 配置支持证书校验can_verify_certificate与主机名校验can_verify_hostname。当端点协议为https时自动启用enabled_by_scheme: true高级配置示例官方生成的高级示例advanced.yaml展示了除auth、tls外的全部常用参数sources: my_source_id: type: prometheus_scrape endpoints: - http://localhost:9090/metrics honor_labels: false query: match[]: - {jobsomejob} - {__name__~job:.*} scrape_interval_secs: 15 scrape_timeout_secs: 5.0查询参数结构match[] 的正确写法在query中键名必须是match[]对应的值是数组形式。这是 Prometheus 联邦 API/federate所要求的查询语义。官方文档prometheus_scrape.cue给出的标准写法sources: source0: query: match[]: - {jobsomejob} - {__name__~job:.*}其中每个元素都是一个 PromQL 标签选择器表达式例如按 job 匹配{jobsomejob}或按指标名正则匹配{__name__~job:.*}。源码中的query_example()函数scrape.rs也使用了完全相同的结构作为配置文档示例。输出语义指标类型与附加标签该源只输出指标事件SourceOutput::new_metrics()见 scrape.rs支持四类 Prometheus 指标类型的透传prometheus_scrape.cuecounter计数器gauge仪表盘/瞬时值histogram直方图summary摘要附加标签仅条件性注入标签触发条件示例值instance仅当配置了instance_tag时出现localhost:9090endpoint仅当配置了endpoint_tag时出现http://localhost:9090/metrics从源码看这两个标签并非无条件注入InstanceInfo/EndpointInfo只在对应 tag 被配置时才构建scrape.rs并且在标签冲突时遵循前述honor_labels规则处理。重复标签名的处理Prometheus 规范中同一个指标不允许出现多个同名字段标签Prometheus 自身会直接拒绝带重复标签的指标。Vector 的行为则更加宽容prometheus_scrape.cueVector will accept the metric, but will only take the last value for each tag name specified.即Vector 接受该指标但对每个标签名只保留最后出现的值。如果你在采集数据时遇到指标标签重复的 exporter这是设计内的容错行为而不是解析错误。源码级工作流从 HTTP 请求到指标事件结合 scrape.rs 的实现一次完整的采集流程可以概括为构建请求上下文PrometheusScrapeBuilder::build()根据请求 URL 计算出host:port实例信息与端点字符串scrape.rs仅在配置了instance_tag/endpoint_tag时才创建对应的上下文对象。并发拉取按scrape_interval_secs间隔发起 HTTP 请求多个端点的请求彼此并发若单次请求超过scrape_timeout_secs则超时中断。解析文本格式响应体交给同目录下的 parser.rs 进行 Prometheus 文本暴露格式解析产出 counter / gauge / histogram / summary 事件路径缺失导致的解析错误与 404 会给出明确提示scrape.rs。事件富化PrometheusScrapeContext::enrich_events()对每个指标事件执行标签注入与冲突处理honor_labels逻辑scrape.rs。批量输出以批量方式将指标事件送入下游管道。该源还复用了 Vector 通用的 HTTP 客户端基础设施GenericHttpClientInputs、HttpClientBuilder等见 scrape.rs因此能够自动获得 HTTP 客户端级别的内部可观测性指标包括http_client_responses_total响应计数与http_client_response_rtt_seconds响应往返时延分布这两项在组件的 telemetry 声明中有明确映射prometheus_scrape.cue可用于监控采集本身的健康状况。实践要点小结端点务必显式携带路径如/metricsVector 不会自动补全让scrape_timeout_secs低于scrape_interval_secs避免慢 exporter 引发请求堆积需要区分多实例时配置instance_tag与endpoint_tag当 exporter 自身已带同名标签时用honor_labels控制保留还是改写为exported_前缀联邦采集场景下用query的match[]数组传递 PromQL 选择器仅在与 HTTPS 配合时才使用auth避免明文传输凭据。如需查看更多配置样例与完整参数说明可继续阅读仓库中的 minimal.yaml、advanced.yaml 与生成式配置定义 generated/prometheus_scrape.cue源码细节可深入 scrape.rs 及其测试用例。【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考