如何采集(监控)服务器上一个或多个进程的 CPU 内存占用等数据

19 天前
 imherer

现在一台服务器上可能会部署多个服务(不到 10 个的样子,是不同的服务,服务名不一样),如何采集这些进程的 CPU 、内存占用等数据呢

目前想到的是写一个程序去读 top 命令的结果,但是假如我有 10 个服务的话,我得同时执行 10 条 top 命令,不知道 top 命令本身性能怎么样,会不会对服务器负载造成影响

大佬们有现成的方案吗?

3205 次点击
所在节点    程序员
50 条回复
yuandj
19 天前
@imherer

1. 先安装部署 Prometheus 和 Grafana
2. 在需要监控的节点上安装 Node Exporter ,并启动服务
3. 在 prometheus.yml 配置中,添加对应的监控配置,例子如下:
```
### 其他配置 ###
xxx

# ========== 机器性能监控(基于 Node Exporter ,监控模板 ID:16098 ) ===========
- job_name: 'base' # JobName 在面板中可选择不同的 Job 分组查看监控
static_configs:
- targets: ['xx.xx.xx.xx:9100']
labels:
#instance: '此处填写面板中要展示 IP 的名称,如果不配,面板中会使用默认的 ip:port'
nodename: '节点名称 1'
- targets: ['xx.xx.xx.xx:9100']
labels:
nodename: '节点名称 2'
```
4. 在 Grafana 添加 Prometheus 源
5. 导入 Grafana 面板;这是我用的面板
> https://grafana.com/grafana/dashboards/16098-node-exporter-dashboard-20240520-job/

如果遇到卡点,可以留下你的联系方式交流一下
imherer
19 天前
@yuandj #21 非常感谢,仔细看了下你这是针对单个机器的指标对吧。那可能不太符合我的需求,我想要的是单个机器上的某些服务
ala2008
19 天前
我们微服务 java 用了 jar 包,应该也可以用探针的方式吧
yuan1028
19 天前
docker 部署吗?可以看看 https://github.com/google/cadvisor
COW
19 天前
不想太啰嗦了,这样说你就明白了。节点监控用 node exporter ,进程监控用 process exporter ,容器监控基本都是去集成 k8s 了。
imherer
19 天前
@COW 嗯,目前在尝试 process-exporter
imherer
19 天前
@yuan1028 嗯,这个也在用
realityone
19 天前
newrelic 免费版
cassidy0134
19 天前
atop ,默认每十分钟拿一次机器上进程占用情况。
cassidy0134
19 天前
或者,用 docker compose 部署这十个服务。然后 docker top 看 usage
263
19 天前
process-exporter 正则匹配

```
process_names:
- name: "{{.Comm}}:{{.Matches.ServerId}}"
comm:
- gmserver
cmdline:
- -C/data/code/(?P<ServerId>[0-9]+)/server.cfg

- name: "{{.Comm}}:{{.Matches.ServerId}}"
comm:
- terrace
cmdline:
- -D/data/terrace/terrace_(?P<ServerId>[0-9]+)

- name: "charge:{{.Comm}}:{{.Matches.ServerId}}"
comm:
- u3d-server
cmdline:
- -c(?P<ServerId>[0-9]+)

- name: "ctrl:{{.Comm}}:{{.Matches.ServerId}}"
comm:
- u3d-server
cmdline:
- -w(?P<ServerId>[0-9]+)
```
Zss77
19 天前
首先想到的是 nmon ,是不是有些原始了……
mayli
19 天前
传统的方法是 collectd
billzhuang
19 天前
看 OP 这个问题问的这么豪放和对一楼的狂妄,
我觉的 datadog 更适合 OP 。
djasdjds
19 天前
@qoo2019 #11 node exporter 采集指定不了自己服务的信息,只是系统的 cpu 、men ,我刚做过,自己写采集器才行
imherer
19 天前
@qoo2019 #11 自己服务的指标 Node Exporter 咋采集? textfile-collector 吗?那还不是要自己写采集脚本啊
Immunize
19 天前
top 没啥开销,核心就是去 /proc 目录下遍历下 PID ,采集两次间隔进程 CPU 执行时间的差值,算下占物理时间的间隔。不用脚本糊的话,很多语言都有第三方库可以干这种事,用顺手的就行,或者用 all in one 的东西。
ShunYea
19 天前
哪吒监控?
imherer
19 天前
@Immunize 嗯,最开始用了 gopsutil 这个库,后来改成 process-exporter ,感觉还可以,基本上满足需求
jonzhao
19 天前
@Zss77 好多年没听过 nmon 了.... IBM P595 用过好久 :)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1100081

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX