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

调用HTTP API获取数据时Prometheus Metrics异常被删问题排查

问题:调用Node.js接口后Prometheus指标被删除

环境与配置

Docker部署Prometheus启动命令

docker run -d --name prometheus -p 9090:9090 -v /tmp/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml -v /tmp/prom-metrics-volume:/prometheus prom/prometheus --storage.tsdb.retention.time=1y --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --web.console.libraries=/usr/share/prometheus/console_libraries --web.console.templates=/usr/share/prometheus/consoles

Prometheus配置文件(prometheus.yml)

global:
  scrape_interval: 10s

  external_labels:
    monitor: 'prometheus'

scrape_configs:
  - job_name: 'prometheus'

    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'report'

    scrape_interval: 5s

    static_configs:
      - targets: ['host.docker.internal:3000']

Node.js查询接口代码

const getPrometheusData = async function (clientId, logicNumber, ruleNumber) {
    let currDate = new Date();
    let startDate = (currDate.getTime() - 172800000); // 2天的毫秒数
    let endDate = currDate.getTime();
    let step = "5s"
    let url = "http://localhost:9090/api/v1/query?query=lead_allocation_status_at_logic_and_rule_level" +
        "{client=\"" + clientId + "\", instance=\"host.docker.internal:3000\", job=\"report\", logic=\"Logic " +
        logicNumber + "\", rule=\"Rule " + ruleNumber + "\"}&start=" + startDate + "&end=" + endDate + "&step=" + step;
    return fetch(url)
        .then(response => response.json())
        .then(data => {
            console.log(data.data.result);
            let tmpResponse = {};
            for (let i=0;i<_.size(data.data.result);++i) {
                tmpResponse[data.data.result[i].metric.status] = parseInt(data.data.result[i].value[1]);
            }
            return {"status": 200, "data": tmpResponse};
        }).catch(err => {
            return {"status": 500, "data": "Error: " + err};
        });
}

问题现象

创建指标后数据可正常长期持久化,但调用上述Node.js接口,执行到return fetch(url)这一行后,Prometheus中的指标被删除。

排查思路

  • 查看Prometheus容器日志:执行docker logs prometheus,重点检查接口调用前后是否有数据删除、存储异常或配置重载相关的日志信息
  • 修正查询接口参数:当前使用/api/v1/query接口却传入了start/end/step参数,这些是/api/v1/query_range接口的专属参数,参数不匹配可能触发异常,先修改URL使用正确的接口,验证问题是否复现
  • 检查存储目录权限:查看宿主机/tmp/prom-metrics-volume的权限及文件所有者,确保Prometheus容器内的运行用户对该目录有读写权限,权限异常可能导致存储数据损坏或被误清理
  • 验证指标是否真被删除:调用接口后,直接通过Prometheus UI手动查询lead_allocation_status_at_logic_and_rule_level指标,确认是数据实际被删除,还是Node.js查询参数错误导致未返回结果
  • 隔离测试查询请求:用curl在终端直接发起和Node.js相同的查询请求(替换变量为实际值),看是否会触发指标删除,排除Node.js的fetch请求携带特殊头或参数的影响
  • 测试简单查询:修改Node.js代码,查询一个基础指标(比如up),验证是否还会出现指标删除问题,排查是特定查询参数还是接口调用本身导致的问题
  • 检查自动清理或配置变动:确认是否有其他进程修改Prometheus配置文件导致重载,或是否有自定义的自动清理规则,这些操作可能影响指标存储

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:47:40