Merge pull request #70 from prometheus/handle-process-collector-errors-gracefully
Handle process collector errors gracefully
This commit is contained in:
commit
acbd2d3eac
|
@ -24,26 +24,20 @@ func processCollectSupported() bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(ts): Bring back error reporting by reverting 7faf9e7 as soon as the
|
||||||
|
// client allows users to configure the error behavior.
|
||||||
func (c *processCollector) processCollect(ch chan<- Metric) {
|
func (c *processCollector) processCollect(ch chan<- Metric) {
|
||||||
pid, err := c.pidFn()
|
pid, err := c.pidFn()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.reportCollectErrors(ch, err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
p, err := procfs.NewProc(pid)
|
p, err := procfs.NewProc(pid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.reportCollectErrors(ch, err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if stat, err := p.NewStat(); err != nil {
|
if stat, err := p.NewStat(); err == nil {
|
||||||
// Report collect errors for metrics depending on stat.
|
|
||||||
ch <- NewInvalidMetric(c.vsize.Desc(), err)
|
|
||||||
ch <- NewInvalidMetric(c.rss.Desc(), err)
|
|
||||||
ch <- NewInvalidMetric(c.startTime.Desc(), err)
|
|
||||||
ch <- NewInvalidMetric(c.cpuTotal.Desc(), err)
|
|
||||||
} else {
|
|
||||||
c.cpuTotal.Set(stat.CPUTime())
|
c.cpuTotal.Set(stat.CPUTime())
|
||||||
ch <- c.cpuTotal
|
ch <- c.cpuTotal
|
||||||
c.vsize.Set(float64(stat.VirtualMemory()))
|
c.vsize.Set(float64(stat.VirtualMemory()))
|
||||||
|
@ -51,34 +45,19 @@ func (c *processCollector) processCollect(ch chan<- Metric) {
|
||||||
c.rss.Set(float64(stat.ResidentMemory()))
|
c.rss.Set(float64(stat.ResidentMemory()))
|
||||||
ch <- c.rss
|
ch <- c.rss
|
||||||
|
|
||||||
if startTime, err := stat.StartTime(); err != nil {
|
if startTime, err := stat.StartTime(); err == nil {
|
||||||
ch <- NewInvalidMetric(c.startTime.Desc(), err)
|
|
||||||
} else {
|
|
||||||
c.startTime.Set(startTime)
|
c.startTime.Set(startTime)
|
||||||
ch <- c.startTime
|
ch <- c.startTime
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if fds, err := p.FileDescriptorsLen(); err != nil {
|
if fds, err := p.FileDescriptorsLen(); err == nil {
|
||||||
ch <- NewInvalidMetric(c.openFDs.Desc(), err)
|
|
||||||
} else {
|
|
||||||
c.openFDs.Set(float64(fds))
|
c.openFDs.Set(float64(fds))
|
||||||
ch <- c.openFDs
|
ch <- c.openFDs
|
||||||
}
|
}
|
||||||
|
|
||||||
if limits, err := p.NewLimits(); err != nil {
|
if limits, err := p.NewLimits(); err == nil {
|
||||||
ch <- NewInvalidMetric(c.maxFDs.Desc(), err)
|
|
||||||
} else {
|
|
||||||
c.maxFDs.Set(float64(limits.OpenFiles))
|
c.maxFDs.Set(float64(limits.OpenFiles))
|
||||||
ch <- c.maxFDs
|
ch <- c.maxFDs
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *processCollector) reportCollectErrors(ch chan<- Metric, err error) {
|
|
||||||
ch <- NewInvalidMetric(c.cpuTotal.Desc(), err)
|
|
||||||
ch <- NewInvalidMetric(c.openFDs.Desc(), err)
|
|
||||||
ch <- NewInvalidMetric(c.maxFDs.Desc(), err)
|
|
||||||
ch <- NewInvalidMetric(c.vsize.Desc(), err)
|
|
||||||
ch <- NewInvalidMetric(c.rss.Desc(), err)
|
|
||||||
ch <- NewInvalidMetric(c.startTime.Desc(), err)
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue