// NewProcessCollectorPIDFn 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 under the given namespace. The given pidFn is // called on each collect and is used to determine the process to export // metrics for. func NewProcessCollectorPIDFn( pidFn func() (int, error), namespace string, ) Collector { ns := "" if len(namespace) > 0 { ns = namespace + "_" } c := processCollector{ pidFn: pidFn, collectFn: func(chan<- Metric) {}, cpuTotal: NewDesc( ns+"process_cpu_seconds_total", "Total user and system CPU time spent in seconds.", nil, nil, ), openFDs: NewDesc( ns+"process_open_fds", "Number of open file descriptors.", nil, nil, ), maxFDs: NewDesc( ns+"process_max_fds", "Maximum number of open file descriptors.", nil, nil, ), vsize: NewDesc( ns+"process_virtual_memory_bytes", "Virtual memory size in bytes.", nil, nil, ), rss: NewDesc( ns+"process_resident_memory_bytes", "Resident memory size in bytes.", nil, nil, ), startTime: NewDesc( ns+"process_start_time_seconds", "Start time of the process since unix epoch in seconds.", nil, nil, ), } // Set up process metric collection if supported by the runtime. if _, err := procfs.NewStat(); err == nil { c.collectFn = c.processCollect } return &c }
// NewProcessCollectorPIDFn 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 under the given namespace. The given pidFn is // called on each collect and is used to determine the process to export // metrics for. func NewProcessCollectorPIDFn( pidFn func() (int, error), namespace string, ) Collector { c := processCollector{ pidFn: pidFn, collectFn: func(chan<- Metric) {}, cpuTotal: NewCounter(CounterOpts{ Namespace: namespace, Name: "process_cpu_seconds_total", Help: "Total user and system CPU time spent in seconds.", }), openFDs: NewGauge(GaugeOpts{ Namespace: namespace, Name: "process_open_fds", Help: "Number of open file descriptors.", }), maxFDs: NewGauge(GaugeOpts{ Namespace: namespace, Name: "process_max_fds", Help: "Maximum number of open file descriptors.", }), vsize: NewGauge(GaugeOpts{ Namespace: namespace, Name: "process_virtual_memory_bytes", Help: "Virtual memory size in bytes.", }), rss: NewGauge(GaugeOpts{ Namespace: namespace, Name: "process_resident_memory_bytes", Help: "Resident memory size in bytes.", }), startTime: NewGauge(GaugeOpts{ Namespace: namespace, Name: "process_start_time_seconds", Help: "Start time of the process since unix epoch in seconds.", }), } // Set up process metric collection if supported by the runtime. if _, err := procfs.NewStat(); err == nil { c.collectFn = c.processCollect } return &c }
func processCollectSupported() bool { if _, err := procfs.NewStat(); err == nil { return true } return false }