## 一、软件环境介绍
### 1.1 为什么要监控进程
之前我们做的监控对象,大多数是比较成熟的中间件(redis、tomcat、springboot程序、mysql程序等等),实际的企业业务运行过程汇总,可能出现tomcat容器依然存活、但是其中运行的javaweb程序挂掉的情况(或者mysql-docker容器存在,依然往外统计数据抛数据,但是容器内的mysql进程挂掉的情况)。
因此,对业务访问链路中的核心进程施加监控,是非常有必要的。
![](https://img.kancloud.cn/86/fe/86fec3b20f1a9f466f5d3c351bb7f892_945x213.png)
### 1.2 怎么在prometheus中监控进程
如果想要对主机的进程进行监控,例如chronyd,sshd等服务进程以及自定义脚本程序运行状态监控。我们使用node exporter就不能实现需求了,此时就需要使用process-exporter来做进程状态的监控。
### 1.3 主机清单
职责 | ip地址 | 备注
Prometheus服务器 | 192.168.100.85 | docker机式的prometheus
待监控Linux | 192.168.100.141 | 待准备组件: process-exporter
<hr>
## 二、prometheus监控process-exporter
### 2.1 docker安装(略)
### 2.2 docker-compose安装(略)
### 2.3 安装process-exporter
创建process_exporter目录
mkdir /data/process_exporter -p
cd /data/process_exporter
# 创建配置文件
#Process-Exporter 的做法是配置备要监控的进程的名称,他会去搜索该进程从面得到其落要
#监控控所有进程
mkdir config
cat >>config/process.yml <<"EOF"
process_names:
- name: "{{.Comm}}" #匹配模板
cmdline:
- '.+' # 匹配所有名称
EOF
创建docker-compose.yaml
vim docker-compose.yaml
配置如下:
services:
process-exporter:
image: registry.cn-hangzhou.aliyuncs.com/ldw520/process-exporter:latest
container_name: process_exporter
restart: always
privileged: true
volumes:
- /proc:/host/proc
- /data/process_exporter/config:/config
command:
--procfs /host/proc
-config.path /config/process.yml
ports:
- "9256:9256"
启动 docker-compose.yaml
docker-compose up -d
查看docker的信息
docker images
docker ps -a
宿主机上访问process-exporter的metrics
http://192.168.100.141:9256/metrics
<hr>
## 2.6 prometheus服务器添加process-exporter的地址
192.168.100.85的centos上,修改prometheus的配置文件
#进入docker-prometheus目录
cd /data/docker-prometheus
#修改prometheus.yml
vi prometheus/prometheus.yml
添加process-exporter配置如下图:
![](https://img.kancloud.cn/0d/40/0d407d225e9bdcfdad53daf39f9bd6ec_763x570.png)
- job_name: "process-exporter"
static_configs:
- targets: ["192.168.100.141:9256"]
labels:
istance: "centos2服务器进程监听"
保存后输入命令更新:
curl -XPOST http://localhost:9090/-/reload
成功监听
![](https://img.kancloud.cn/30/45/3045fdb22cd2d0230a4a243f75fb1d9b_1764x196.png)
<hr/>
## 三、常用的进程监控指标
| 指标名称 | 含义
| namedprocess_namegroup_num_procs | 运行的进程数
| namedprocess_namegroup_num_threads | 线程数
| namedprocess_namegroup_states | Running/Sleeping/other/Zombie状态的进程数
| namedprocess_namegroup_cpu_seconds_total | 获取/proc/[pid]/stat 进程CPUutime、stime状态时间
| namedprocess_namegroup_read_bytes_total | 获取/proc/[pid]/io 进程读取字节
| namedprocess_namegroup_write_bytes_total | 获取/proc/[pid]/io 进程写入字节数
| namedprocess_namegroup_memory_bytes | 获取进程使用的内存字节数
| namedprocess_namegroup_open_filedesc | 获取进程使用的文件描述符数量
| namedprocess_namegroup_worst_fd_ratio | 进程文件描述符使用率
| namedprocess_namegroup_thread_count | 客器当前的内存使用量
| namedprocess_namegroup_thread_cpu_seconds_total | 获取线程CPU状态时间
| namedprocess_namegroup_thread_io_bytes_total | 获取线程IO字节数
### 3.1grafana中对process-exporter进行监控
copy id to clipboard->grafana的dashboards中lmport dashboard
https://grafana.com/grafana/dashboards/8378-system-processes-metrics/
![](https://img.kancloud.cn/8b/98/8b98c2d16074026288f2d2a03dd74848_1776x725.png)
![](https://img.kancloud.cn/cf/76/cf76185089dae782e5c405b5a8ccde8d_1880x785.png)
解决process-exporter升级到0.5.0之后,cpu相关的两个图形不显示数据的问题Top processes By Total CPU cores used图)形脚本
topk(5,rate(namedprocess_namegroup_cpu_seconds_total{groupname=~"$processes",instance=~"$host"}[$interval])
or
(irate(namedprocess_namegroup_cpu_seconds_total{groupname=~"$processes",instance=~"$host"}[5m])))
Top processes by System CPU cores used
topk(5,rate(namedprocess_namegroup_cpu_seconds_total{mode="system",groupname=~"$processes",instance=~"$host"}[$interval])
or
(irate(namedprocess_namegroup_cpu_seconds_total{mode="system",groupname=~"$processes",instance=~"$host"}[5m])))
- Prometheus教程
- 一. dokcer 安装
- 二. 安装docker-compose
- 三. docker-compose安装Prometheus
- 四. 配置grafana的数据源
- 五. Prometheus的Exporter
- 六. Prometheus的基本术语
- 七. 监控Linux
- 八. 监控redis和mongodb
- 九. 监控mysql数据库
- 十. 监控go程序
- 十一. 监控nginx
- 十二. 监控消息队列
- 十三. 监控docker
- 十四. 监控进程
- 十五. 域名监控
- 十六. SNMP监控
- 十七. 黑盒监控
- 十八. 自定义监控
- 十九. go实现自定义监控
- 二十. 服务发现概述
- 二十一. 基于文件的服务发现
- 二十二. 基于Consul的服务发现
- 二十三. relabeling机制