@@ -77,6 +77,8 @@ type Collector struct {
77
77
ipEgressBytes * prometheus.Desc
78
78
ipIngressPackets * prometheus.Desc
79
79
ipEgressPackets * prometheus.Desc
80
+ scrapeDurationDesc * prometheus.Desc
81
+ scrapeSuccessDesc * prometheus.Desc
80
82
81
83
unitIncludePattern * regexp.Regexp
82
84
unitExcludePattern * regexp.Regexp
@@ -186,6 +188,16 @@ func NewCollector(logger log.Logger) (*Collector, error) {
186
188
"Service unit egress IP accounting in packets." ,
187
189
[]string {"name" }, nil ,
188
190
)
191
+ scrapeDurationDesc := prometheus .NewDesc (
192
+ prometheus .BuildFQName (namespace , "exporter" , "collector_duration_seconds" ),
193
+ "systemd_exporter: Duration of a systemd collector scrape." ,
194
+ []string {"collector" }, nil ,
195
+ )
196
+ scrapeSuccessDesc := prometheus .NewDesc (
197
+ prometheus .BuildFQName (namespace , "exporter" , "collector_success" ),
198
+ "systemd_exporter: Whether the systemd collector succeeded." ,
199
+ []string {"collector" }, nil ,
200
+ )
189
201
unitIncludePattern := regexp .MustCompile (fmt .Sprintf ("^(?:%s)$" , * unitInclude ))
190
202
unitExcludePattern := regexp .MustCompile (fmt .Sprintf ("^(?:%s)$" , * unitExclude ))
191
203
@@ -213,17 +225,28 @@ func NewCollector(logger log.Logger) (*Collector, error) {
213
225
ipEgressBytes : ipEgressBytes ,
214
226
ipIngressPackets : ipIngressPackets ,
215
227
ipEgressPackets : ipEgressPackets ,
228
+ scrapeSuccessDesc : scrapeSuccessDesc ,
229
+ scrapeDurationDesc : scrapeDurationDesc ,
216
230
unitIncludePattern : unitIncludePattern ,
217
231
unitExcludePattern : unitExcludePattern ,
218
232
}, nil
219
233
}
220
234
221
235
// Collect gathers metrics from systemd.
222
236
func (c * Collector ) Collect (ch chan <- prometheus.Metric ) {
237
+ begin := time .Now ()
238
+
223
239
err := c .collect (ch )
224
240
if err != nil {
225
241
level .Error (c .logger ).Log ("msg" , "error collecting metrics" , "err" , err )
242
+ ch <- prometheus .MustNewConstMetric (
243
+ c .scrapeSuccessDesc , prometheus .GaugeValue , 0 , namespace )
244
+ } else {
245
+ ch <- prometheus .MustNewConstMetric (
246
+ c .scrapeSuccessDesc , prometheus .GaugeValue , 1 , namespace )
226
247
}
248
+
249
+ ch <- prometheus .MustNewConstMetric (c .scrapeDurationDesc , prometheus .GaugeValue , time .Since (begin ).Seconds (), namespace )
227
250
}
228
251
229
252
// Describe gathers descriptions of Metrics
@@ -243,6 +266,8 @@ func (c *Collector) Describe(desc chan<- *prometheus.Desc) {
243
266
desc <- c .ipEgressBytes
244
267
desc <- c .ipIngressPackets
245
268
desc <- c .ipEgressPackets
269
+ desc <- c .scrapeDurationDesc
270
+ desc <- c .scrapeSuccessDesc
246
271
247
272
}
248
273
0 commit comments