You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

prom-client格式适配Grafana Cloud推送接口的技术咨询

问题解答

一、Grafana Cloud Prometheus推送接口格式说明

你提到的https://prometheus-prod-01-eu-west-0.grafana.net/api/prom/push接口采用Prometheus Remote Write协议,它要求的推送格式不是普通的文本或JSON,而是**Protocol Buffers(Protobuf)**二进制格式。

这个协议的核心结构是WriteRequest,包含多个TimeSeries对象,每个TimeSeries由两部分组成:

  • labels:键值对形式的标签集合,对应Prometheus指标的标签
  • samples:包含timestamp(纳秒级Unix时间戳)和value(指标数值)的样本数组

由于格式是二进制protobuf,直接用prom-client输出的文本/JSON无法直接推送,你需要使用支持Remote Write的Node.js库来处理序列化和推送,比如prom-remote-write,或者基于Prometheus的protobuf定义自行实现序列化逻辑。

二、将prom-client指标转换为InfluxDB行格式

InfluxDB行格式的语法规则为:

measurement[,tag_key=tag_value...] field_key=field_value[,field_key2=field_value2...] [timestamp]

各部分含义:

  • measurement:对应Prometheus的指标名称
  • tag:对应Prometheus指标的标签(可选,用于维度分组)
  • field:指标的数值,数值直接填写,字符串需加引号
  • timestamp:纳秒级Unix时间戳(可选,不填则默认使用接收服务器的当前时间)

转换步骤与示例

  1. 提取指标核心信息:从prom-client的文本输出中,跳过# HELP和# TYPE注释行,提取实际指标行的名称、标签(如果有)和数值
  2. 映射为Influx格式:
    • 无标签指标:比如process_cpu_user_seconds_total 0.391,转换后:
      process_cpu_user_seconds_total value=0.391 1666774055000000000
      
    • 带标签指标:比如nodejs_active_resources{type="TTYWrap"} 3,转换后:
      nodejs_active_resources,type=TTYWrap value=3 1666774055000000000
      
    • 直方图指标:比如nodejs_gc_duration_seconds_bucket{le="0.01",kind="minor"} 1,转换后:
      nodejs_gc_duration_seconds_bucket,le=0.01,kind=minor value=1 1666774055000000000
      

Node.js实现方式

你可以选择两种路径:

  • 使用现成库:比如prometheus-to-influx,它可以直接解析prom-client输出的指标文本,自动转换为Influx行格式
  • 自行编写解析逻辑:通过register.metrics()获取指标文本后,逐行处理:
    • 用正则表达式匹配指标名、标签段和数值
    • 处理标签的键值对,替换Prometheus的{key="value"}格式为Influx的key=value格式
    • 拼接成符合要求的Influx行字符串

内容的提问来源于stack exchange,提问作者TomFree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:35:24