能否用两个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
相关产品推荐
相关产品推荐

