process_collector: collect received/transmitted bytes (#1555)
Signed-off-by: Huw Jones <huw@pexip.com>
This commit is contained in:
parent
fec6b222d9
commit
10f4161c7d
|
@ -22,14 +22,15 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type processCollector struct {
|
type processCollector struct {
|
||||||
collectFn func(chan<- Metric)
|
collectFn func(chan<- Metric)
|
||||||
pidFn func() (int, error)
|
pidFn func() (int, error)
|
||||||
reportErrors bool
|
reportErrors bool
|
||||||
cpuTotal *Desc
|
cpuTotal *Desc
|
||||||
openFDs, maxFDs *Desc
|
openFDs, maxFDs *Desc
|
||||||
vsize, maxVsize *Desc
|
vsize, maxVsize *Desc
|
||||||
rss *Desc
|
rss *Desc
|
||||||
startTime *Desc
|
startTime *Desc
|
||||||
|
inBytes, outBytes *Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProcessCollectorOpts defines the behavior of a process metrics collector
|
// ProcessCollectorOpts defines the behavior of a process metrics collector
|
||||||
|
@ -100,6 +101,16 @@ func NewProcessCollector(opts ProcessCollectorOpts) Collector {
|
||||||
"Start time of the process since unix epoch in seconds.",
|
"Start time of the process since unix epoch in seconds.",
|
||||||
nil, nil,
|
nil, nil,
|
||||||
),
|
),
|
||||||
|
inBytes: NewDesc(
|
||||||
|
ns+"process_network_receive_bytes_total",
|
||||||
|
"Number of bytes received by the process over the network.",
|
||||||
|
nil, nil,
|
||||||
|
),
|
||||||
|
outBytes: NewDesc(
|
||||||
|
ns+"process_network_transmit_bytes_total",
|
||||||
|
"Number of bytes sent by the process over the network.",
|
||||||
|
nil, nil,
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
if opts.PidFn == nil {
|
if opts.PidFn == nil {
|
||||||
|
|
|
@ -63,4 +63,18 @@ func (c *processCollector) processCollect(ch chan<- Metric) {
|
||||||
} else {
|
} else {
|
||||||
c.reportError(ch, nil, err)
|
c.reportError(ch, nil, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if netstat, err := p.Netstat(); err == nil {
|
||||||
|
var inOctets, outOctets float64
|
||||||
|
if netstat.IpExt.InOctets != nil {
|
||||||
|
inOctets = *netstat.IpExt.InOctets
|
||||||
|
}
|
||||||
|
if netstat.IpExt.OutOctets != nil {
|
||||||
|
outOctets = *netstat.IpExt.OutOctets
|
||||||
|
}
|
||||||
|
ch <- MustNewConstMetric(c.inBytes, CounterValue, inOctets)
|
||||||
|
ch <- MustNewConstMetric(c.outBytes, CounterValue, outOctets)
|
||||||
|
} else {
|
||||||
|
c.reportError(ch, nil, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,6 +69,8 @@ func TestProcessCollector(t *testing.T) {
|
||||||
regexp.MustCompile("\nprocess_virtual_memory_bytes [1-9]"),
|
regexp.MustCompile("\nprocess_virtual_memory_bytes [1-9]"),
|
||||||
regexp.MustCompile("\nprocess_resident_memory_bytes [1-9]"),
|
regexp.MustCompile("\nprocess_resident_memory_bytes [1-9]"),
|
||||||
regexp.MustCompile("\nprocess_start_time_seconds [0-9.]{10,}"),
|
regexp.MustCompile("\nprocess_start_time_seconds [0-9.]{10,}"),
|
||||||
|
regexp.MustCompile("\nprocess_network_receive_bytes_total [0-9]+"),
|
||||||
|
regexp.MustCompile("\nprocess_network_transmit_bytes_total [0-9]+"),
|
||||||
regexp.MustCompile("\nfoobar_process_cpu_seconds_total [0-9]"),
|
regexp.MustCompile("\nfoobar_process_cpu_seconds_total [0-9]"),
|
||||||
regexp.MustCompile("\nfoobar_process_max_fds [1-9]"),
|
regexp.MustCompile("\nfoobar_process_max_fds [1-9]"),
|
||||||
regexp.MustCompile("\nfoobar_process_open_fds [1-9]"),
|
regexp.MustCompile("\nfoobar_process_open_fds [1-9]"),
|
||||||
|
@ -76,6 +78,8 @@ func TestProcessCollector(t *testing.T) {
|
||||||
regexp.MustCompile("\nfoobar_process_virtual_memory_bytes [1-9]"),
|
regexp.MustCompile("\nfoobar_process_virtual_memory_bytes [1-9]"),
|
||||||
regexp.MustCompile("\nfoobar_process_resident_memory_bytes [1-9]"),
|
regexp.MustCompile("\nfoobar_process_resident_memory_bytes [1-9]"),
|
||||||
regexp.MustCompile("\nfoobar_process_start_time_seconds [0-9.]{10,}"),
|
regexp.MustCompile("\nfoobar_process_start_time_seconds [0-9.]{10,}"),
|
||||||
|
regexp.MustCompile("\nfoobar_process_network_receive_bytes_total [0-9]+"),
|
||||||
|
regexp.MustCompile("\nfoobar_process_network_transmit_bytes_total [0-9]+"),
|
||||||
} {
|
} {
|
||||||
if !re.Match(buf.Bytes()) {
|
if !re.Match(buf.Bytes()) {
|
||||||
t.Errorf("want body to match %s\n%s", re, buf.String())
|
t.Errorf("want body to match %s\n%s", re, buf.String())
|
||||||
|
|
Loading…
Reference in New Issue