1、安装
下载安装包,解压运行即可:
我们需要通过配置文件设置我们需要监控的进程。Process-Exporter他会去搜索该进程从而得到其需要的监控信息,其实也就是我们常做的“ps -efl | grep xxx”命令来查看对应的进程。配置文件一开始是不存在的,需要我们创建,名字可以自定义:
配置文件样例如下(process-conf.yml):
配置好后,我们依据此配置文件来运行process-exporter:
默认端口9256,可以通过curl验证是否采集指标成功:
可以看到如下指标输出:
2、 配置
建议通过yaml文件配置要监控的进程及其分组。一个通用的配置文件如下所示,包含一个名称匹配器列表:
process_names:
- matcher1
- matcher2
...
- matcherN
注意:如果一个进程符合多个匹配项,只会归属于第一个匹配的groupname组。
2.1 group name
可选的标签name定义了一个模板来命名匹配的进程;如果没有指定,name默认为{{. exebase}}。
其中,name选项主要有以下几个:
{{.Comm}}
包含原始可执行文件的基本名称,即/proc/<pid>/stat
{{.ExeBase}}
包含可执行文件的basename{{.ExeFull}}
包含可执行文件的完全限定路径{{.Username}}
包含有效用户的用户名{{.Matches}}
map包含应用cmdline regexps产生的所有匹配项
举例:
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="/usr/bin/redis-server *:6379" |
ps中的进程完成信息 |
{{.Username}} |
groupname="redis" |
使用进程所属的用户进行分组 |
{{.Matches}} |
groupname="map[:redis]" |
表示配置到关键字“redis” |
2.2 process selectors
process_names中的每个项目都必须包含一个或多个选择器(comm,exe或cmdline), 如果存在多个选择器,则它们必须全部匹配。 每个选择器都是一个字符串列表,用于与进程的comm,argv [0]匹配;对于cmdline,则是一个适用于命令行的正则表达式。 cmdline regexp使用Go语法。
对于comm和exe,字符串列表是一个OR,这意味着与任何字符串匹配的任何进程都将添加到该项目的组中。
对于cmdline,正则表达式列表为AND,表示它们都必须匹配。 正则表达式中的任何捕获组都必须使用?P <name>选项为捕获分配一个名称,该名称用于填充.Matches。
process_names:
# comm is the second field of /proc/<pid>/stat minus parens.
# It is the base executable name, truncated at 15 chars.
# It cannot be modified by the program, unlike exe.
- comm:
- bash
# exe is argv[0]. If no slashes, only basename of argv[0] need match.
# If exe contains slashes, argv[0] must match exactly.
- exe:
- postgres
- /usr/local/bin/prometheus
# cmdline is a list of regexps applied to argv.
# Each must match, and any captures are added to the .Matches map.
- name: "{{.ExeFull}}:{{.Matches.Cfgfile}}"
exe:
- /usr/local/bin/process-exporter
cmdline:
- -config.path\s+(?P<Cfgfile>\S+)