@@ -15,7 +15,7 @@ import (
15
15
"github.com/prometheus/common/promlog/flag"
16
16
"github.com/prometheus/common/version"
17
17
"github.com/spacemonkeygo/openssl"
18
- kingpin "gopkg.in/alecthomas/kingpin.v2"
18
+ "gopkg.in/alecthomas/kingpin.v2"
19
19
)
20
20
21
21
var (
@@ -81,6 +81,8 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) {
81
81
var conn net.Conn
82
82
var err error
83
83
84
+ defer conn .Close ()
85
+
84
86
// Connect to NRPE server
85
87
if c .ssl {
86
88
ctx , err = openssl .NewCtx ()
@@ -98,11 +100,11 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) {
98
100
d := net.Dialer {}
99
101
conn , err = d .Dial ("tcp" , c .target )
100
102
}
103
+
101
104
if err != nil {
102
105
level .Error (c .logger ).Log ("msg" , "Error dialing NRPE server" , "err" , err )
103
106
return
104
107
}
105
- defer conn .Close ()
106
108
107
109
cmdResult , err := collectCommandMetrics (c .command , conn , c .logger )
108
110
if err != nil {
@@ -126,6 +128,13 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) {
126
128
prometheus .GaugeValue ,
127
129
float64 (cmdResult .result .ResultCode ),
128
130
)
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
+ }
129
138
}
130
139
131
140
// NewCollector returns new collector with logger and given command
@@ -165,6 +174,7 @@ func main() {
165
174
kingpin .Version (version .Print ("nrpe_exporter" ))
166
175
kingpin .HelpFlag .Short ('h' )
167
176
kingpin .Parse ()
177
+
168
178
logger := promlog .New (& logConfig )
169
179
level .Info (logger ).Log ("msg" , "Starting nrpe_exporter" , "version" , version .Info ())
170
180
level .Info (logger ).Log ("msg" , "Build context" , "build_context" , version .BuildContext ())
0 commit comments