-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
operator: Fix structured logs common fields
- Loading branch information
Showing
38 changed files
with
489 additions
and
89 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
package controllers | ||
|
||
import ( | ||
"testing" | ||
|
||
"github.com/stretchr/testify/require" | ||
corev1 "k8s.io/api/core/v1" | ||
|
||
lokiv1 "github.com/grafana/loki/operator/apis/loki/v1" | ||
"github.com/grafana/loki/operator/internal/external/k8s/k8sfakes" | ||
) | ||
|
||
func TestAlertingRuleController_RegistersCustomResource_WithDefaultPredicates(t *testing.T) { | ||
b := &k8sfakes.FakeBuilder{} | ||
k := &k8sfakes.FakeClient{} | ||
c := &AlertingRuleReconciler{Client: k, Log: logger, Scheme: scheme} | ||
|
||
b.ForReturns(b) | ||
b.WatchesReturns(b) | ||
b.WithLogConstructorReturns(b) | ||
|
||
err := c.buildController(b) | ||
require.NoError(t, err) | ||
|
||
require.Equal(t, 1, b.ForCallCount()) | ||
|
||
obj, _ := b.ForArgsForCall(0) | ||
require.Equal(t, &lokiv1.AlertingRule{}, obj) | ||
} | ||
|
||
func TestAlertingRuleController_RegisterWatchesResources(t *testing.T) { | ||
b := &k8sfakes.FakeBuilder{} | ||
k := &k8sfakes.FakeClient{} | ||
c := &AlertingRuleReconciler{Client: k, Log: logger, Scheme: scheme} | ||
|
||
b.ForReturns(b) | ||
b.WatchesReturns(b) | ||
b.WithLogConstructorReturns(b) | ||
|
||
err := c.buildController(b) | ||
require.NoError(t, err) | ||
|
||
require.Equal(t, 1, b.WatchesCallCount()) | ||
|
||
obj, _, _ := b.WatchesArgsForCall(0) | ||
require.Equal(t, &corev1.Namespace{}, obj) | ||
} | ||
|
||
func TestAlertingRuleController_RegisterGenericLogContructor(t *testing.T) { | ||
b := &k8sfakes.FakeBuilder{} | ||
k := &k8sfakes.FakeClient{} | ||
c := &AlertingRuleReconciler{Client: k, Log: logger, Scheme: scheme} | ||
|
||
b.ForReturns(b) | ||
b.WatchesReturns(b) | ||
b.WithLogConstructorReturns(b) | ||
|
||
err := c.buildController(b) | ||
require.NoError(t, err) | ||
|
||
require.Equal(t, 1, b.WithLogConstructorCallCount()) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -39,12 +39,14 @@ type CertRotationReconciler struct { | |
// For more details, check Reconcile and its Result here: | ||
// - https://pkg.go.dev/sigs.k8s.io/[email protected]/pkg/reconcile | ||
func (r *CertRotationReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { | ||
ll := logWithLokiStackRef(r.Log, req, CertRotationCtrlName) | ||
|
||
managed, err := state.IsManaged(ctx, req, r.Client) | ||
if err != nil { | ||
return ctrl.Result{}, err | ||
} | ||
if !managed { | ||
r.Log.Info("Skipping reconciliation for unmanaged LokiStack resource", "name", req.String()) | ||
ll.Info("skipping reconciliation for unmanaged LokiStack resource") | ||
// Stop requeueing for unmanaged LokiStack custom resources | ||
return ctrl.Result{}, nil | ||
} | ||
|
@@ -55,27 +57,26 @@ func (r *CertRotationReconciler) Reconcile(ctx context.Context, req ctrl.Request | |
} | ||
|
||
checkExpiryAfter := expiryRetryAfter(rt.TargetCertRefresh) | ||
r.Log.Info("Checking if LokiStack certificates expired", "name", req.String(), "interval", checkExpiryAfter.String()) | ||
ll.Info("checking if certificates expired", "interval", checkExpiryAfter.String()) | ||
|
||
var expired *certrotation.CertExpiredError | ||
|
||
err = handlers.CheckCertExpiry(ctx, r.Log, req, r.Client, r.FeatureGates) | ||
err = handlers.CheckCertExpiry(ctx, ll, req, r.Client, r.FeatureGates) | ||
switch { | ||
case errors.As(err, &expired): | ||
r.Log.Info("Certificate expired", "msg", expired.Error()) | ||
ll.Info("certificate expired", "msg", expired.Error()) | ||
case err != nil: | ||
return ctrl.Result{}, err | ||
default: | ||
r.Log.Info("Skipping cert rotation, all LokiStack certificates still valid", "name", req.String()) | ||
ll.Info("skipping rotation, all certificates still valid") | ||
return ctrl.Result{ | ||
RequeueAfter: checkExpiryAfter, | ||
}, nil | ||
} | ||
|
||
r.Log.Error(err, "LokiStack certificates expired", "name", req.String()) | ||
ll.Error(err, "certificates expired") | ||
err = lokistack.AnnotateForRequiredCertRotation(ctx, r.Client, req.Name, req.Namespace) | ||
if err != nil { | ||
r.Log.Error(err, "failed to annotate required cert rotation", "name", req.String()) | ||
return ctrl.Result{}, err | ||
} | ||
|
||
|
@@ -94,6 +95,7 @@ func (r *CertRotationReconciler) buildController(bld k8s.Builder) error { | |
return bld. | ||
For(&lokiv1.LokiStack{}). | ||
Owns(&corev1.Secret{}). | ||
WithLogConstructor(lokiStackLogConstructor(r.Log, CertRotationCtrlName)). | ||
Complete(r) | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
package controllers | ||
|
||
import ( | ||
"github.com/go-logr/logr" | ||
"k8s.io/klog/v2" | ||
ctrl "sigs.k8s.io/controller-runtime" | ||
"sigs.k8s.io/controller-runtime/pkg/reconcile" | ||
|
||
lokiv1 "github.com/grafana/loki/operator/apis/loki/v1" | ||
) | ||
|
||
const ( | ||
AlertingRuleCtrlName = "alertingrule" | ||
CertRotationCtrlName = "certrotation" | ||
DashboardsCtrlName = "dashboard" | ||
LokiStackCtrlName = "lokistack" | ||
LokiStackZoneLabelsCtrlName = "lokistack-zone-labels" | ||
RecordingRuleCtrlName = "recordingrule" | ||
RulerConfigCtrlName = "rulerconfig" | ||
) | ||
|
||
type LogContructorType func(request *reconcile.Request) logr.Logger | ||
|
||
func genericLogConstructor(log logr.Logger, name string) LogContructorType { | ||
return func(_ *reconcile.Request) logr.Logger { | ||
log := log | ||
return log.WithValues("controller", name) | ||
} | ||
} | ||
|
||
func lokiStackLogConstructor(log logr.Logger, name string) LogContructorType { | ||
return func(req *reconcile.Request) logr.Logger { | ||
log := log | ||
l := log.WithValues("controller", name) | ||
|
||
if req != nil { | ||
l = l.WithValues( | ||
"controllerGroup", lokiv1.GroupVersion.Group, | ||
"controllerKind", "LokiStack", | ||
"lokistack", klog.KRef(req.Namespace, req.Name), | ||
) | ||
} | ||
|
||
return l | ||
} | ||
} | ||
|
||
func logWithLokiStackRef(log logr.Logger, req ctrl.Request, name string) logr.Logger { | ||
return log.WithValues( | ||
"controller", name, | ||
"lokistack", klog.KRef(req.Namespace, req.Name), | ||
) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
package controllers | ||
|
||
import ( | ||
"testing" | ||
|
||
"github.com/stretchr/testify/require" | ||
|
||
lokiv1 "github.com/grafana/loki/operator/apis/loki/v1" | ||
"github.com/grafana/loki/operator/internal/external/k8s/k8sfakes" | ||
) | ||
|
||
func TestDashboardsController_RegistersCustomResource_WithCreateOrDeletePredicates(t *testing.T) { | ||
b := &k8sfakes.FakeBuilder{} | ||
k := &k8sfakes.FakeClient{} | ||
c := &DashboardsReconciler{Client: k, Log: logger, Scheme: scheme} | ||
|
||
b.ForReturns(b) | ||
b.WithLogConstructorReturns(b) | ||
|
||
err := c.buildController(b) | ||
require.NoError(t, err) | ||
|
||
require.Equal(t, 1, b.ForCallCount()) | ||
|
||
obj, _ := b.ForArgsForCall(0) | ||
require.Equal(t, &lokiv1.LokiStack{}, obj) | ||
} | ||
|
||
func TestDashboardsController_RegisterGenericLogContructor(t *testing.T) { | ||
b := &k8sfakes.FakeBuilder{} | ||
k := &k8sfakes.FakeClient{} | ||
c := &DashboardsReconciler{Client: k, Log: logger, Scheme: scheme} | ||
|
||
b.ForReturns(b) | ||
b.WithLogConstructorReturns(b) | ||
|
||
err := c.buildController(b) | ||
require.NoError(t, err) | ||
|
||
require.Equal(t, 1, b.WithLogConstructorCallCount()) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.