Skip to content

Commit a5fe09e

Browse files
remove _ssl_expire_time_seconds metric by identifier (#11239)
Signed-off-by: xiayu.lyt <[email protected]> Co-authored-by: xiayu.lyt <[email protected]>
1 parent d44e727 commit a5fe09e

File tree

5 files changed

+31
-17
lines changed

5 files changed

+31
-17
lines changed

internal/ingress/controller/controller.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,9 +250,8 @@ func (n *NGINXController) syncIngress(interface{}) error {
250250
}
251251

252252
ri := utilingress.GetRemovedIngresses(n.runningConfig, pcfg)
253-
re := utilingress.GetRemovedHosts(n.runningConfig, pcfg)
254253
rc := utilingress.GetRemovedCertificateSerialNumbers(n.runningConfig, pcfg)
255-
n.metricCollector.RemoveMetrics(ri, re, rc)
254+
n.metricCollector.RemoveMetrics(ri, rc)
256255

257256
n.runningConfig = pcfg
258257

internal/ingress/metric/collectors/controller.go

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import (
3030
var (
3131
operation = []string{"controller_namespace", "controller_class", "controller_pod"}
3232
ingressOperation = []string{"controller_namespace", "controller_class", "controller_pod", "namespace", "ingress"}
33-
sslLabelHost = []string{"namespace", "class", "host", "secret_name"}
33+
sslLabelHost = []string{"namespace", "class", "host", "secret_name", "identifier"}
3434
sslInfoLabels = []string{"namespace", "class", "host", "secret_name", "identifier", "issuer_organization", "issuer_common_name", "serial_number", "public_key_algorithm"}
3535
orphanityLabels = []string{"controller_namespace", "controller_class", "controller_pod", "namespace", "ingress", "type"}
3636
)
@@ -305,6 +305,7 @@ func (cm *Controller) SetSSLExpireTime(servers []*ingress.Server) {
305305
}
306306
labels["host"] = s.Hostname
307307
labels["secret_name"] = s.SSLCert.Name
308+
labels["identifier"] = s.SSLCert.Identifier()
308309

309310
cm.sslExpireTime.With(labels).Set(float64(s.SSLCert.ExpireTime.Unix()))
310311
}
@@ -337,9 +338,9 @@ func (cm *Controller) SetSSLInfo(servers []*ingress.Server) {
337338
}
338339
}
339340

340-
// RemoveMetrics removes metrics for hostnames not available anymore
341-
func (cm *Controller) RemoveMetrics(hosts, certificates []string, registry prometheus.Gatherer) {
342-
cm.removeSSLExpireMetrics(true, hosts, registry)
341+
// RemoveMetrics removes metrics for certificates not available anymore by identifier
342+
func (cm *Controller) RemoveMetrics(certificates []string, registry prometheus.Gatherer) {
343+
cm.removeSSLExpireMetrics(true, certificates, registry)
343344
cm.removeCertificatesMetrics(true, certificates, registry)
344345
}
345346

@@ -390,14 +391,14 @@ func (cm *Controller) removeCertificatesMetrics(onlyDefinedHosts bool, certifica
390391
}
391392
}
392393

