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

如何编写Python脚本将ps aux/htop进程指标发送到Prometheus Pushgateway

实现方案

优先使用ps aux作为数据来源,htop是交互式终端程序,输出无固定结构化格式,不适合脚本解析。以下是完整可运行代码:

import requests
import subprocess
import shlex

# 配置项
job_name = 'metrics'
instance_name = '10.0.0.1:9090'
team_name = 'cpu'
pushgateway_addr = 'http://localhost:9091'

# 执行ps aux命令获取进程数据
ps_output = subprocess.check_output(shlex.split('ps aux'), text=True)
lines = ps_output.strip().splitlines()
payload_lines = []

# 解析每一行进程数据,跳过表头
for line in lines[1:]:
    # 最多拆分10次,保留命令字段的空格
    parts = line.split(maxsplit=10)
    if len(parts) < 11:
        continue
    user = parts[0]
    pid = parts[1]
    cpu_percent = parts[2]
    mem_percent = parts[3]
    rss_kb = parts[5]
    command = parts[10].replace('"', '\\"')  # 转义双引号避免格式错误

    # 构造符合Prometheus格式的指标行
    payload_lines.append(f'process_cpu_usage_percent{{user="{user}",pid="{pid}",command="{command}"}} {cpu_percent}')
    payload_lines.append(f'process_memory_usage_percent{{user="{user}",pid="{pid}",command="{command}"}} {mem_percent}')
    payload_lines.append(f'process_memory_rss_bytes{{user="{user}",pid="{pid}",command="{command}"}} {int(rss_kb)*1024}')

# 拼接所有指标为完整payload
payload = '\n'.join(payload_lines) + '\n'

# 推送到Pushgateway
push_url = f'{pushgateway_addr}/metrics/job/{job_name}/instance/{instance_name}/team/{team_name}'
response = requests.post(push_url, data=payload)
print(f'推送完成,状态码:{response.status_code}')
关键逻辑说明
  • 指标命名遵循Prometheus规范,分别对应进程CPU使用率、内存使用率、物理内存占用(字节)三个核心指标
  • 所有进程指标自带user(启动用户)、pid(进程ID)、command(启动命令)三个标签,可直接在Prometheus中按维度筛选
  • 自动跳过ps输出的表头行,命令字段包含空格也可正常解析,特殊字符自动转义避免格式错误
  • 可根据需求自行删减不需要的指标,或增加VSZ、STAT等其他ps输出字段作为指标或标签
注意事项
  • 若进程数较多,建议按需过滤进程后再上报,避免指标基数过大占用过多Prometheus存储资源
  • 上报频率建议设置为15s以上,不要高频推送
  • 不需要逐进程上报的话,可以自行统计系统整体CPU、内存总使用率后上报即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:48:04