Skip to content

Commit d77185d

Browse files
authored
Limit the number of open file handles (#29)
1 parent 1f66cf4 commit d77185d

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

nrpe_exporter.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
"github.com/prometheus/common/promlog/flag"
1616
"github.com/prometheus/common/version"
1717
"github.com/spacemonkeygo/openssl"
18-
kingpin "gopkg.in/alecthomas/kingpin.v2"
18+
"gopkg.in/alecthomas/kingpin.v2"
1919
)
2020

2121
var (
@@ -81,6 +81,8 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) {
8181
var conn net.Conn
8282
var err error
8383

84+
defer conn.Close()
85+
8486
// Connect to NRPE server
8587
if c.ssl {
8688
ctx, err = openssl.NewCtx()
@@ -98,11 +100,11 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) {
98100
d := net.Dialer{}
99101
conn, err = d.Dial("tcp", c.target)
100102
}
103+
101104
if err != nil {
102105
level.Error(c.logger).Log("msg", "Error dialing NRPE server", "err", err)
103106
return
104107
}
105-
defer conn.Close()
106108

107109
cmdResult, err := collectCommandMetrics(c.command, conn, c.logger)
108110
if err != nil {
@@ -126,6 +128,13 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) {
126128
prometheus.GaugeValue,
127129
float64(cmdResult.result.ResultCode),
128130
)
131+
132+
// Make sure the connection is closed, since it will re-dial on the next check
133+
// Closing a connection more than once is fine. The defer above will simply noop, as it's already closed
134+
err = conn.Close()
135+
if err != nil {
136+
level.Error(c.logger).Log("msg", "Could not close connection to NRPE server", "target", c.target, "err", err)
137+
}
129138
}
130139

131140
// NewCollector returns new collector with logger and given command
@@ -165,6 +174,7 @@ func main() {
165174
kingpin.Version(version.Print("nrpe_exporter"))
166175
kingpin.HelpFlag.Short('h')
167176
kingpin.Parse()
177+
168178
logger := promlog.New(&logConfig)
169179
level.Info(logger).Log("msg", "Starting nrpe_exporter", "version", version.Info())
170180
level.Info(logger).Log("msg", "Build context", "build_context", version.BuildContext())

0 commit comments

Comments
 (0)