// Copyright 2021 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package collectors import "github.com/prometheus/client_golang/prometheus" // ProcessCollectorOpts defines the behavior of a process metrics collector // created with NewProcessCollector. type ProcessCollectorOpts struct { // PidFn returns the PID of the process the collector collects metrics // for. It is called upon each collection. By default, the PID of the // current process is used, as determined on construction time by // calling os.Getpid(). PidFn func() (int, error) // If non-empty, each of the collected metrics is prefixed by the // provided string and an underscore ("_"). Namespace string // If true, any error encountered during collection is reported as an // invalid metric (see NewInvalidMetric). Otherwise, errors are ignored // and the collected metrics will be incomplete. (Possibly, no metrics // will be collected at all.) While that's usually not desired, it is // appropriate for the common "mix-in" of process metrics, where process // metrics are nice to have, but failing to collect them should not // disrupt the collection of the remaining metrics. ReportErrors bool } // NewProcessCollector returns a collector which exports the current state of // process metrics including CPU, memory and file descriptor usage as well as // the process start time. The detailed behavior is defined by the provided // ProcessCollectorOpts. The zero value of ProcessCollectorOpts creates a // collector for the current process with an empty namespace string and no error // reporting. // // The collector only works on operating systems with a Linux-style proc // filesystem and on Microsoft Windows. On other operating systems, it will not // collect any metrics. func NewProcessCollector(opts ProcessCollectorOpts) prometheus.Collector { //nolint:staticcheck // Ignore SA1019 until v2. return prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{ PidFn: opts.PidFn, Namespace: opts.Namespace, ReportErrors: opts.ReportErrors, }) }