前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Prometheus监控进程状态(Process-Exporter)

Prometheus监控进程状态(Process-Exporter)

作者头像
Cloudox
发布2021-11-23 14:54:25
5K0
发布2021-11-23 14:54:25
举报
文章被收录于专栏:月亮与二进制月亮与二进制

Prometheus有众多的Exporter可供使用,如在Prometheus+Grafana监控系统搭建一文中提到的Node Exporter就可以用来采集机器的各项指标,从而监控机器的状态。

如果机器上运行了一些小脚本,想要对其进行监控但又不想用上一些在代码里做信息采集的SDK那么重,比如只是单纯想要监控该脚本是否一直在运行,那么Process-Exporter会是一个现成的好选择。

如名所示,Process-Exporter就是用来监控进程的,其中一项能力,便是监控进程的状态。使用起来也简单。

在安装好了Prometheus的前提下,打开Process-Exporter的Github release版本列表,下载最新发布版本的适合你机器的那一项,这里我选择的是process-exporter-0.5.0.linux-amd64.tar.gz,下载好后rz到你的服务器上去(如果你的服务器可以连接外网,那么也可以直接用wget命令下载到服务器上),然后解压即可使用:

代码语言:javascript
复制
$ wget https://github.com/ncabatoff/process-exporter/releases/download/v0.5.0/process-exporter-0.5.0.linux-amd64.tar.gz
$ tar -xvf  process-exporter-0.5.0.linux-amd64.tar.gz

进入解压出的目录,我们开始设置我们需要监控的进程。Process-Exporter的做法是配置需要监控的进程的名称,他会去搜索该进程从而得到其需要的监控信息,其实也就是我们常做的“ps -efl | grep xxx”命令来查看对应的进程。配置文件一开始是不存在的,需要我们创建,名字可以自定义:

代码语言:javascript
复制
$ vim process-name.yaml
process_names:
  - name: "{{.Matches}}"
    cmdline:
    - 'alertToRobot.js'

  - name: "{{.Matches}}"
    cmdline:
    - 'prometheus'

这里,在配置文件(process-name.yaml)中,我们添加了两个要监控的进程名“alertToRobot.js”和“prometheus”,一个process_names就定义了要监控的一组进程,{{.Matches}}模板表示映射包含应用命令行所产生的所有匹配项,还有其他模板如下:

模板变量:

  • {{.Comm}} contains the basename of the original executable, i.e. 2nd field in /proc/<pid>/stat
  • {{.ExeBase}} contains the basename of the executable
  • {{.ExeFull}} contains the fully qualified path of the executable
  • {{.Username}} contains the username of the effective user
  • {{.Matches}} map contains all the matches resulting from applying cmdline regexps

配置好后,我们依据此配置文件来运行process-exporter:

代码语言:javascript
复制
$ nohup ./process-exporter -config.path process-name.yaml & # 后台运行,日志落nohup文件中

如果运行不成功,可以先不后台运行,直接命令“./process-exporter -config.path process-name.yaml”看看报什么错,大概率是配置文件格式错误导致。

process-exporter默认在端口9256下提供http服务供prometheus采集,因此可以直接尝试查看状态:

代码语言:javascript
复制
$ curl http://localhost:9256/metrics

会看到一堆输出,不太适合查看,但你如果能找到一堆“namedprocess_namegroup_states”,那就是进程状态信息了:

从这里也能看出来,process-exporter会给出你设置要观察的进程关键词搜索到的在不同状态下的所有进程的数量,比如这里我观察的两个进程均在“state="Sleeping"”状态下才有数值,说明都处于睡眠状态下,在等待唤醒,是正常的。对于Linux下进程的各种状态说明,可以查看这篇文章

现在,我们需要去配置Prometheus来采集这份数据了,和其他配置一样,就是给Prometheus添加一份数据源:

代码语言:javascript
复制
$ vim prometheus.yml
……
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus_server'
    static_configs:
    - targets: ['localhost:9100']

  - job_name: 'process'
    static_configs:
    - targets: ['localhost:9256']
……

我的prometheus配置文件名为prometheus.yml,其中名为prometheus_server的job是之前配置的noe-exporter数据源,这里我们新增“process”数据源。然后重启Prometheus就可以在其网站上看到数据了,在搜索框输入“namedprocess_namegroup_states”就可以查看到上面状态值同样的数据,也可以做出筛选来查看某一个进程,当然也可以添加到Grafana中,这些方法都大同小异,就不细说了。

这里提一嘴,怎么通过命令查看某个进程的状态呢?输入命令:ps -efl | grep xxx,就可以看到了,比如:

代码语言:javascript
复制
[root@localhost test6]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0 17398 17394  0  75   0 - 16543 wait   pts/0    00:00:00 bash
4 R     0 17469 17398  0  77   0 - 15877 -      pts/0    00:00:00 ps

这里的第二列就表示进程状态:

  • D 不可中断 uninterruptible sleep (usually IO)
  • R 运行 runnable (on run queue)
  • S 中断 sleeping
  • T 停止 traced or stopped
  • Z 僵死 a defunct (”zombie”) process

更多ps命令的具体说明可以查看这篇文章

注意,如果你kill了观察的进程,或者被其他什么原因kill掉了,那么这里采集到的数据每个状态下都会变成0,所以如果要监控告警的话,判断某些状态都为0,就可以视为进程挂掉了。

除了进程状态,Process-Exporter其实还能查看很多别的指标,其Github介绍中有详细描述,有需要的可以了解一下。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/6/27 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Prometheus 监控服务
Prometheus 监控服务(TencentCloud Managed Service for Prometheus,TMP)是基于开源 Prometheus 构建的高可用、全托管的服务,与腾讯云容器服务(TKE)高度集成,兼容开源生态丰富多样的应用组件,结合腾讯云可观测平台-告警管理和 Prometheus Alertmanager 能力,为您提供免搭建的高效运维能力,减少开发及运维成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档