393-
func (cm *Controller) removeSSLExpireMetrics(onlyDefinedHosts bool, hosts []string, registry prometheus.Gatherer) {
394+
func (cm *Controller) removeSSLExpireMetrics(onlyDefinedCerts bool, certificates []string, registry prometheus.Gatherer) {
394395
mfs, err := registry.Gather()
395396
if err != nil {
396397
klog.ErrorS(err, "Error gathering metrics")
397398
return
398399
}
399400

400-
toRemove := sets.NewString(hosts...)
401+
toRemove := sets.NewString(certificates...)
401402

402403
for _, mf := range mfs {
403404
metricName := mf.GetName()
@@ -414,19 +415,24 @@ func (cm *Controller) removeSSLExpireMetrics(onlyDefinedHosts bool, hosts []stri
414415
// remove labels that are constant
415416
deleteConstants(labels)
416417

418+
identifier, ok := labels["identifier"]
419+
if !ok {
420+
continue
421+
}
422+
417423
host, ok := labels["host"]
418424
if !ok {
419425
continue
420426
}
421427

422-
if onlyDefinedHosts && !toRemove.Has(host) {
428+
if onlyDefinedCerts && !toRemove.Has(identifier) {
423429
continue
424430
}
425431

426-
klog.V(2).InfoS("Removing prometheus metric", "gauge", metricName, "host", host)
432+
klog.V(2).InfoS("Removing prometheus metric", "gauge", metricName, "host", host, "identifier", identifier)
427433
removed := cm.sslExpireTime.Delete(labels)
428434
if !removed {
429-
klog.V(2).InfoS("metric removed", "metric", metricName, "host", host, "labels", labels)
435+
klog.V(2).InfoS("metric removed", "metric", metricName, "host", host, "identifier", identifier, "labels", labels)
430436
}
431437
}
432438
}

internal/ingress/metric/collectors/controller_test.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,15 @@ func TestControllerCounters(t *testing.T) {
8888
Hostname: "demo",
8989
SSLCert: &ingress.SSLCert{
9090
ExpireTime: t1,
91+
Certificate: &x509.Certificate{
92+
PublicKeyAlgorithm: x509.ECDSA,
93+
Issuer: pkix.Name{
94+
CommonName: "certificate issuer",
95+
SerialNumber: "abcd1234",
96+
Organization: []string{"issuer org"},
97+
},
98+
SerialNumber: big.NewInt(100),
99+
},
91100
},
92101
},
93102
{
@@ -102,7 +111,7 @@ func TestControllerCounters(t *testing.T) {
102111
want: `
103112
# HELP nginx_ingress_controller_ssl_expire_time_seconds Number of seconds since 1970 to the SSL Certificate expire.\n An example to check if this certificate will expire in 10 days is: "nginx_ingress_controller_ssl_expire_time_seconds < (time() + (10 * 24 * 3600))"
104113
# TYPE nginx_ingress_controller_ssl_expire_time_seconds gauge
105-
nginx_ingress_controller_ssl_expire_time_seconds{class="nginx",host="demo",namespace="default",secret_name=""} 1.351807721e+09
114+
nginx_ingress_controller_ssl_expire_time_seconds{class="nginx",host="demo",identifier="abcd1234-100",namespace="default",secret_name=""} 1.351807721e+09
106115
`,
107116
metrics: []string{"nginx_ingress_controller_ssl_expire_time_seconds"},
108117
},
@@ -262,7 +271,7 @@ func TestRemoveMetrics(t *testing.T) {
262271
cm.SetSSLExpireTime(servers)
263272
cm.SetSSLInfo(servers)
264273

265-
cm.RemoveMetrics([]string{"demo"}, []string{"abcd1234-100"}, reg)
274+
cm.RemoveMetrics([]string{"abcd1234-100"}, reg)
266275

267276
if err := GatherAndCompare(cm, "", []string{"nginx_ingress_controller_ssl_expire_time_seconds"}, reg); err != nil {
268277
t.Errorf("unexpected collecting result:\n%s", err)

internal/ingress/metric/dummy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func (dc DummyCollector) IncCheckCount(string, string) {}
5454
func (dc DummyCollector) IncCheckErrorCount(string, string) {}
5555

5656
// RemoveMetrics dummy implementation
57-
func (dc DummyCollector) RemoveMetrics(_, _, _ []string) {}
57+
func (dc DummyCollector) RemoveMetrics(_, _ []string) {}
5858

5959
// Start dummy implementation
6060
func (dc DummyCollector) Start(_ string) {}

internal/ingress/metric/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ type Collector interface {
4646
IncOrphanIngress(string, string, string)
4747
DecOrphanIngress(string, string, string)
4848

49-
RemoveMetrics(ingresses, endpoints, certificates []string)
49+
RemoveMetrics(ingresses, certificates []string)
5050

5151
SetSSLExpireTime([]*ingress.Server)
5252
SetSSLInfo(servers []*ingress.Server)
@@ -131,9 +131,9 @@ func (c *collector) IncReloadErrorCount() {
131131
c.ingressController.IncReloadErrorCount()
132132
}
133133

134-
func (c *collector) RemoveMetrics(ingresses, hosts, certificates []string) {
134+
func (c *collector) RemoveMetrics(ingresses, certificates []string) {
135135
c.socket.RemoveMetrics(ingresses, c.registry)
136-
c.ingressController.RemoveMetrics(hosts, certificates, c.registry)
136+
c.ingressController.RemoveMetrics(certificates, c.registry)
137137
}
138138

139139
func (c *collector) Start(admissionStatus string) {

0 commit comments

Comments
 (0)