## 一、軟件環境介紹
### 1.1 為什么要監控進程
之前我們做的監控對象,大多數是比較成熟的中間件(redis、tomcat、springboot程序、mysql程序等等),實際的企業業務運行過程匯總,可能出現tomcat容器依然存活、但是其中運行的javaweb程序掛掉的情況(或者mysql-docker容器存在,依然往外統計數據拋數據,但是容器內的mysql進程掛掉的情況)。
因此,對業務訪問鏈路中的核心進程施加監控,是非常有必要的。

### 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配置如下圖:

- job_name: "process-exporter"
static_configs:
- targets: ["192.168.100.141:9256"]
labels:
istance: "centos2服務器進程監聽"
保存后輸入命令更新:
curl -XPOST http://localhost:9090/-/reload
成功監聽

<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/


解決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機制