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

Python prometheus_client Gauge指标无法被Prometheus持久化存储求助

解决Prometheus无法持久化自定义Exporter指标的问题

问题根源分析

你遇到的问题本质不是Prometheus不持久化,而是你的Exporter代码未生成有效可抓取的指标数据,加上Prometheus配置存在语法错误,导致Prometheus根本没正确存储历史时间序列。

步骤1:修复自定义Exporter代码

你的代码存在多个语法错误和逻辑问题,仅生成了f5_test_created元数据指标,没有实际业务指标值,导致Prometheus无法抓取到可持久化的有效数据:

具体修正点:

  • 拼写错误:Guage → Gauge(注意正确拼写)
  • 循环关键字小写:While → while
  • 缩进错误:循环内代码需对齐缩进
  • 核心逻辑缺失:未给Gauge设置具体数值,Prometheus仅能抓取到标记指标创建时间的_created元数据

修复后的完整代码:

import prometheus_client as prom
import time

pool = {
    'pool_name': 'testing-prom-tool',
    'member_name': 'promtest',
    'mem_port': '443',
    'mem_address': 'xx.xx.xx.xx',
    'mem_state': 'down'
}

# 创建请求耗时统计指标
REQUEST_TIME = prom.Summary('request_processing_seconds', 'Time spent processing request')

@REQUEST_TIME.time()
def process_request():
    time.sleep(1)

if __name__ == '__main__':
    # 正确初始化Gauge指标:名称、描述、标签列表
    f5_prom_test = prom.Gauge(
        'f5_test', 
        'f5_node_status', 
        ('pool_name', 'member_name', 'mem_port', 'mem_address', 'mem_state')
    )
    # 启动Exporter HTTP服务
    prom.start_http_server(1234)
    
    while True:
        process_request()
        # 根据节点状态设置Gauge数值:up为1,down为0
        state_value = 1 if pool['mem_state'] == 'up' else 0
        # 用字典解包简化标签赋值,设置指标值
        f5_prom_test.labels(**pool).set(state_value)

步骤2:修复Prometheus配置文件语法错误

你的prometheus.yml中job_name的引号未闭合,导致配置解析失败,Prometheus无法正确抓取该Job的指标:

修复后的配置片段:

- job_name: 'python-exporter'  # 补全闭合引号
    scrape_interval: 5s
    static_configs:
      - targets: ['hostname:1234']

步骤3:验证数据抓取与持久化

  1. 重启修复后的Exporter脚本,执行curl http://localhost:1234验证,应能看到f5_test指标的具体数值,示例:
    f5_test{mem_address="xx.xx.xx.xx",mem_port="443",mem_state="down",member_name="promtest",pool_name="testing-prom-tool"} 0
    
  2. 重启Prometheus服务,确保配置生效
  3. 在Prometheus UI中查询f5_test,确认能看到连续的时间序列数据
  4. 停止Exporter脚本,再次查询f5_test,此时应能看到停止前的历史数据,直到超过TSDB保留期(默认15天)

额外说明

  • Prometheus的TSDB默认将数据持久化到data/目录(默认路径),通过--storage.tsdb.retention.time参数可调整保留时长(例如--storage.tsdb.retention.time=30d表示保留30天)
  • 若停止Exporter后仍无历史数据,大概率是之前Prometheus未抓取到有效指标(如代码无数值输出、配置错误),而非持久化功能故障

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:35:32