process_exporter: 收集进程资源使用情况
process-exporter是一个用于 Prometheus 生态的监控工具,专门用来收集和暴露 Linux 系统中特定进程的资源使用情况(如 CPU、内存、磁盘 I/O、线程数等)。
说明
通常我们使用 node_exporter 监控操作系统的整体资源(如整个服务器的 CPU 使用率),而 process-exporter 则可以让你知道具体是哪个进程(比如 java、mysql 或你的应用进程)吃掉了这些资源。
核心功能与工作原理
- 数据源:它通过读取 Linux 的
/proc文件系统(如/proc/<pid>/stat)来获取进程信息。 - 分组机制:它不会盲目监控系统上成千上万个进程,而是根据你提供的匹配规则(正则表达式),将符合条件的进程归类为一个“组”(Group)进行聚合监控。
- 指标:提供 CPU 时间、内存占用(RSS/Virtual)、磁盘读写字节、打开的文件描述符数量、线程状态等。
安装与部署
二进制包安装(Linux 主机)
最直接的安装方式,适合传统物理机或虚拟机。
-
下载: 前往 GitHub Releases 下载最新版(例如
v0.8.5)。 bashwget 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/ -
创建配置文件 (
config.yaml): Process-exporter 需要知道你想监控哪些进程。创建一个 YAML 文件来定义规则。 bashsudo mkdir -p /etc/process-exporter sudo vim /etc/process-exporter/config.yaml配置示例(监控名字包含 java 或 nginx 的进程):
yamlprocess_names: # 匹配所有名字中包含 nginx 的进程,并以 "nginx" 作为组名 - name: '{{.Comm}}' cmdline: - 'nginx' # 匹配 java 进程,利用正则提取 JAR 包名字作为组名 (例如 my-app.jar -> Group: my-app) - name: '{{.Matches.JarName}}' cmdline: - 'java -jar (?P<JarName>[^ ]+).jar' -
创建 Systemd 服务并启动:
bashsudo vim /etc/systemd/system/process-exporter.service内容如下:
ini[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启动服务:
bashsudo 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.yamlKubernetes (K8s) 部署
通常以 DaemonSet 方式运行,以便监控每个节点上的进程。
- Helm 安装(推荐):
可以使用社区提供的 Chart,例如 stable 或 prometheus-community。
(上述命令配置了一个通用规则:监控所有进程并将进程名作为组名,生产环境建议缩小范围)
bashhelm 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: 正则表达式列表,用于匹配进程的完整命令行。
实战配置示例:
-
简单粗暴:监控所有进程(不推荐,指标量巨大)
yamlprocess_names: - name: '{{.Comm}}' cmdline: - '.+' -
监控特定的 Python 脚本 假设你运行了
python worker.py和python server.py。 yamlprocess_names: - name: 'python-{{.Matches.Script}}' cmdline: - 'python (.*\/)?(?P<Script>\w+\.py)'效果:会生成组名为
python-worker.py和python-server.py的指标。
Prometheus 集成
在 prometheus.yml 中添加一个 Job:
scrape_configs:
- job_name: 'process'
static_configs:
- targets: ['<安装了exporter的主机IP>:9256']Grafana 看板
数据采集后,需要可视化展示。 推荐使用 Grafana 官方社区看板 ID:249 或 14728。
- 导入方法:在 Grafana 中点击
+->Import-> 输入 ID249-> 选择数据源 -> 完成。
总结
process-exporter 填补了 node_exporter 只能看“宏观”数据的空白。部署时最重要的是写好正则匹配规则,只监控关键进程,避免因监控所有进程导致 Prometheus 产生大量高基数(High Cardinality)数据而卡顿。
最近更新
最新评论