多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 一、软件环境介绍 ### 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 ### &nbsp;&nbsp;&nbsp;2.1 docker安装(略) ### &nbsp;&nbsp;&nbsp;2.2 docker-compose安装(略) ### &nbsp;&nbsp;&nbsp;2.3 安装process-exporter &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建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 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建docker-compose.yaml vim docker-compose.yaml &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;配置如下: 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" &nbsp;&nbsp;&nbsp;启动 docker-compose.yaml docker-compose up -d &nbsp;&nbsp;&nbsp;查看docker的信息 docker images docker ps -a &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;宿主机上访问process-exporter的metrics http://192.168.100.141:9256/metrics <hr> ## &nbsp;&nbsp;&nbsp;2.6 prometheus服务器添加process-exporter的地址 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;192.168.100.85的centos上,修改prometheus的配置文件 #进入docker-prometheus目录 cd /data/docker-prometheus #修改prometheus.yml vi prometheus/prometheus.yml &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;添加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服务器进程监听" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;保存后输入命令更新: curl -XPOST http://localhost:9090/-/reload &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;成功监听 ![](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进行监控 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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])))