Process-exporter
Process-exporter 主要监控主机进程状态,采集服务的进程数、消耗CPU、内存、IO资源等。
Process-exporter 官网
https://github.com/ncabatoff/process-exporter
添加prometheus用户
添加prometheus用户
代码语言:javascript复制groupadd prometheus
useradd -g prometheus -s /sbin/nologin prometheus
二进制部署Process-exporter
1,下载Process-exporter
代码语言:javascript复制wget https://github.com/ncabatoff/process-exporter/releases/download/v0.7.10/process-exporter-0.7.10.linux-amd64.tar.gz
tar -xvf process-exporter-0.7.10.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/
mv process-exporter-0.7.10.linux-amd64/ process-exporter
2,process-exporter 版本信息
代码语言:javascript复制/usr/local/process-exporter/process-exporter --version
3,运行process-exporter
代码语言:javascript复制./process-exporter -config.path process-name.yaml >process.log 2>&1 &
4,systemctl 管理process-exporter
vim /usr/lib/systemd/system/process-exporter.service
代码语言:javascript复制[Unit]
Description=process-exporter
After=network.target
[Service]
User=root
Type=simple
ExecStart=/usr/local/process-exporter/process-exporter --config.path=/usr/local/process-exporter/process-name.yaml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
5,启动、开机启动process-exporter
代码语言:javascript复制systemctl start process-exporter && systemctl enable process-exporter
ps -ef |grep process-exporter
6,Process-exporter 配置文件
默认无配置文件需要手动创建
vim process-name.yaml
代码语言:javascript复制process_names:
- name: "{{.Matches}}"
cmdline:
- 'prometheus'
- name: "{{.Matches}}"
cmdline:
- 'chronyd'
{{.Matches}}模板表示映射包含应用命令行所产生的所有匹配项
7,process exporter 模板变量
- {{.Comm}}包含原始可执行文件的名称,第二个字段/proc/<pid>/stat
- {{.ExeBase}}包含可执行文件的基本名称
- {{.ExeFull}}包含可执行文件的路径
- {{.Username}}包含有效用户的用户名
- {{.Matches}}映射包含应用 cmdline 正则表达式产生的匹配项
- {{.PID}}包含进程的 PID。使用 PID 意味着该组将只包含一个进程。
- {{.StartTime}}包含进程的开始时间。
- {{.Cgroups}}包含(如果支持)进程的 cgroups()
8,process exporter 常用指标
运行的进程数
namedprocess_namegroup_num_procs
Running/Sleeping/Other/Zombie状态的进程数
namedprocess_namegroup_states
获取/proc/[pid]/stat 进程CPU utime、stime状态时间
namedprocess_namegroup_cpu_seconds_total
获取/proc/[pid]/io 进程读取字节数
namedprocess_namegroup_read_bytes_total
获取/proc/[pid]/io 进程写入字节数
namedprocess_namegroup_write_bytes_total
获取进程使用的内存字节数
namedprocess_namegroup_memory_bytes
获取进程使用的文件描述符数量
namedprocess_namegroup_open_filedesc
运行的线程数
namedprocess_namegroup_thread_count
获取线程CPU状态时间
namedprocess_namegroup_thread_cpu_seconds_total
获取线程IO字节数
namedprocess_namegroup_thread_io_bytes_total
9,http 访问测试(process-exporter默认监听9256端口)
process-exporter默认端口9256下
代码语言:javascript复制curl http://localhost:9256/metrics
Prometheus process-exporter 配置
1,prometheus.yml中加入process-exporter
代码语言:javascript复制vim /usr/local/prometheus/prometheus.yml
- job_name: 'process'
static_configs:
- targets: ['192.168.100.167:9256']
2,检查prometheus.yml格式
代码语言:javascript复制/usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml
3,Prometheus restful接口热加载配置
代码语言:javascript复制curl -X POST http://127.0.0.1:9090/-/reload
访问 Prometheus Web UI 查询数据
查询服务进程数
namedprocess_namegroup_num_procs
Prometheus Rule 告警规则
1,创建rule告警目录
代码语言:javascript复制mkdir -p /usr/local/prometheus/rules/
chown prometheus.prometheus /usr/local/prometheus/rules/
2,编辑rule配置文件
vim /usr/local/prometheus/rules/rules.yml
代码语言:javascript复制- name: process_status
rules:
- alert: process_status
expr: namedprocess_namegroup_num_procs==0
for: 1m
labels:
severity: critical
annotations:
summary: "主机 {{ $labels.instance }} process 异常!!!"
description: "{{ $labels.instance }} {{$labels.groupname}} process异常!!!(value: {{ $value }})"
3,检查rule文件格式
代码语言:javascript复制/usr/local/prometheus/promtool check rules rules.yml
Prometheus 告警测试
1,停止主机 192.168.100.234 chronyd服务
代码语言:javascript复制systemctl stop chronyd
2,访问 Prometheus Web UI 查看Alerts