prometheus进程监控
插件地址:https://github.com/ncabatoff/process-exporter
1、安装部署
cd /usr/local
wget https://github.com/ncabatoff/process-exporter/releases/download/v0.7.2/process-exporter-0.7.2.linux-amd64.tar.gz
tar -zxvf process-exporter-0.7.2.linux-amd64.tar.gz
mv process-exporter-0.7.2.linux-amd process-exporter
2、创建启动脚本
vi /usr/lib/systemd/system/process-exporter.service [Unit] Description=redis_exporter Documentation=https://github.com/ncabatoff/process-exporter After=network.target [Service] Type=simple User=prometheus ExecStart=/usr/local/process-exporter/process-exporter -config.path /usr/local/process-exporter/process-exporter.yml Restart=on-failure [Install] WantedBy=multi-user.target
启动服务
systemctl daemon-reload
systemctl start redis_exporter
systemctl status redis_exporter
systemctl enable redis_exporter
ss -tulnp | grep 9256
编写配置文件
process_names:
- matcher1
- matcher2
例如:监控所有的服务进程
process_names: - name: "{{.Comm}}" cmdline: - '.+'
监控进程名为test程序
process_names: - name: "{{.Matches}}" cmdline: - 'test'
配置模板选项如下:
{{.Comm}} 包含原始可执行文件的basename,/proc//stat 中的换句话说,2nd 字段
{{.ExeBase}} 包含可执行文件的basename
{{.ExeFull}} 包含可执行文件的完全限定路径
{{.Username}} 包含有效用户的用户名
{{.Matches}} 映射包含应用命令行tlb所产生的所有匹配项
process_names中的每个项目都必须包含一个或多个选择器(comm,exe或cmdline), 如果存在多个选择器,则它们必须全部匹配。 每个选择器都是一个字符串列表,用于与进程的comm,argv [0]匹配;对于cmdline,则是一个适用于命令行的正则表达式。 cmdline regexp使用Go语法。
对于comm和exe,字符串列表是一个OR,这意味着与任何字符串匹配的任何进程都将添加到该项目的组中。
对于cmdline,正则表达式列表为AND,表示它们都必须匹配。 正则表达式中的任何捕获组都必须使用?P <name>选项为捕获分配一个名称,该名称用于填充.Matches。
验证
curl localhost:9256/metrics
例如:> ps -ef | grep redis
redis 771 1 0 Jun05 ? 00:45:49 /usr/bin/redis-server *:6379
{{.Comm}} | groupname="redis-server" | exe或者sh文件名称 |
{{.ExeBase}} | groupname="redis-server *:6379" | / |
{{.ExeFull}} | groupname="redis-server *:6379" | ps中进程完成信息 |
{{.Username}} | groupname="redis" | 使用进程所属的用户进行分组 |
{{.Matches}} | groupname="map[:redis]" | 表示匹配到关键字"redis" |
Grafana图表显示:
process-exporter对应的dashboard为:https://grafana.com/grafana/dashboards/249
计算
namedprocess_namegroup_num_threads