Update metric dependencies (#5023)
This commit is contained in:
parent
4befa8cc8a
commit
9278f0cad2
128 changed files with 3873 additions and 2729 deletions
2
vendor/github.com/ncabatoff/process-exporter/.gitignore
generated
vendored
2
vendor/github.com/ncabatoff/process-exporter/.gitignore
generated
vendored
|
|
@ -1,4 +1,4 @@
|
|||
.*.sw?
|
||||
.idea
|
||||
process-exporter
|
||||
load-generator
|
||||
integration-tester
|
||||
|
|
|
|||
4
vendor/github.com/ncabatoff/process-exporter/Dockerfile
generated
vendored
4
vendor/github.com/ncabatoff/process-exporter/Dockerfile
generated
vendored
|
|
@ -1,6 +1,6 @@
|
|||
# Start from a Debian image with the latest version of Go installed
|
||||
# and a workspace (GOPATH) configured at /go.
|
||||
FROM golang:1.10 AS build
|
||||
FROM golang:1.12 AS build
|
||||
#RUN curl -L -s https://github.com/golang/dep/releases/download/v0.5.0/dep-linux-amd64 -o $GOPATH/bin/dep
|
||||
#RUN chmod +x $GOPATH/bin/dep
|
||||
WORKDIR /go/src/github.com/ncabatoff/process-exporter
|
||||
|
|
@ -8,7 +8,7 @@ ADD . .
|
|||
#RUN dep ensure
|
||||
|
||||
# Build the process-exporter command inside the container.
|
||||
RUN make
|
||||
RUN make
|
||||
|
||||
FROM scratch
|
||||
|
||||
|
|
|
|||
158
vendor/github.com/ncabatoff/process-exporter/Gopkg.lock
generated
vendored
158
vendor/github.com/ncabatoff/process-exporter/Gopkg.lock
generated
vendored
|
|
@ -1,158 +0,0 @@
|
|||
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
|
||||
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
digest = "1:d6afaeed1502aa28e80a4ed0981d570ad91b2579193404256ce672ed0a609e0d"
|
||||
name = "github.com/beorn7/perks"
|
||||
packages = ["quantile"]
|
||||
pruneopts = "UT"
|
||||
revision = "3a771d992973f24aa725d07868b467d1ddfceafb"
|
||||
|
||||
[[projects]]
|
||||
digest = "1:15042ad3498153684d09f393bbaec6b216c8eec6d61f63dff711de7d64ed8861"
|
||||
name = "github.com/golang/protobuf"
|
||||
packages = ["proto"]
|
||||
pruneopts = "UT"
|
||||
revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265"
|
||||
version = "v1.1.0"
|
||||
|
||||
[[projects]]
|
||||
digest = "1:d2754cafcab0d22c13541618a8029a70a8959eb3525ff201fe971637e2274cd0"
|
||||
name = "github.com/google/go-cmp"
|
||||
packages = [
|
||||
"cmp",
|
||||
"cmp/cmpopts",
|
||||
"cmp/internal/diff",
|
||||
"cmp/internal/function",
|
||||
"cmp/internal/value",
|
||||
]
|
||||
pruneopts = "UT"
|
||||
revision = "3af367b6b30c263d47e8895973edcca9a49cf029"
|
||||
version = "v0.2.0"
|
||||
|
||||
[[projects]]
|
||||
digest = "1:ca955a9cd5b50b0f43d2cc3aeb35c951473eeca41b34eb67507f1dbcc0542394"
|
||||
name = "github.com/kr/pretty"
|
||||
packages = ["."]
|
||||
pruneopts = "UT"
|
||||
revision = "73f6ac0b30a98e433b289500d779f50c1a6f0712"
|
||||
version = "v0.1.0"
|
||||
|
||||
[[projects]]
|
||||
digest = "1:15b5cc79aad436d47019f814fde81a10221c740dc8ddf769221a65097fb6c2e9"
|
||||
name = "github.com/kr/text"
|
||||
packages = ["."]
|
||||
pruneopts = "UT"
|
||||
revision = "e2ffdb16a802fe2bb95e2e35ff34f0e53aeef34f"
|
||||
version = "v0.1.0"
|
||||
|
||||
[[projects]]
|
||||
digest = "1:ff5ebae34cfbf047d505ee150de27e60570e8c394b3b8fdbb720ff6ac71985fc"
|
||||
name = "github.com/matttproud/golang_protobuf_extensions"
|
||||
packages = ["pbutil"]
|
||||
pruneopts = "UT"
|
||||
revision = "c12348ce28de40eed0136aa2b644d0ee0650e56c"
|
||||
version = "v1.0.1"
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
digest = "1:71520363c3acc43c35a2a53f79f6c61f110a026326c8b16dbdd351164765feac"
|
||||
name = "github.com/ncabatoff/fakescraper"
|
||||
packages = ["."]
|
||||
pruneopts = "UT"
|
||||
revision = "15938421d91a82d197de7fc59aebcac65c43407d"
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
digest = "1:9e33629d4ec9e9344715a54fa0a107f23ce800deb13999b0190df04c3540ccb5"
|
||||
name = "github.com/ncabatoff/go-seq"
|
||||
packages = ["seq"]
|
||||
pruneopts = "UT"
|
||||
revision = "b08ef85ed83364cba413c98a94bbd4169a0ce70b"
|
||||
|
||||
[[projects]]
|
||||
branch = "add-proc-status"
|
||||
digest = "1:df5079557e0fa0fe9fb973f84fffd52e32ef26ada655900fdeea9b0848766c74"
|
||||
name = "github.com/ncabatoff/procfs"
|
||||
packages = [
|
||||
".",
|
||||
"internal/util",
|
||||
"nfs",
|
||||
"xfs",
|
||||
]
|
||||
pruneopts = "UT"
|
||||
revision = "e1a38cb53622f65e073c5e750e6498a44ebfbd2a"
|
||||
|
||||
[[projects]]
|
||||
digest = "1:b6221ec0f8903b556e127c449e7106b63e6867170c2d10a7c058623d086f2081"
|
||||
name = "github.com/prometheus/client_golang"
|
||||
packages = ["prometheus"]
|
||||
pruneopts = "UT"
|
||||
revision = "c5b7fccd204277076155f10851dad72b76a49317"
|
||||
version = "v0.8.0"
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
digest = "1:2d5cd61daa5565187e1d96bae64dbbc6080dacf741448e9629c64fd93203b0d4"
|
||||
name = "github.com/prometheus/client_model"
|
||||
packages = ["go"]
|
||||
pruneopts = "UT"
|
||||
revision = "5c3871d89910bfb32f5fcab2aa4b9ec68e65a99f"
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
digest = "1:63b68062b8968092eb86bedc4e68894bd096ea6b24920faca8b9dcf451f54bb5"
|
||||
name = "github.com/prometheus/common"
|
||||
packages = [
|
||||
"expfmt",
|
||||
"internal/bitbucket.org/ww/goautoneg",
|
||||
"model",
|
||||
]
|
||||
pruneopts = "UT"
|
||||
revision = "c7de2306084e37d54b8be01f3541a8464345e9a5"
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
digest = "1:8c49953a1414305f2ff5465147ee576dd705487c35b15918fcd4efdc0cb7a290"
|
||||
name = "github.com/prometheus/procfs"
|
||||
packages = [
|
||||
".",
|
||||
"internal/util",
|
||||
"nfs",
|
||||
"xfs",
|
||||
]
|
||||
pruneopts = "UT"
|
||||
revision = "05ee40e3a273f7245e8777337fc7b46e533a9a92"
|
||||
|
||||
[[projects]]
|
||||
branch = "v1"
|
||||
digest = "1:af715ae33cc1f5695c4b2a4e4b21d008add8802a99e15bb467ac7c32edb5000d"
|
||||
name = "gopkg.in/check.v1"
|
||||
packages = ["."]
|
||||
pruneopts = "UT"
|
||||
revision = "788fd78401277ebd861206a03c884797c6ec5541"
|
||||
|
||||
[[projects]]
|
||||
digest = "1:342378ac4dcb378a5448dd723f0784ae519383532f5e70ade24132c4c8693202"
|
||||
name = "gopkg.in/yaml.v2"
|
||||
packages = ["."]
|
||||
pruneopts = "UT"
|
||||
revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183"
|
||||
version = "v2.2.1"
|
||||
|
||||
[solve-meta]
|
||||
analyzer-name = "dep"
|
||||
analyzer-version = 1
|
||||
input-imports = [
|
||||
"github.com/google/go-cmp/cmp",
|
||||
"github.com/google/go-cmp/cmp/cmpopts",
|
||||
"github.com/ncabatoff/fakescraper",
|
||||
"github.com/ncabatoff/go-seq/seq",
|
||||
"github.com/ncabatoff/procfs",
|
||||
"github.com/prometheus/client_golang/prometheus",
|
||||
"gopkg.in/check.v1",
|
||||
"gopkg.in/yaml.v2",
|
||||
]
|
||||
solver-name = "gps-cdcl"
|
||||
solver-version = 1
|
||||
54
vendor/github.com/ncabatoff/process-exporter/Gopkg.toml
generated
vendored
54
vendor/github.com/ncabatoff/process-exporter/Gopkg.toml
generated
vendored
|
|
@ -1,54 +0,0 @@
|
|||
# Gopkg.toml example
|
||||
#
|
||||
# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md
|
||||
# for detailed Gopkg.toml documentation.
|
||||
#
|
||||
# required = ["github.com/user/thing/cmd/thing"]
|
||||
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
|
||||
#
|
||||
# [[constraint]]
|
||||
# name = "github.com/user/project"
|
||||
# version = "1.0.0"
|
||||
#
|
||||
# [[constraint]]
|
||||
# name = "github.com/user/project2"
|
||||
# branch = "dev"
|
||||
# source = "github.com/myfork/project2"
|
||||
#
|
||||
# [[override]]
|
||||
# name = "github.com/x/y"
|
||||
# version = "2.4.0"
|
||||
#
|
||||
# [prune]
|
||||
# non-go = false
|
||||
# go-tests = true
|
||||
# unused-packages = true
|
||||
|
||||
|
||||
[[constraint]]
|
||||
name = "github.com/google/go-cmp"
|
||||
version = "0.2.0"
|
||||
|
||||
[[constraint]]
|
||||
branch = "master"
|
||||
name = "github.com/ncabatoff/fakescraper"
|
||||
|
||||
[[constraint]]
|
||||
branch = "add-proc-status"
|
||||
name = "github.com/ncabatoff/procfs"
|
||||
|
||||
[[constraint]]
|
||||
name = "github.com/prometheus/client_golang"
|
||||
version = "0.8.0"
|
||||
|
||||
[[constraint]]
|
||||
branch = "v1"
|
||||
name = "gopkg.in/check.v1"
|
||||
|
||||
[[constraint]]
|
||||
name = "gopkg.in/yaml.v2"
|
||||
version = "2.2.1"
|
||||
|
||||
[prune]
|
||||
go-tests = true
|
||||
unused-packages = true
|
||||
17
vendor/github.com/ncabatoff/process-exporter/Makefile
generated
vendored
17
vendor/github.com/ncabatoff/process-exporter/Makefile
generated
vendored
|
|
@ -3,7 +3,7 @@ pkgs = $(shell go list ./... | grep -v /vendor/)
|
|||
PREFIX ?= $(shell pwd)
|
||||
BIN_DIR ?= $(shell pwd)
|
||||
DOCKER_IMAGE_NAME ?= ncabatoff/process-exporter
|
||||
DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD))
|
||||
TAG_VERSION ?= $(shell git describe --tags --abbrev=0)
|
||||
SMOKE_TEST = -config.path packaging/conf/all.yaml -once-to-stdout-delay 1s |grep -q 'namedprocess_namegroup_memory_bytes{groupname="process-exporte",memtype="virtual"}'
|
||||
|
||||
all: format vet test build smoke
|
||||
|
|
@ -26,7 +26,7 @@ vet:
|
|||
|
||||
build:
|
||||
@echo ">> building code"
|
||||
cd cmd/process-exporter; CGO_ENABLED=0 go build -o ../../process-exporter -a -tags netgo
|
||||
cd cmd/process-exporter; CGO_ENABLED=0 go build -ldflags "-X main.version=$(TAG_VERSION)" -o ../../process-exporter -a -tags netgo
|
||||
|
||||
smoke:
|
||||
@echo ">> smoke testing process-exporter"
|
||||
|
|
@ -44,7 +44,16 @@ install:
|
|||
|
||||
docker:
|
||||
@echo ">> building docker image"
|
||||
docker build -t "$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" .
|
||||
docker run --rm -v `pwd`/packaging:/packaging "$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" $(SMOKE_TEST)
|
||||
docker build -t "$(DOCKER_IMAGE_NAME):$(TAG_VERSION)" .
|
||||
docker rm configs
|
||||
docker create -v /packaging --name configs alpine:3.4 /bin/true
|
||||
docker cp packaging/conf configs:/packaging/conf
|
||||
docker run --rm --volumes-from configs "$(DOCKER_IMAGE_NAME):$(TAG_VERSION)" $(SMOKE_TEST)
|
||||
|
||||
dockertest:
|
||||
docker run --rm -it -v `pwd`:/go/src/github.com/ncabatoff/process-exporter golang:1.12 make -C /go/src/github.com/ncabatoff/process-exporter test
|
||||
|
||||
dockerinteg:
|
||||
docker run --rm -it -v `pwd`:/go/src/github.com/ncabatoff/process-exporter golang:1.12 make -C /go/src/github.com/ncabatoff/process-exporter build integ
|
||||
|
||||
.PHONY: all style format test vet build integ docker
|
||||
|
|
|
|||
75
vendor/github.com/ncabatoff/process-exporter/README.md
generated
vendored
75
vendor/github.com/ncabatoff/process-exporter/README.md
generated
vendored
|
|
@ -4,9 +4,8 @@ Prometheus exporter that mines /proc to report on selected processes.
|
|||
[release]: https://github.com/ncabatoff/process-exporter/releases/latest
|
||||
|
||||
[][release]
|
||||
[](https://travis-ci.org/ncabatoff/process-exporter)
|
||||
[](https://github.com/goreleaser)
|
||||
|
||||
[](https://circleci.com/gh/ncabatoff/process-exporter)
|
||||
Some apps are impractical to instrument directly, either because you
|
||||
don't control the code or they're written in a language that isn't easy to
|
||||
instrument with Prometheus. We must instead resort to mining /proc.
|
||||
|
|
@ -39,6 +38,9 @@ walking the process tree upwards. In other words, resource usage of
|
|||
subprocesses is added to their parent's usage unless the subprocess identifies
|
||||
as a different group name.
|
||||
|
||||
-threads (default:true) means that metrics will be broken down by thread name
|
||||
as well as group name.
|
||||
|
||||
-recheck (default:false) means that on each scrape the process names are
|
||||
re-evaluated. This is disabled by default as an optimization, but since
|
||||
processes can choose to change their names, this may result in a process
|
||||
|
|
@ -48,13 +50,15 @@ it's assumed its proper name.
|
|||
-procnames is intended as a quick alternative to using a config file. Details
|
||||
in the following section.
|
||||
|
||||
To disable any of these options, use the `-option=false`.
|
||||
|
||||
## Configuration and group naming
|
||||
|
||||
To select and group the processes to monitor, either provide command-line
|
||||
arguments or use a YAML configuration file.
|
||||
arguments or use a YAML configuration file.
|
||||
|
||||
The recommended option is to use a config file via -config.path, but for
|
||||
convenience and backwards compatability the -procnames/-namemapping options
|
||||
convenience and backwards compatibility the -procnames/-namemapping options
|
||||
exist as an alternative.
|
||||
|
||||
### Using a config file
|
||||
|
|
@ -75,7 +79,7 @@ The default config shipped with the deb/rpm packages is:
|
|||
```
|
||||
process_names:
|
||||
- name: "{{.Comm}}"
|
||||
cmdline:
|
||||
cmdline:
|
||||
- '.+'
|
||||
```
|
||||
|
||||
|
|
@ -98,6 +102,14 @@ Template variables available:
|
|||
- `{{.ExeFull}}` contains the fully qualified path of the executable
|
||||
- `{{.Username}}` contains the username of the effective user
|
||||
- `{{.Matches}}` map contains all the matches resulting from applying cmdline regexps
|
||||
- `{{.PID}}` contains the PID of the process. Note that using PID means the group
|
||||
will only contain a single process.
|
||||
- `{{.StartTime}}` contains the start time of the process. This can be useful
|
||||
in conjunction with PID because PIDs get reused over time.
|
||||
|
||||
Using `PID` or `StartTime` is discouraged: this is almost never what you want,
|
||||
and is likely to result in high cardinality metrics which Prometheus will have
|
||||
trouble with.
|
||||
|
||||
#### Using a config file: process selectors
|
||||
|
||||
|
|
@ -108,7 +120,7 @@ or in the case of `cmdline`, a regexp to apply to the command line. The cmdline
|
|||
regexp uses the [Go syntax](https://golang.org/pkg/regexp).
|
||||
|
||||
For `comm` and `exe`, the list of strings is an OR, meaning any process
|
||||
matching any of the strings will be added to the item's group.
|
||||
matching any of the strings will be added to the item's group.
|
||||
|
||||
For `cmdline`, the list of regexes is an AND, meaning they all must match. Any
|
||||
capturing groups in a regexp must use the `?P<name>` option to assign a name to
|
||||
|
|
@ -122,23 +134,23 @@ match.
|
|||
|
||||
process_names:
|
||||
# comm is the second field of /proc/<pid>/stat minus parens.
|
||||
# It is the base executable name, truncated at 15 chars.
|
||||
# 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:
|
||||
- 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:
|
||||
exe:
|
||||
- /usr/local/bin/process-exporter
|
||||
cmdline:
|
||||
cmdline:
|
||||
- -config.path\s+(?P<Cfgfile>\S+)
|
||||
|
||||
```
|
||||
|
|
@ -148,14 +160,14 @@ Here's the config I use on my home machine:
|
|||
```
|
||||
|
||||
process_names:
|
||||
- comm:
|
||||
- comm:
|
||||
- chromium-browse
|
||||
- bash
|
||||
- prometheus
|
||||
- gvim
|
||||
- exe:
|
||||
- exe:
|
||||
- /sbin/upstart
|
||||
cmdline:
|
||||
cmdline:
|
||||
- --user
|
||||
name: upstart:-user
|
||||
|
||||
|
|
@ -169,14 +181,14 @@ a process is the value found in the second field of /proc/<pid>/stat
|
|||
name of the executable.
|
||||
|
||||
If -namemapping isn't provided, every process with a comm value present
|
||||
in -procnames is assigned to a group based on that name, and any other
|
||||
in -procnames is assigned to a group based on that name, and any other
|
||||
processes are ignored.
|
||||
|
||||
The -namemapping option is a comma-separated list of alternating
|
||||
The -namemapping option is a comma-separated list of alternating
|
||||
name,regexp values. It allows assigning a name to a process based on a
|
||||
combination of the process name and command line. For example, using
|
||||
|
||||
-namemapping "python2,([^/]+)\.py,java,-jar\s+([^/]+).jar"
|
||||
-namemapping "python2,([^/]+)\.py,java,-jar\s+([^/]+).jar"
|
||||
|
||||
will make it so that each different python2 and java -jar invocation will be
|
||||
tracked with distinct metrics. Processes whose remapped name is absent from
|
||||
|
|
@ -194,7 +206,7 @@ unless they're one of the others named explicitly with -procnames, like gvim.
|
|||
## Group Metrics
|
||||
|
||||
There's no meaningful way to name a process that will only ever name a single process, so process-exporter assumes that every metric will be attached
|
||||
to a group of processes - not a
|
||||
to a group of processes - not a
|
||||
[process group](https://en.wikipedia.org/wiki/Process_group) in the technical
|
||||
sense, just one or more processes that meet a configuration's specification
|
||||
of what should be monitored and how to name it.
|
||||
|
|
@ -206,20 +218,14 @@ the label `groupname`.
|
|||
|
||||
Number of processes in this group.
|
||||
|
||||
### cpu_user_seconds_total counter
|
||||
### cpu_seconds_total counter
|
||||
|
||||
CPU usage based on /proc/[pid]/stat field utime(14) i.e. user time.
|
||||
A value of 1 indicates that the processes in this group have been scheduled
|
||||
in user mode for a total of 1 second on a single virtual CPU.
|
||||
|
||||
### cpu_system_seconds_total counter
|
||||
|
||||
CPU usage based on /proc/[pid]/stat field stime(15) i.e. system time.
|
||||
CPU usage based on /proc/[pid]/stat fields utime(14) and stime(15) i.e. user and system time. This is similar to the node\_exporter's `node_cpu_seconds_total`.
|
||||
|
||||
### read_bytes_total counter
|
||||
|
||||
Bytes read based on /proc/[pid]/io field read_bytes. The man page
|
||||
says
|
||||
says
|
||||
|
||||
> Attempt to count the number of bytes which this process really did cause to be fetched from the storage layer. This is accurate for block-backed filesystems.
|
||||
|
||||
|
|
@ -227,7 +233,7 @@ but I would take it with a grain of salt.
|
|||
|
||||
### write_bytes_total counter
|
||||
|
||||
Bytes written based on /proc/[pid]/io field write_bytes. As with
|
||||
Bytes written based on /proc/[pid]/io field write_bytes. As with
|
||||
read_bytes, somewhat dubious. May be useful for isolating which processes
|
||||
are doing the most I/O, but probably not measuring just how much I/O is happening.
|
||||
|
||||
|
|
@ -247,7 +253,7 @@ and nonvoluntary_ctxt_switches. The extra label `ctxswitchtype` can have two va
|
|||
|
||||
### memory_bytes gauge
|
||||
|
||||
Number of bytes of memory used. The extra label `memtype` can have two values:
|
||||
Number of bytes of memory used. The extra label `memtype` can have three values:
|
||||
|
||||
*resident*: Field rss(24) from /proc/[pid]/stat, whose doc says:
|
||||
|
||||
|
|
@ -265,7 +271,7 @@ Number of file descriptors, based on counting how many entries are in the direct
|
|||
### worst_fd_ratio gauge
|
||||
|
||||
Worst ratio of open filedescs to filedesc limit, amongst all the procs in the
|
||||
group. The limit is the fd soft limit based on /proc/[pid]/limits.
|
||||
group. The limit is the fd soft limit based on /proc/[pid]/limits.
|
||||
|
||||
Normally Prometheus metrics ought to be as "basic" as possible (i.e. the raw
|
||||
values rather than a derived ratio), but we use a ratio here because nothing
|
||||
|
|
@ -297,6 +303,9 @@ The extra label `state` can have these values: `Running`, `Sleeping`, `Waiting`,
|
|||
|
||||
## Group Thread Metrics
|
||||
|
||||
Since publishing thread metrics adds a lot of overhead, use the `-threads` command-line argument to disable them,
|
||||
if necessary.
|
||||
|
||||
All these metrics start with `namedprocess_namegroup_` and have at minimum
|
||||
the labels `groupname` and `threadname`. `threadname` is field comm(2) from
|
||||
/proc/[pid]/stat. Just as groupname breaks the set of processes down into
|
||||
|
|
@ -315,7 +324,7 @@ the label `cpumode` is used to distinguish between `user` and `system` time.
|
|||
### thread_io_bytes_total counter
|
||||
|
||||
Same as read_bytes_total and write_bytes_total, but broken down
|
||||
per-thread subgroup. Unlike read_bytes_total/write_bytes_total,
|
||||
per-thread subgroup. Unlike read_bytes_total/write_bytes_total,
|
||||
the label `iomode` is used to distinguish between `read` and `write` bytes.
|
||||
|
||||
### thread_major_page_faults_total counter
|
||||
|
|
@ -347,9 +356,7 @@ An example Grafana dashboard to view the metrics is available at https://grafana
|
|||
|
||||
## Building
|
||||
|
||||
Install [dep](https://github.com/golang/dep), then:
|
||||
|
||||
Requires Go 1.12 installed.
|
||||
```
|
||||
dep ensure
|
||||
make
|
||||
```
|
||||
|
|
|
|||
13
vendor/github.com/ncabatoff/process-exporter/common.go
generated
vendored
13
vendor/github.com/ncabatoff/process-exporter/common.go
generated
vendored
|
|
@ -1,12 +1,17 @@
|
|||
package common
|
||||
|
||||
import "fmt"
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
type (
|
||||
ProcAttributes struct {
|
||||
Name string
|
||||
Cmdline []string
|
||||
Username string
|
||||
Name string
|
||||
Cmdline []string
|
||||
Username string
|
||||
PID int
|
||||
StartTime time.Time
|
||||
}
|
||||
|
||||
MatchNamer interface {
|
||||
|
|
|
|||
19
vendor/github.com/ncabatoff/process-exporter/go.mod
generated
vendored
Normal file
19
vendor/github.com/ncabatoff/process-exporter/go.mod
generated
vendored
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
module github.com/ncabatoff/process-exporter
|
||||
|
||||
go 1.12
|
||||
|
||||
require (
|
||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 // indirect
|
||||
github.com/golang/protobuf v1.1.0 // indirect
|
||||
github.com/google/go-cmp v0.2.0
|
||||
github.com/kr/pretty v0.1.0 // indirect
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
|
||||
github.com/ncabatoff/fakescraper v0.0.0-20161023141611-15938421d91a
|
||||
github.com/ncabatoff/go-seq v0.0.0-20180805175032-b08ef85ed833
|
||||
github.com/ncabatoff/procfs v0.0.0-20190407151002-9ced60d7b905
|
||||
github.com/prometheus/client_golang v0.8.0
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 // indirect
|
||||
github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e // indirect
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127
|
||||
gopkg.in/yaml.v2 v2.2.1
|
||||
)
|
||||
34
vendor/github.com/ncabatoff/process-exporter/go.sum
generated
vendored
Normal file
34
vendor/github.com/ncabatoff/process-exporter/go.sum
generated
vendored
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0=
|
||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||
github.com/golang/protobuf v1.1.0 h1:0iH4Ffd/meGoXqF2lSAhZHt8X+cPgkfn/cb6Cce5Vpc=
|
||||
github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
|
||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/ncabatoff/fakescraper v0.0.0-20161023141611-15938421d91a h1:EiVm0QRmWIqeMSOBCK07n1FqZxRUajw3KrPP1W14kD0=
|
||||
github.com/ncabatoff/fakescraper v0.0.0-20161023141611-15938421d91a/go.mod h1:Tx6UMSMyIsjLG/VU/F6xA1+0XI+/f9o1dGJnf1l+bPg=
|
||||
github.com/ncabatoff/go-seq v0.0.0-20180805175032-b08ef85ed833 h1:t4WWQ9I797y7QUgeEjeXnVb+oYuEDQc6gLvrZJTYo94=
|
||||
github.com/ncabatoff/go-seq v0.0.0-20180805175032-b08ef85ed833/go.mod h1:0CznHmXSjMEqs5Tezj/w2emQoM41wzYM9KpDKUHPYag=
|
||||
github.com/ncabatoff/procfs v0.0.0-20190407151002-9ced60d7b905 h1:/3OkXZ7kxS0OFE4cwsaUxiNUdqcSxnAx4tYSwSrEhsA=
|
||||
github.com/ncabatoff/procfs v0.0.0-20190407151002-9ced60d7b905/go.mod h1:KTPr41gNXs60qG2NxvdoWiBCRMDhjP4f0vpaoT/A7AY=
|
||||
github.com/prometheus/client_golang v0.8.0 h1:1921Yw9Gc3iSc4VQh3PIoOqgPCZS7G/4xQNVUp8Mda8=
|
||||
github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8=
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e h1:n/3MEhJQjQxrOUCzh1Y3Re6aJUUWRp2M9+Oc3eVn/54=
|
||||
github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
||||
github.com/prometheus/procfs v0.0.0-20190403104016-ea9eea638872 h1:0aNv3xC7DmQoy1/x1sMh18g+fihWW68LL13i8ao9kl4=
|
||||
github.com/prometheus/procfs v0.0.0-20190403104016-ea9eea638872/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
|
||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
4
vendor/github.com/ncabatoff/process-exporter/proc/grouper.go
generated
vendored
4
vendor/github.com/ncabatoff/process-exporter/proc/grouper.go
generated
vendored
|
|
@ -49,11 +49,11 @@ type (
|
|||
func lessThreads(x, y Threads) bool { return seq.Compare(x, y) < 0 }
|
||||
|
||||
// NewGrouper creates a grouper.
|
||||
func NewGrouper(namer common.MatchNamer, trackChildren, alwaysRecheck, debug bool) *Grouper {
|
||||
func NewGrouper(namer common.MatchNamer, trackChildren, trackThreads, alwaysRecheck, debug bool) *Grouper {
|
||||
g := Grouper{
|
||||
groupAccum: make(map[string]Counts),
|
||||
threadAccum: make(map[string]map[string]Threads),
|
||||
tracker: NewTracker(namer, trackChildren, alwaysRecheck, debug),
|
||||
tracker: NewTracker(namer, trackChildren, trackThreads, alwaysRecheck, debug),
|
||||
debug: debug,
|
||||
}
|
||||
return &g
|
||||
|
|
|
|||
10
vendor/github.com/ncabatoff/process-exporter/proc/read.go
generated
vendored
10
vendor/github.com/ncabatoff/process-exporter/proc/read.go
generated
vendored
|
|
@ -379,7 +379,7 @@ func (p proc) GetCounts() (Counts, int, error) {
|
|||
if err == os.ErrNotExist {
|
||||
err = ErrProcNotExist
|
||||
}
|
||||
return Counts{}, 0, err
|
||||
return Counts{}, 0, fmt.Errorf("error reading stat file: %v", err)
|
||||
}
|
||||
|
||||
status, err := p.getStatus()
|
||||
|
|
@ -387,7 +387,7 @@ func (p proc) GetCounts() (Counts, int, error) {
|
|||
if err == os.ErrNotExist {
|
||||
err = ErrProcNotExist
|
||||
}
|
||||
return Counts{}, 0, err
|
||||
return Counts{}, 0, fmt.Errorf("error reading status file: %v", err)
|
||||
}
|
||||
|
||||
io, err := p.getIo()
|
||||
|
|
@ -450,10 +450,8 @@ func (p proc) GetMetrics() (Metrics, int, error) {
|
|||
// Ditto for states
|
||||
states, _ := p.GetStates()
|
||||
|
||||
status, err := p.getStatus()
|
||||
if err != nil {
|
||||
return Metrics{}, 0, err
|
||||
}
|
||||
// Ditto for status
|
||||
status, _ := p.getStatus()
|
||||
|
||||
numfds, err := p.Proc.FileDescriptorsLen()
|
||||
if err != nil {
|
||||
|
|
|
|||
22
vendor/github.com/ncabatoff/process-exporter/proc/tracker.go
generated
vendored
22
vendor/github.com/ncabatoff/process-exporter/proc/tracker.go
generated
vendored
|
|
@ -26,6 +26,8 @@ type (
|
|||
// trackChildren makes Tracker track descendants of procs the
|
||||
// namer wanted tracked.
|
||||
trackChildren bool
|
||||
// trackThreads makes Tracker track per-thread metrics.
|
||||
trackThreads bool
|
||||
// never ignore processes, i.e. always re-check untracked processes in case comm has changed
|
||||
alwaysRecheck bool
|
||||
username map[int]string
|
||||
|
|
@ -85,7 +87,8 @@ type (
|
|||
States
|
||||
// Wchans is how many threads are in each non-zero wchan.
|
||||
Wchans map[string]int
|
||||
// Threads are the thread updates for this process.
|
||||
// Threads are the thread updates for this process, if the Tracker
|
||||
// has trackThreads==true.
|
||||
Threads []ThreadUpdate
|
||||
}
|
||||
|
||||
|
|
@ -135,12 +138,13 @@ func (tp *trackedProc) getUpdate() Update {
|
|||
}
|
||||
|
||||
// NewTracker creates a Tracker.
|
||||
func NewTracker(namer common.MatchNamer, trackChildren, alwaysRecheck, debug bool) *Tracker {
|
||||
func NewTracker(namer common.MatchNamer, trackChildren, trackThreads, alwaysRecheck, debug bool) *Tracker {
|
||||
return &Tracker{
|
||||
namer: namer,
|
||||
tracked: make(map[ID]*trackedProc),
|
||||
procIds: make(map[int]ID),
|
||||
trackChildren: trackChildren,
|
||||
trackThreads: trackThreads,
|
||||
alwaysRecheck: alwaysRecheck,
|
||||
username: make(map[int]string),
|
||||
debug: debug,
|
||||
|
|
@ -206,6 +210,9 @@ func (t *Tracker) handleProc(proc Proc, updateTime time.Time) (*IDInfo, CollectE
|
|||
var cerrs CollectErrors
|
||||
procID, err := proc.GetProcID()
|
||||
if err != nil {
|
||||
if t.debug {
|
||||
log.Printf("error getting proc ID for pid %+v: %v", proc.GetPid(), err)
|
||||
}
|
||||
return nil, cerrs
|
||||
}
|
||||
|
||||
|
|
@ -231,6 +238,9 @@ func (t *Tracker) handleProc(proc Proc, updateTime time.Time) (*IDInfo, CollectE
|
|||
var threads []Thread
|
||||
threads, err = proc.GetThreads()
|
||||
if err != nil {
|
||||
if t.debug {
|
||||
log.Printf("can't read thread metrics for %+v: %v", procID, err)
|
||||
}
|
||||
softerrors |= 1
|
||||
}
|
||||
cerrs.Partial += softerrors
|
||||
|
|
@ -396,9 +406,11 @@ func (t *Tracker) Update(iter Iter) (CollectErrors, []Update, error) {
|
|||
untracked := make(map[ID]IDInfo)
|
||||
for _, idinfo := range newProcs {
|
||||
nacl := common.ProcAttributes{
|
||||
Name: idinfo.Name,
|
||||
Cmdline: idinfo.Cmdline,
|
||||
Username: t.lookupUid(idinfo.EffectiveUID),
|
||||
Name: idinfo.Name,
|
||||
Cmdline: idinfo.Cmdline,
|
||||
Username: t.lookupUid(idinfo.EffectiveUID),
|
||||
PID: idinfo.Pid,
|
||||
StartTime: idinfo.StartTime,
|
||||
}
|
||||
wanted, gname := t.namer.MatchAndName(nacl)
|
||||
if wanted {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue