prometheus + process-exporter监控进程
因此,进程的单核CPU占比的promsql语句为increase(namedprocess_namegroup_cpu_seconds_total{mode="user",groupname="procname"}[30s])*100/30,单核内核态CPU占比的promsql语句为increase(namedprocess_namegroup_cpu_seconds_total{mode="sy
一、下载process-exporter安装包
1、本地下载后上传到linux服务器
下载地址:https://github.com/ncabatoff/process-exporter/releases/
2、直接在linux服务器上wget方式下载
# 新建目录
mkdir -p /data/prometheus/process-exporter
# 进入目标目录
cd /data/prometheus/process-exporter
# 下载
wget https://github.com/ncabatoff/process-exporter/releases/download/v0.7.10/process-exporter-0.7.10.linux-amd64.tar.gz
# 解压
tar -vxzf process-exporter-0.7.10.linux-amd64.tar.gz
# 移动到安装目录
mv /data/prometheus/process-exporter/process-exporter-0.7.10.linux-amd64 /usr/local/process-exporter
# 进入目录
cd /usr/local/process-exporter
# 新建配置文件
touch process.yml
3、process.yml
# 添加如下内容
process_names:
# 监控所有进程
# - name: "{{.Matches}}"
# cmdline:
# - '.+'
- name: "{{.Matches}}"
cmdline:
- 'mysqld'
process_names是个数组,每个成员表示一个分组。
name是分组的名称,这里使用模版。cmdline用于对分组中的进程进行过滤,这里的正则表达式就表示过滤所有进程。
因此,上述配置文件的含义是:采集所有进程的指标数据,当遍历到某个进程时,获取该进程的进程名,然后放到进程名对应的分组。
name字段可以使用固定的字符串,也可以使用以下模版:
process_names:
# 进程名过滤,超过15个字符会被截断
- comm:
- bash
# argv[0],如果开头不是/,说明匹配进程名
# 如果开头是/,则需要使用二进制路径全匹配
- exe:
- postgres
- /usr/local/bin/prometheus
# 如果使用多个字段进行匹配,则需要都匹配
- name: "{{.ExeFull}}:{{.Matches.Cfgfile}}"
exe:
- /usr/local/bin/process-exporter
cmdline:
- -config.path\s+(?P<Cfgfile>\S+)
二、将process-exporter配置为系统服务
1、进入systemd目录
cd /usr/lib/systemd/system
2、创建文件
vim process-exporter.service
# 添加如下内容
[[Unit]
Description=https://github.com/ncabatoff/process-exporter
After=network-online.target
[Service]
Restart=on-failure
ExecStart=/usr/local/process-exporter/process-exporter --config.path=/usr/local/process-exporter/process.yml
[Install]
WantedBy=multi-user.target
3、服务命令
# 生效系统systemd文件
systemctl daemon-reload
# 设置开机自启
systemctl enable process-exporter.service
# 查看状态
systemctl status process-exporter.service
# 启动
systemctl start process-exporter.service
# 停止
systemctl stop process-exporter.service
三、启动process-exporter
# 进入目标目录
/usr/local/process-exporter
# 启动命令如下
nohup ./process-exporter -config.path=process.yml -web.listen-address=:9067 >> ./process-exporter.out 2>&1 &
process-exporter用来安装到被监控的主机上,服务器端通过调用默认端口9256来获取服务器信息。访问process-exporter
http://172.30.18.244:9256/metrics,默认端口为9256
四、Docker部署(推荐)
五、添加 Prometheus 监控配置
- job_name: "process"
file_sd_configs:
- refresh_interval: 1m
files:
- /data/docker/prometheus/sd_config/process.json
六、process.json
[{
"targets": [
"192.168.0.62:9256"
],
"labels": {
"service": "进程监控",
"idc": "ctyun"
}
}]
七、process-exporter的主要指标
1、process-exporter常用指标。
process-exporter中进程的指标以namedprocess_namegroup开头:
namedprocess_namegroup_num_procs:运行的进程数
namedprocess_namegroup_states:Running/Sleeping/Other/Zombie状态的进程数
namedprocess_namegroup_cpu_seconds_total:获取/proc/[pid]/stat 进程CPU utime、stime状态时间
namedprocess_namegroup_read_bytes_total:获取/proc/[pid]/io 进程读取字节数
namedprocess_namegroup_write_bytes_total:获取/proc/[pid]/io 进程写入字节数
namedprocess_namegroup_memory_bytes:获取进程使用的内存字节数,通过memtype区分不同的占用类型
namedprocess_namegroup_open_filedesc:获取进程使用的文件描述符数量
namedprocess_namegroup_thread_count:运行的线程数
namedprocess_namegroup_thread_cpu_seconds_total:获取线程CPU状态时间
namedprocess_namegroup_thread_io_bytes_total:获取线程IO字节数
namedprocess_namegroup_num_threads:线程数
namedprocess_namegroup_thread_context_switches_total:线程上下文切换统计
因此,进程的单核CPU占比的promsql语句为increase(namedprocess_namegroup_cpu_seconds_total{mode="user",groupname="procname"}[30s])*100/30,单核内核态CPU占比的promsql语句为increase(namedprocess_namegroup_cpu_seconds_total{mode="system",groupname="procname"}[30s])*100/30。
注意:实测发现,process-exporter获取的数据与/proc/pid/stat中的有一定差异,需要进一步看下。
process-exporter采集内存的指标时将内存分成5种类型:
resident:进程实际占用的内存大小,包括共享库的内存空间,可以从/proc/pid/status中的VmRSS获取
proportionalResident:与resident相比,共享库的内存空间会根据进程数量平均分配
swapped:交换空间,系统物理内存不足时,会将不常用的内存页放到硬盘的交换空间,可以从/proc/pid/status中的VmSwap获取
proportionalSwapped:将可能被交换的内存页按照可能性进行加权平均
virtual:虚拟内存,描述了进程运行时所需要的总内存大小,包括哪些还没有实际加载到内存中的代码和数据,可以从/proc/pid/status中的VmSize获取
对于一般的程序来说,重点关注的肯定是实际内存,也就是resident和virtual,分别表示实际在内存中占用的空间和应该占用的总空间。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)