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

能否用两个Python脚本向同一Prometheus Exporter服务器写入指标?

可行性说明与解决方案

完全可行,但不能直接“连接”到已启动的Exporter服务器写入指标——Prometheus官方客户端的HTTP服务器仅负责暴露指标,并非接收外部写入的服务。要实现多脚本共享同一Exporter暴露指标,官方推荐使用多进程模式,通过共享文件目录来同步不同进程的指标数据。

修改第一个脚本(Exporter服务器进程)

需要启用多进程收集器,指定指标存储目录,并保持进程运行:

import prometheus_client
from prometheus_client import start_http_server, Gauge, multiprocess, CollectorRegistry
import os
import time

# 指定多进程指标存储目录,确保两个脚本使用同一目录
multiproc_dir = '/tmp/prometheus_multiproc'
os.environ['PROMETHEUS_MULTIPROC_DIR'] = multiproc_dir
# 确保目录存在
os.makedirs(multiproc_dir, exist_ok=True)

# 初始化多进程注册表
registry = CollectorRegistry()
multiprocess.MultiProcessCollector(registry)

# 启动HTTP服务器,绑定到8000端口
start_http_server(8000, registry=registry)

# 创建并初始化湿度指标
gh = Gauge('dht22ExtMedHum', 'Humidity calculated with the Exterior DHT22 Sensor ', registry=registry)
gh.set(-999)

# 保持进程运行,避免退出
while True:
    time.sleep(30)

第二个脚本(指标写入进程)

同样配置多进程环境,创建新的Gauge指标并更新:

import prometheus_client
from prometheus_client import Gauge, multiprocess, CollectorRegistry
import os
import time

# 必须与第一个脚本使用完全相同的指标存储目录
multiproc_dir = '/tmp/prometheus_multiproc'
os.environ['PROMETHEUS_MULTIPROC_DIR'] = multiproc_dir

# 初始化多进程注册表
registry = CollectorRegistry()
multiprocess.MultiProcessCollector(registry)

# 创建温度指标
gt = Gauge('dht22ExtMedTemp', 'Temperature calculated with the Exterior DHT22 Sensor ', registry=registry)

# 模拟指标更新逻辑(替换为实际业务代码)
while True:
    # 示例:获取当前温度,这里用固定值代替真实传感器读取
    current_temp = 26.3
    gt.set(current_temp)
    print(f"已更新温度指标为: {current_temp}℃")
    time.sleep(5)

关键注意事项

  • 两个脚本必须使用完全相同的指标存储目录,否则无法同步指标
  • 多进程模式下,每个进程的指标会被写入目录内的临时文件,Exporter服务器进程会自动合并并暴露所有进程的指标
  • 启动顺序无强制要求,但建议先启动Exporter服务器进程,再启动指标写入进程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:33:20