Skip to content

Commit f3934f3

Browse files
committed
Add contextual logging to controllers
This adds contextual logging only to our controller classes to help differentiate the logging coming from each. For now it is limited to the `controller.go` files since those are the key conflicting filenames in the log output. To switch entirely over to contextual logging as a whole will require more intrusive changes, so this just addresses are major pain point for now. Signed-off-by: Sean McGinnis <[email protected]>
1 parent b106561 commit f3934f3

File tree

3 files changed

+81
-54
lines changed

3 files changed

+81
-54
lines changed

pkg/controller/controller.go

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,14 @@ func New(provider *cluster.Provider) *Controller {
6161
}
6262

6363
func (c *Controller) Run(ctx context.Context) {
64+
logger := klog.FromContext(ctx)
6465
defer c.cleanup()
66+
6567
for {
6668
// get existing kind clusters
6769
clusters, err := c.kind.List()
6870
if err != nil {
69-
klog.Infof("error listing clusters, retrying ...: %v", err)
71+
logger.Error(err, "Error listing clusters, retrying...")
7072
}
7173

7274
// add new ones
@@ -76,36 +78,37 @@ func (c *Controller) Run(ctx context.Context) {
7678
return
7779
default:
7880
}
81+
logger := logger.WithValues("cluster", cluster)
7982

80-
klog.V(3).Infof("processing cluster %s", cluster)
83+
logger.V(3).Info("Processing cluster")
8184
_, ok := c.clusters[cluster]
8285
if ok {
83-
klog.V(3).Infof("cluster %s already exist", cluster)
86+
logger.V(3).Info("Cluster already exist")
8487
continue
8588
}
8689

8790
restConfig, err := c.getRestConfig(ctx, cluster)
8891
if err != nil {
89-
klog.Errorf("Failed to create kubeClient for cluster %s: %v", cluster, err)
92+
logger.Error(err, "Failed to create kubeClient")
9093
continue
9194
}
9295

93-
klog.V(2).Infof("Creating new cloud provider for cluster %s", cluster)
96+
logger.V(2).Info("Creating new cloud provider")
9497
cloud := provider.New(cluster, c.kind)
9598
ccm, err := startCloudControllerManager(ctx, cluster, restConfig, cloud)
9699
if err != nil {
97-
klog.Errorf("Failed to start cloud controller for cluster %s: %v", cluster, err)
100+
logger.Error(err, "Failed to start cloud controller")
98101
continue
99102
}
100-
klog.Infof("Starting cloud controller for cluster %s", cluster)
103+
logger.Info("Starting cloud controller")
101104
c.clusters[cluster] = ccm
102105
}
103106
// remove expired ones
104107
clusterSet := sets.New(clusters...)
105108
for cluster, ccm := range c.clusters {
106109
_, ok := clusterSet[cluster]
107110
if !ok {
108-
klog.Infof("Deleting resources for cluster %s", cluster)
111+
logger.Info("Deleting resources", "cluster", cluster)
109112
ccm.cancelFn()
110113
delete(c.clusters, cluster)
111114
}
@@ -136,32 +139,34 @@ func (c *Controller) getKubeConfig(cluster string, internal bool) (*rest.Config,
136139
// getRestConfig returns a valid rest.Config for the cluster passed as argument
137140
// It tries first to connect to the internal endpoint.
138141
func (c *Controller) getRestConfig(ctx context.Context, cluster string) (*rest.Config, error) {
142+
logger := klog.FromContext(ctx).WithValues("cluster", cluster)
143+
139144
addresses := []string{}
140145
internalConfig, err := c.getKubeConfig(cluster, true)
141146
if err != nil {
142-
klog.Errorf("Failed to get internal kubeconfig for cluster %s: %v", cluster, err)
147+
logger.Error(err, "Failed to get internal kubeconfig")
143148
} else {
144149
addresses = append(addresses, internalConfig.Host)
145150
}
146151
externalConfig, err := c.getKubeConfig(cluster, false)
147152
if err != nil {
148-
klog.Errorf("Failed to get external kubeconfig for cluster %s: %v", cluster, err)
153+
logger.Error(err, "Failed to get external kubeconfig")
149154
} else {
150155
addresses = append(addresses, externalConfig.Host)
151156
}
152157

153158
if len(addresses) == 0 {
154-
return nil, fmt.Errorf("could not find kubeconfig for cluster %s", cluster)
159+
return nil, fmt.Errorf("could not find kubeconfig")
155160
}
156161

157162
var host string
158163
for i := 0; i < 5; i++ {
159164
host, err = firstSuccessfulProbe(ctx, addresses)
160165
if err != nil {
161-
klog.Errorf("Failed to connect to any address in %v: %v", addresses, err)
166+
logger.Error(err, "Failed to connect to any address", "addresses", addresses)
162167
time.Sleep(time.Second * time.Duration(i))
163168
} else {
164-
klog.Infof("Connected succesfully to %s", host)
169+
logger.Info("Connected succesfully", "host", host)
165170
break
166171
}
167172
}
@@ -185,9 +190,11 @@ func (c *Controller) getRestConfig(ctx context.Context, cluster string) (*rest.C
185190
return config, nil
186191
}
187192

188-
// TODO: implement leader election to not have problems with multiple providers
193+
// TODO: implement leader election to not have problems with multiple providers
189194
// ref: https://github.com/kubernetes/kubernetes/blob/d97ea0f705847f90740cac3bc3dd8f6a4026d0b5/cmd/kube-scheduler/app/server.go#L211
190195
func startCloudControllerManager(ctx context.Context, clusterName string, config *rest.Config, cloud cloudprovider.Interface) (*ccm, error) {
196+
logger := klog.FromContext(ctx).WithValues("cluster", clusterName)
197+
191198
// TODO: we need to set up the ccm specific feature gates
192199
// but try to avoid to expose this to users
193200
featureGates := utilfeature.DefaultMutableFeatureGate
@@ -198,7 +205,7 @@ func startCloudControllerManager(ctx context.Context, clusterName string, config
198205

199206
kubeClient, err := kubernetes.NewForConfig(config)
200207
if err != nil {
201-
klog.Errorf("Failed to create kubeClient for cluster %s: %v", clusterName, err)
208+
logger.Error(err, "Failed to create kubeClient")
202209
return nil, err
203210
}
204211

@@ -214,7 +221,7 @@ func startCloudControllerManager(ctx context.Context, clusterName string, config
214221
return true, nil
215222
})
216223
if err != nil {
217-
klog.Errorf("Failed waiting for apiserver to be ready: %v", err)
224+
logger.Error(err, "Failed waiting for apiserver to be ready")
218225
return nil, err
219226
}
220227

@@ -238,7 +245,7 @@ func startCloudControllerManager(ctx context.Context, clusterName string, config
238245
)
239246
if err != nil {
240247
// This error shouldn't fail. It lives like this as a legacy.
241-
klog.Errorf("Failed to start service controller: %v", err)
248+
logger.Error(err, "Failed to start service controller")
242249
return nil, err
243250
}
244251

@@ -249,7 +256,7 @@ func startCloudControllerManager(ctx context.Context, clusterName string, config
249256

250257
hasCloudProviderTaint, err := getCloudProviderTaint(ctx, clusterName, kubeClient)
251258
if err != nil {
252-
klog.Errorf("Failed get cluster nodes: %v", err)
259+
logger.Error(err, "Failed get cluster nodes")
253260
cancel()
254261
return nil, err
255262
}
@@ -265,7 +272,7 @@ func startCloudControllerManager(ctx context.Context, clusterName string, config
265272
)
266273
if err != nil {
267274
// This error shouldn't fail. It lives like this as a legacy.
268-
klog.Errorf("Failed to start node controller: %v", err)
275+
logger.Error(err, "Failed to start node controller")
269276
cancel()
270277
return nil, err
271278
}
@@ -275,22 +282,22 @@ func startCloudControllerManager(ctx context.Context, clusterName string, config
275282
// Gateway setup
276283
crdManager, err := gateway.NewCRDManager(config)
277284
if err != nil {
278-
klog.Errorf("Failed to create Gateway API CRD manager: %v", err)
285+
logger.Error(err, "Failed to create Gateway API CRD manager")
279286
cancel()
280287
return nil, err
281288
}
282289

283290
err = crdManager.InstallCRDs(ctx, cpkconfig.DefaultConfig.GatewayReleaseChannel)
284291
if err != nil {
285-
klog.Errorf("Failed to install Gateway API CRDs: %v", err)
292+
logger.Error(err, "Failed to install Gateway API CRDs")
286293
cancel()
287294
return nil, err
288295
}
289296

290297
gwClient, err := gatewayclient.NewForConfig(config)
291298
if err != nil {
292299
// This error shouldn't fail. It lives like this as a legacy.
293-
klog.Errorf("Failed to create Gateway API client: %v", err)
300+
logger.Error(err, "Failed to create Gateway API client")
294301
cancel()
295302
return nil, err
296303
}
@@ -316,7 +323,7 @@ func startCloudControllerManager(ctx context.Context, clusterName string, config
316323
referenceGrantInformer,
317324
)
318325
if err != nil {
319-
klog.Errorf("Failed to start gateway controller: %v", err)
326+
logger.Error(err, "Failed to start gateway controller")
320327
cancel()
321328
return nil, err
322329
}
@@ -334,7 +341,7 @@ func startCloudControllerManager(ctx context.Context, clusterName string, config
334341
gwInformer,
335342
)
336343
if err != nil {
337-
klog.Errorf("Failed to create Ingress controller: %v", err)
344+
logger.Error(err, "Failed to create Ingress controller")
338345
cancel()
339346
return nil, err
340347
}
@@ -344,7 +351,7 @@ func startCloudControllerManager(ctx context.Context, clusterName string, config
344351

345352
err = gatewayController.Init(ctx)
346353
if err != nil {
347-
klog.Errorf("Failed to initialize gateway controller: %v", err)
354+
logger.Error(err, "Failed to initialize gateway controller")
348355
cancel()
349356
return nil, err
350357
}
@@ -355,7 +362,7 @@ func startCloudControllerManager(ctx context.Context, clusterName string, config
355362

356363
err = ingressController.Init(ctx)
357364
if err != nil {
358-
klog.Errorf("Failed to initialize ingress controller: %v", err)
365+
logger.Error(err, "Failed to initialize ingress controller")
359366
cancel()
360367
return nil, err
361368
}
@@ -372,7 +379,7 @@ func startCloudControllerManager(ctx context.Context, clusterName string, config
372379

373380
containers, err := container.ListByLabel(fmt.Sprintf("%s=%s", constants.NodeCCMLabelKey, clusterName))
374381
if err != nil {
375-
klog.Errorf("can't list containers: %v", err)
382+
logger.Error(err, "Failed to list containers")
376383
return
377384
}
378385

@@ -383,7 +390,7 @@ func startCloudControllerManager(ctx context.Context, clusterName string, config
383390
}
384391

385392
for _, name := range containers {
386-
klog.V(2).Infof("cleaning up container %s for cluster %s", name, clusterName)
393+
logger.V(2).Info("Cleaning up container", "container", name)
387394
cleanupLoadBalancer(lbController, name)
388395
cleanupGateway(name)
389396
}

pkg/gateway/controller.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -398,9 +398,11 @@ func (c *Controller) syncGatewayClass(key string) {
398398
}
399399

400400
func (c *Controller) Run(ctx context.Context) error {
401+
logger := klog.FromContext(ctx).WithName("gateway")
402+
ctx = klog.NewContext(ctx, logger)
401403
defer runtime.HandleCrashWithContext(ctx)
402404

403-
klog.Info("Starting Envoy proxy controller")
405+
logger.Info("Starting Envoy proxy controller")
404406
c.xdscache = cachev3.NewSnapshotCache(false, cachev3.IDHash{}, nil)
405407
c.xdsserver = serverv3.NewServer(ctx, c.xdscache, &xdsCallbacks{})
406408

@@ -445,22 +447,25 @@ func (c *Controller) Run(ctx context.Context) error {
445447
c.xdsLocalAddress = address
446448
c.xdsLocalPort = tcpAddr.Port
447449
go func() {
448-
klog.Infof("XDS management server listening on %s %d\n", c.xdsLocalAddress, c.xdsLocalPort)
450+
logger.Info(
451+
"XDS management server listening",
452+
"address", c.xdsLocalAddress,
453+
"port", c.xdsLocalPort)
449454
if err = grpcServer.Serve(listener); err != nil {
450-
klog.Errorln("gRPC server error:", err)
455+
logger.Error(err, "gRPC server error:")
451456
}
452457
grpcServer.Stop()
453458
}()
454459

455460
defer c.gatewayqueue.ShutDown()
456-
klog.Info("Starting Gateway API controller")
461+
logger.Info("Starting Gateway API controller")
457462

458463
for i := 0; i < workers; i++ {
459464
go wait.UntilWithContext(ctx, c.runGatewayWorker, time.Second)
460465
}
461466

462467
<-ctx.Done()
463-
klog.Info("Stopping Gateway API controller")
468+
logger.Info("Stopping Gateway API controller")
464469
return nil
465470
}
466471

@@ -728,7 +733,8 @@ func (c *Controller) UpdateXDSServer(ctx context.Context, nodeid string, resourc
728733
if err := c.xdscache.SetSnapshot(ctx, nodeid, snapshot); err != nil {
729734
return fmt.Errorf("failed to update resource snapshot in management server: %v", err)
730735
}
731-
klog.V(4).Infof("Updated snapshot cache with resource snapshot...")
736+
logger := klog.FromContext(ctx).WithValues("nodeID", nodeid)
737+
logger.V(4).Info("Updated snapshot cache with resource snapshot...")
732738
return nil
733739
}
734740

0 commit comments

Comments
 (0)