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

如何编写Prometheus exporter采集文件中存储的设备状态指标值

问题解答

指标类型选择

明确选Gauge类型,原因:

  • Histogram 适用于对观测值做分桶统计、计算百分位、求和计数的场景(比如接口延迟、请求大小分布等),完全不适合存储单个设备的离散瞬时状态
  • Gauge 专门用于表示可随时增减的瞬时数值,完美匹配设备在线/离线这种会随时间变化的状态值,后续做时序趋势观测也更方便

最优实现方案

核心思路是用Gauge的标签(Label)关联设备ID,把枚举状态映射为数值存储,具体实现步骤如下:

1. 依赖安装

首先安装prometheus客户端库:

pip install prometheus_client

2. 状态映射规则

把文本状态转换为Prometheus支持的数值:

  • ONLINE 映射为 1
  • OFFLINE 映射为 0

3. 完整实现代码

from prometheus_client import Gauge, start_http_server
import time
import re

# 定义Gauge指标,device_id作为标签关联设备
DEVICE_STATUS = Gauge(
    'device_running_status',
    'Running status of connected device, 1=ONLINE, 0=OFFLINE',
    ['device_id']
)

# 状态文件路径,替换为你实际的文件路径
STATUS_FILE_PATH = '/path/to/your/device_status.txt'

def update_device_status():
    # 正则匹配每一行的设备ID和状态
    pattern = re.compile(r'^(DEVICE_\d+)\s*=\s*(ONLINE|OFFLINE)$')
    status_map = {'ONLINE': 1, 'OFFLINE': 0}
    
    # 先清空旧的指标数据,避免已移除的设备残留指标
    DEVICE_STATUS.clear()
    
    with open(STATUS_FILE_PATH, 'r', encoding='utf-8') as f:
        for line in f:
            line = line.strip()
            if not line:
                continue
            match = pattern.match(line)
            if match:
                device_id = match.group(1)
                status = match.group(2)
                DEVICE_STATUS.labels(device_id=device_id).set(status_map[status])

if __name__ == '__main__':
    # 启动exporter服务,监听9101端口(可自定义未被占用的端口)
    start_http_server(9101)
    # 每15秒刷新一次状态,可根据你的需求调整间隔
    while True:
        update_device_status()
        time.sleep(15)

4. 验证与对接

  • 启动服务后访问 http://你的服务器IP:9101/metrics 就能看到生成的指标,格式示例:
device_running_status{device_id="DEVICE_1"} 1.0
device_running_status{device_id="DEVICE_2"} 0.0
device_running_status{device_id="DEVICE_3"} 1.0
device_running_status{device_id="DEVICE_4"} 0.0
  • 在Prometheus配置中添加该exporter的抓取任务,之后就可以在Grafana中选择device_running_status指标,按device_id分组生成各设备的状态时序图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:48:04