Skip to content

Commit 5b06b2c

Browse files
authored
refactor: replace glog in metrics & telemetry packages (#6587)
1 parent 62642a5 commit 5b06b2c

File tree

6 files changed

+66
-48
lines changed

6 files changed

+66
-48
lines changed

cmd/nginx-ingress/main.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,7 @@ func createManagerAndControllerCollectors(ctx context.Context, constLabels map[s
714714
registry = prometheus.NewRegistry()
715715
mc = collectors.NewLocalManagerMetricsCollector(constLabels)
716716
cc = collectors.NewControllerMetricsCollector(*enableCustomResources, constLabels)
717-
processCollector := collectors.NewNginxProcessesMetricsCollector(constLabels)
717+
processCollector := collectors.NewNginxProcessesMetricsCollector(ctx, constLabels)
718718
workQueueCollector := collectors.NewWorkQueueMetricsCollector(constLabels)
719719

720720
err = mc.Register(registry)
@@ -781,18 +781,18 @@ func createPlusAndLatencyCollectors(
781781
logger := kitlog.NewLogfmtLogger(os.Stdout)
782782
logger = level.NewFilter(logger, level.AllowError())
783783
plusCollector = nginxCollector.NewNginxPlusCollector(plusClient, "nginx_ingress_nginxplus", variableLabelNames, constLabels, logger)
784-
go metrics.RunPrometheusListenerForNginxPlus(*prometheusMetricsListenPort, plusCollector, registry, prometheusSecret)
784+
go metrics.RunPrometheusListenerForNginxPlus(ctx, *prometheusMetricsListenPort, plusCollector, registry, prometheusSecret)
785785
} else {
786786
httpClient := getSocketClient("/var/lib/nginx/nginx-status.sock")
787787
client := metrics.NewNginxMetricsClient(httpClient)
788-
go metrics.RunPrometheusListenerForNginx(*prometheusMetricsListenPort, client, registry, constLabels, prometheusSecret)
788+
go metrics.RunPrometheusListenerForNginx(ctx, *prometheusMetricsListenPort, client, registry, constLabels, prometheusSecret)
789789
}
790790
if *enableLatencyMetrics {
791-
lc = collectors.NewLatencyMetricsCollector(constLabels, upstreamServerVariableLabels, upstreamServerPeerVariableLabelNames)
791+
lc = collectors.NewLatencyMetricsCollector(ctx, constLabels, upstreamServerVariableLabels, upstreamServerPeerVariableLabelNames)
792792
if err := lc.Register(registry); err != nil {
793793
nl.Errorf(l, "Error registering Latency Prometheus metrics: %v", err)
794794
}
795-
syslogListener = metrics.NewLatencyMetricsListener("/var/lib/nginx/nginx-syslog.sock", lc)
795+
syslogListener = metrics.NewLatencyMetricsListener(ctx, "/var/lib/nginx/nginx-syslog.sock", lc)
796796
go syslogListener.Run()
797797
}
798798
}

internal/metrics/collectors/latency.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package collectors
22

33
import (
4+
"context"
45
"encoding/json"
56
"fmt"
7+
"log/slog"
68
"strconv"
79
"strings"
810
"sync"
911

10-
"github.com/golang/glog"
12+
nl "github.com/nginxinc/kubernetes-ingress/internal/logger"
1113
"github.com/prometheus/client_golang/prometheus"
1214
)
1315

@@ -73,10 +75,12 @@ type LatencyMetricsCollector struct {
7375
metricsPublishedMap metricsPublishedMap
7476
metricsPublishedMutex sync.Mutex
7577
variableLabelsMutex sync.RWMutex
78+
logger *slog.Logger
7679
}
7780

7881
// NewLatencyMetricsCollector creates a new LatencyMetricsCollector
7982
func NewLatencyMetricsCollector(
83+
ctx context.Context,
8084
constLabels map[string]string,
8185
upstreamServerLabelNames []string,
8286
upstreamServerPeerLabelNames []string,
@@ -96,6 +100,7 @@ func NewLatencyMetricsCollector(
96100
metricsPublishedMap: make(metricsPublishedMap),
97101
upstreamServerLabelNames: upstreamServerLabelNames,
98102
upstreamServerPeerLabelNames: upstreamServerPeerLabelNames,
103+
logger: nl.LoggerFromContext(ctx),
99104
}
100105
}
101106

@@ -141,7 +146,7 @@ func (l *LatencyMetricsCollector) DeleteMetrics(upstreamServerPeerNames []string
141146
for _, labelValues := range l.listAndDeleteMetricsPublished(name) {
142147
success := l.httpLatency.DeleteLabelValues(labelValues...)
143148
if !success {
144-
glog.Warningf("could not delete metric for upstream server peer: %s with values: %v", name, labelValues)
149+
nl.Warnf(l.logger, "could not delete metric for upstream server peer: %s with values: %v", name, labelValues)
145150
}
146151
}
147152
}
@@ -178,7 +183,7 @@ func (l *LatencyMetricsCollector) Collect(ch chan<- prometheus.Metric) {
178183
func (l *LatencyMetricsCollector) RecordLatency(syslogMsg string) {
179184
lm, err := parseMessage(syslogMsg)
180185
if err != nil {
181-
glog.V(3).Infof("could not parse syslog message: %v", err)
186+
nl.Debugf(l.logger, "could not parse syslog message: %v", err)
182187
return
183188
}
184189

@@ -188,13 +193,13 @@ func (l *LatencyMetricsCollector) RecordLatency(syslogMsg string) {
188193
// https://github.com/nginxinc/kubernetes-ingress/issues/5010
189194
// https://github.com/nginxinc/kubernetes-ingress/issues/6124
190195
if lm.Upstream == "-" {
191-
glog.V(3).Infof("latency metrics for gRPC upstreams: %v", lm)
196+
nl.Debugf(l.logger, "latency metrics for gRPC upstreams: %v", lm)
192197
return
193198
}
194199

195200
labelValues, err := l.createLatencyLabelValues(lm)
196201
if err != nil {
197-
glog.Errorf("cannot record latency for upstream %s and server %s: %v", lm.Upstream, lm.Server, err)
202+
nl.Errorf(l.logger, "cannot record latency for upstream %s and server %s: %v", lm.Upstream, lm.Server, err)
198203
return
199204
}
200205
l.httpLatency.WithLabelValues(labelValues...).Observe(lm.Latency * 1000)

internal/metrics/collectors/processes.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,26 @@ package collectors
22

33
import (
44
"bytes"
5+
"context"
56
"fmt"
7+
"log/slog"
68
"os"
79
"path/filepath"
810
"strconv"
911
"strings"
1012

11-
"github.com/golang/glog"
13+
nl "github.com/nginxinc/kubernetes-ingress/internal/logger"
1214
"github.com/prometheus/client_golang/prometheus"
1315
)
1416

1517
// NginxProcessesMetricsCollector implements prometheus.Collector interface
1618
type NginxProcessesMetricsCollector struct {
1719
workerProcessTotal *prometheus.GaugeVec
20+
logger *slog.Logger
1821
}
1922

2023
// NewNginxProcessesMetricsCollector creates a new NginxProcessMetricsCollector
21-
func NewNginxProcessesMetricsCollector(constLabels map[string]string) *NginxProcessesMetricsCollector {
24+
func NewNginxProcessesMetricsCollector(ctx context.Context, constLabels map[string]string) *NginxProcessesMetricsCollector {
2225
return &NginxProcessesMetricsCollector{
2326
workerProcessTotal: prometheus.NewGaugeVec(
2427
prometheus.GaugeOpts{
@@ -29,14 +32,15 @@ func NewNginxProcessesMetricsCollector(constLabels map[string]string) *NginxProc
2932
},
3033
[]string{"generation"},
3134
),
35+
logger: nl.LoggerFromContext(ctx),
3236
}
3337
}
3438

3539
// updateWorkerProcessCount sets the number of NGINX worker processes
3640
func (pc *NginxProcessesMetricsCollector) updateWorkerProcessCount() {
3741
currWorkerProcesses, prevWorkerProcesses, err := getWorkerProcesses()
3842
if err != nil {
39-
glog.Errorf("unable to collect process metrics : %v", err)
43+
nl.Errorf(pc.logger, "unable to collect process metrics : %v", err)
4044
return
4145
}
4246
pc.workerProcessTotal.WithLabelValues("current").Set(float64(currWorkerProcesses))

internal/metrics/listener.go

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"crypto/tls"
66
"errors"
77
"fmt"
8+
"log/slog"
89
"net/http"
910
"os"
1011
"strconv"
@@ -13,12 +14,13 @@ import (
1314
"github.com/go-chi/chi/v5"
1415
kitlog "github.com/go-kit/log"
1516
"github.com/go-kit/log/level"
16-
"github.com/golang/glog"
1717
prometheusClient "github.com/nginxinc/nginx-prometheus-exporter/client"
1818
nginxCollector "github.com/nginxinc/nginx-prometheus-exporter/collector"
1919
"github.com/prometheus/client_golang/prometheus"
2020
"github.com/prometheus/client_golang/prometheus/promhttp"
2121
v1 "k8s.io/api/core/v1"
22+
23+
nl "github.com/nginxinc/kubernetes-ingress/internal/logger"
2224
)
2325

2426
// NewNginxMetricsClient creates an NginxClient to fetch stats from NGINX over an unix socket
@@ -27,41 +29,43 @@ func NewNginxMetricsClient(httpClient *http.Client) *prometheusClient.NginxClien
2729
}
2830

2931
// RunPrometheusListenerForNginx runs an http server to expose Prometheus metrics for NGINX
30-
func RunPrometheusListenerForNginx(port int, client *prometheusClient.NginxClient, registry *prometheus.Registry, constLabels map[string]string, prometheusSecret *v1.Secret) {
32+
func RunPrometheusListenerForNginx(ctx context.Context, port int, client *prometheusClient.NginxClient, registry *prometheus.Registry, constLabels map[string]string, prometheusSecret *v1.Secret) {
3133
logger := kitlog.NewLogfmtLogger(os.Stdout)
3234
logger = level.NewFilter(logger, level.AllowError())
3335
registry.MustRegister(nginxCollector.NewNginxCollector(client, "nginx_ingress_nginx", constLabels, logger))
34-
runServer(strconv.Itoa(port), registry, prometheusSecret)
36+
runServer(ctx, strconv.Itoa(port), registry, prometheusSecret)
3537
}
3638

3739
// RunPrometheusListenerForNginxPlus runs an http server to expose Prometheus metrics for NGINX Plus
38-
func RunPrometheusListenerForNginxPlus(port int, nginxPlusCollector prometheus.Collector, registry *prometheus.Registry, prometheusSecret *v1.Secret) {
40+
func RunPrometheusListenerForNginxPlus(ctx context.Context, port int, nginxPlusCollector prometheus.Collector, registry *prometheus.Registry, prometheusSecret *v1.Secret) {
3941
registry.MustRegister(nginxPlusCollector)
40-
runServer(strconv.Itoa(port), registry, prometheusSecret)
42+
runServer(ctx, strconv.Itoa(port), registry, prometheusSecret)
4143
}
4244

4345
// runServer starts the metrics server.
44-
func runServer(port string, registry prometheus.Gatherer, prometheusSecret *v1.Secret) {
46+
func runServer(ctx context.Context, port string, registry prometheus.Gatherer, prometheusSecret *v1.Secret) {
4547
addr := fmt.Sprintf(":%s", port)
46-
s, err := NewServer(addr, registry, prometheusSecret)
48+
l := nl.LoggerFromContext(ctx)
49+
s, err := newServer(ctx, addr, registry, prometheusSecret)
4750
if err != nil {
48-
glog.Fatal(err)
51+
nl.Fatal(l, err)
4952
}
50-
glog.Infof("Starting prometheus listener on: %s/metrics", addr)
51-
glog.Fatal(s.ListenAndServe())
53+
nl.Infof(l, "Starting prometheus listener on: %s/metrics", addr)
54+
nl.Fatal(l, s.ListenAndServe())
5255
}
5356

5457
// Server holds information about NIC metrics server.
5558
type Server struct {
5659
Server *http.Server
5760
URL string
5861
Registry prometheus.Gatherer
62+
logger *slog.Logger
5963
}
6064

6165
// NewServer creates HTTP server for serving NIC metrics for Prometheus.
6266
//
6367
// Metrics are exposed on the `/metrics` endpoint.
64-
func NewServer(addr string, registry prometheus.Gatherer, secret *v1.Secret) (*Server, error) {
68+
func newServer(ctx context.Context, addr string, registry prometheus.Gatherer, secret *v1.Secret) (*Server, error) {
6569
s := Server{
6670
Server: &http.Server{
6771
Addr: addr,
@@ -70,6 +74,7 @@ func NewServer(addr string, registry prometheus.Gatherer, secret *v1.Secret) (*S
7074
},
7175
URL: fmt.Sprintf("http://%s/", addr),
7276
Registry: registry,
77+
logger: nl.LoggerFromContext(ctx),
7378
}
7479
// Secrets are read from K8s API. If the secret for Prometheus is present
7580
// we configure Metrics Server with the key and cert.
@@ -99,7 +104,7 @@ func (s *Server) Home(w http.ResponseWriter, r *http.Request) { //nolint:revive
99104
</body>
100105
</html>`))
101106
if err != nil {
102-
glog.Errorf("error while sending a response for the '/' path: %v", err)
107+
nl.Errorf(s.logger, "error while sending a response for the '/' path: %v", err)
103108
http.Error(w, "internal error", http.StatusInternalServerError)
104109
return
105110
}

internal/metrics/syslog_listener.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package metrics
22

33
import (
4+
"context"
45
"errors"
6+
"log/slog"
57
"net"
68

7-
"github.com/golang/glog"
8-
9+
nl "github.com/nginxinc/kubernetes-ingress/internal/logger"
910
"github.com/nginxinc/kubernetes-ingress/internal/metrics/collectors"
1011
)
1112

@@ -21,21 +22,23 @@ type LatencyMetricsListener struct {
2122
conn *net.UnixConn
2223
addr string
2324
collector collectors.LatencyCollector
25+
logger *slog.Logger
2426
}
2527

2628
// NewLatencyMetricsListener returns a LatencyMetricsListener that listens over a unix socket
2729
// for syslog messages from nginx.
28-
func NewLatencyMetricsListener(sockPath string, c collectors.LatencyCollector) SyslogListener {
29-
glog.Infof("Starting latency metrics server listening on: %s", sockPath)
30+
func NewLatencyMetricsListener(ctx context.Context, sockPath string, c collectors.LatencyCollector) SyslogListener {
31+
l := nl.LoggerFromContext(ctx)
32+
nl.Infof(l, "Starting latency metrics server listening on: %s", sockPath)
3033
conn, err := net.ListenUnixgram("unixgram", &net.UnixAddr{
3134
Name: sockPath,
3235
Net: "unixgram",
3336
})
3437
if err != nil {
35-
glog.Errorf("Failed to create latency metrics listener: %v. Latency metrics will not be collected.", err)
38+
nl.Errorf(l, "Failed to create latency metrics listener: %v. Latency metrics will not be collected.", err)
3639
return NewSyslogFakeServer()
3740
}
38-
return &LatencyMetricsListener{conn: conn, addr: sockPath, collector: c}
41+
return &LatencyMetricsListener{conn: conn, addr: sockPath, collector: c, logger: l}
3942
}
4043

4144
// Run reads from the unix connection until an unrecoverable error occurs or the connection is closed.
@@ -45,7 +48,7 @@ func (l LatencyMetricsListener) Run() {
4548
n, err := l.conn.Read(buffer)
4649
if err != nil {
4750
if !isErrorRecoverable(err) {
48-
glog.Info("Stopping latency metrics listener")
51+
nl.Info(l.logger, "Stopping latency metrics listener")
4952
return
5053
}
5154
}
@@ -57,7 +60,7 @@ func (l LatencyMetricsListener) Run() {
5760
func (l LatencyMetricsListener) Stop() {
5861
err := l.conn.Close()
5962
if err != nil {
60-
glog.Errorf("error closing latency metrics unix connection: %v", err)
63+
nl.Errorf(l.logger, "error closing latency metrics unix connection: %v", err)
6164
}
6265
}
6366

0 commit comments

Comments
 (0)