process_exporter: 收集进程资源使用情况

发布时间: 更新时间: 总字数:1228 阅读时间:3m 作者: IP上海 分享 网址

process-exporter 是一个用于 Prometheus 生态的监控工具,专门用来收集和暴露 Linux 系统中特定进程的资源使用情况(如 CPU、内存、磁盘 I/O、线程数等)。

说明

通常我们使用 node_exporter 监控操作系统的整体资源(如整个服务器的 CPU 使用率),而 process-exporter 则可以让你知道具体是哪个进程(比如 java、mysql 或你的应用进程)吃掉了这些资源。

核心功能与工作原理

  • 数据源:它通过读取 Linux 的 /proc 文件系统(如 /proc/<pid>/stat)来获取进程信息。
  • 分组机制:它不会盲目监控系统上成千上万个进程,而是根据你提供的匹配规则(正则表达式),将符合条件的进程归类为一个“组”(Group)进行聚合监控。
  • 指标:提供 CPU 时间、内存占用(RSS/Virtual)、磁盘读写字节、打开的文件描述符数量、线程状态等。

安装与部署

二进制包安装(Linux 主机)

最直接的安装方式,适合传统物理机或虚拟机。

  1. 下载: 前往 GitHub Releases 下载最新版(例如 v0.8.5)。

    wget https://github.com/ncabatoff/process-exporter/releases/download/v0.8.5/process-exporter-0.8.5.linux-amd64.tar.gz
    tar -xvf process-exporter-0.8.5.linux-amd64.tar.gz
    cd process-exporter-0.8.5.linux-amd64
    sudo cp process-exporter /usr/local/bin/
    
  2. 创建配置文件 (config.yaml): Process-exporter 需要知道你想监控哪些进程。创建一个 YAML 文件来定义规则。

    sudo mkdir -p /etc/process-exporter
    sudo vim /etc/process-exporter/config.yaml
    

    配置示例(监控名字包含 java 或 nginx 的进程):

    process_names:
      # 匹配所有名字中包含 nginx 的进程,并以 "nginx" 作为组名
      - name: '{{.Comm}}'
        cmdline:
          - 'nginx'
    
      # 匹配 java 进程,利用正则提取 JAR 包名字作为组名 (例如 my-app.jar -> Group: my-app)
      - name: '{{.Matches.JarName}}'
        cmdline:
          - 'java -jar (?P<JarName>[^ ]+).jar'
    
  3. 创建 Systemd 服务并启动

    sudo vim /etc/systemd/system/process-exporter.service
    

    内容如下:

    [Unit]
    Description=Prometheus Process Exporter
    Documentation=https://github.com/ncabatoff/process-exporter
    
    [Service]
    User=root
    # 注意:-config.path 指定刚才创建的配置文件
    ExecStart=/usr/local/bin/process-exporter -config.path /etc/process-exporter/config.yaml
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    

    启动服务:

    sudo systemctl daemon-reload
    sudo systemctl enable process-exporter
    sudo systemctl start process-exporter
    

Docker 安装

适合容器化环境。关键点是必须把宿主机的 /proc 挂载进去。

docker run -d --rm -p 9256:9256 --privileged \
  -v /proc:/host/proc \
  -v $(pwd)/config.yaml:/config/config.yaml \
  ncabatoff/process-exporter \
  --procfs /host/proc \
  -config.path /config/config.yaml

Kubernetes (K8s) 部署

通常以 DaemonSet 方式运行,以便监控每个节点上的进程。

  • Helm 安装(推荐): 可以使用社区提供的 Chart,例如 stable 或 prometheus-community。
    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    helm install process-exporter prometheus-community/prometheus-process-exporter \
      --set config.process_names[0].name="{{.Comm}}" \
      --set config.process_names[0].cmdline[0]=".+"
    
    (上述命令配置了一个通用规则:监控所有进程并将进程名作为组名,生产环境建议缩小范围)

配置详解 (config.yaml)

Process-exporter 的核心在于如何通过正则匹配进程。

  • process_names: 定义匹配规则列表。
  • name: 定义在 Prometheus 中显示的指标标签值(groupname)。支持 Go 模板语法。
    • {{.Comm}}: 进程的可执行文件名(通常被截断为 15 字符)。
    • {{.ExeBase}}: 完整可执行文件的基名。
    • {{.Matches.MyVar}}: 引用正则中捕获的变量。
  • cmdline: 正则表达式列表,用于匹配进程的完整命令行。

实战配置示例:

  1. 简单粗暴:监控所有进程(不推荐,指标量巨大)

    process_names:
      - name: '{{.Comm}}'
        cmdline:
          - '.+'
    
  2. 监控特定的 Python 脚本 假设你运行了 python worker.pypython server.py

    process_names:
      - name: 'python-{{.Matches.Script}}'
        cmdline:
          - 'python (.*\/)?(?P<Script>\w+\.py)'
    

    效果:会生成组名为 python-worker.pypython-server.py 的指标。

Prometheus 集成

prometheus.yml 中添加一个 Job:

scrape_configs:
  - job_name: 'process'
    static_configs:
      - targets: ['<安装了exporter的主机IP>:9256']

Grafana 看板

数据采集后,需要可视化展示。 推荐使用 Grafana 官方社区看板 ID:24914728

  • 导入方法:在 Grafana 中点击 + -> Import -> 输入 ID 249 -> 选择数据源 -> 完成。

总结

process-exporter 填补了 node_exporter 只能看“宏观”数据的空白。部署时最重要的是写好正则匹配规则,只监控关键进程,避免因监控所有进程导致 Prometheus 产生大量高基数(High Cardinality)数据而卡顿。

本文总阅读量 次 本站总访问量 次 本站总访客数
Home Archives Categories Tags Statistics