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

如何使用Prometheus采集服务器登录用户的CPU、内存等使用指标?

实现用户级CPU、内存资源监控的可选方案

方案1:使用process-exporter(最推荐)

process-exporter是官方维护的进程级指标采集工具,支持直接按用户名聚合进程资源数据,无需额外开发即可满足需求:

  • 首先在配置文件中指定按用户维度分组进程,参考配置片段:
process_names:
  - name: "{{.Username}}"
    cmdline:
    - ".+"
  • 启动exporter后会自动生成namedprocess_name_cpu_seconds_total(CPU累计使用时长)、namedprocess_name_rss_bytes(物理内存使用量)等指标,指标自带name标签对应用户名,直接通过PromQL按标签聚合即可得到每个用户的总资源占用
  • 支持自定义过滤规则,可按需排除系统进程、只统计业务/作业进程,降低采集开销
  • 注意:若服务器进程量级过万,可适当调大采集间隔,避免额外性能消耗

方案2:扩展node_exporter采集能力

如果已经部署了node_exporter,可通过自带的textfile collector实现自定义用户级指标采集:

  • 启动node_exporter时添加参数--collector.textfile.directory=/path/to/metric/dir,指定指标文件的存放目录
  • 编写shell脚本定时统计每个用户的资源使用总和,输出为Prometheus格式的指标并存入上述目录,参考脚本核心逻辑:
# 统计每个用户的物理内存总使用量(单位:字节)
ps hax -o rss,user | awk '{rss[$2]+=$1*1024} END {for(u in rss) print "user_memory_usage_bytes{user=\""u"\"}", rss[u]}' > /path/to/metric/dir/user_metrics.prom
# 统计每个用户的CPU累计使用时长(单位:秒)
ps hax -o cputime,user | awk 'BEGIN{OFMT="%.2f"} {cpu[$2]+=substr($1,1,2)*3600 + substr($1,4,2)*60 + substr($1,7,2)} END {for(u in cpu) print "user_cpu_seconds_total{user=\""u"\"}", cpu[u]}' >> /path/to/metric/dir/user_metrics.prom
  • 将脚本加入crontab定时执行(推荐间隔1-5分钟),指标会自动被node_exporter采集上报

方案3:作业集群专属方案

如果你的计算服务器是Slurm、PBS等调度器管理的作业集群,可直接使用调度器对应的exporter:

  • Slurm集群可使用slurm_exporter,直接采集每个作业关联的用户、CPU、内存使用数据,额外支持作业ID、队列、运行时间等标签的关联统计
  • PBS集群可使用pbs_exporter,同样支持用户维度的作业资源聚合查询

常用查询PromQL示例

  • 实时查询各用户内存使用率:sum by (user) (namedprocess_name_rss_bytes) / sum by (instance) (node_memory_MemTotal_bytes) * 100
  • 查询过去1小时各用户CPU平均使用率:sum by (user) (rate(namedprocess_name_cpu_seconds_total[1h])) / sum by (instance) (count by (cpu) (node_cpu_seconds_total{mode="user"})) * 100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:00:03