Skip to content

Commit 13d615a

Browse files
inelpandzichors
andauthored
K8SPSMDB-906: Logging improvements (#1199)
* Standard controller names. * Propper pbmName key. * Remove unnecessary LOG_VERBOSE env var. --------- Co-authored-by: Viacheslav Sarzhan <[email protected]>
1 parent 05a6ddf commit 13d615a

File tree

12 files changed

+75
-109
lines changed

12 files changed

+75
-109
lines changed

cmd/mongodb-healthcheck/main.go

Lines changed: 69 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,17 @@ package main
1717
import (
1818
"context"
1919
"os"
20+
"strconv"
21+
"strings"
22+
23+
uzap "go.uber.org/zap"
24+
"go.uber.org/zap/zapcore"
25+
"sigs.k8s.io/controller-runtime/pkg/log/zap"
2026

2127
"github.com/percona/percona-server-mongodb-operator/healthcheck"
2228
"github.com/percona/percona-server-mongodb-operator/healthcheck/pkg"
2329
"github.com/percona/percona-server-mongodb-operator/healthcheck/tools/db"
2430
"github.com/percona/percona-server-mongodb-operator/healthcheck/tools/tool"
25-
log "github.com/sirupsen/logrus"
2631
)
2732

2833
var (
@@ -31,17 +36,24 @@ var (
3136
)
3237

3338
func main() {
34-
app, _ := tool.New("Performs health and readiness checks for MongoDB", GitCommit, GitBranch)
39+
app := tool.New("Performs health and readiness checks for MongoDB", GitCommit, GitBranch)
3540

3641
k8sCmd := app.Command("k8s", "Performs liveness check for MongoDB on Kubernetes")
3742
livenessCmd := k8sCmd.Command("liveness", "Run a liveness check of MongoDB").Default()
3843
_ = k8sCmd.Command("readiness", "Run a readiness check of MongoDB")
3944
startupDelaySeconds := livenessCmd.Flag("startupDelaySeconds", "").Default("7200").Uint64()
4045
component := k8sCmd.Flag("component", "").Default("mongod").String()
4146

47+
opts := zap.Options{
48+
Encoder: getLogEncoder(),
49+
Level: getLogLevel(),
50+
}
51+
log := zap.New(zap.UseFlagOptions(&opts))
52+
4253
restoreInProgress, err := fileExists("/opt/percona/restore-in-progress")
4354
if err != nil {
44-
log.Fatalf("check if restore in progress: %v", err)
55+
log.Error(err, "check if restore in progress")
56+
os.Exit(1)
4557
}
4658

4759
if restoreInProgress {
@@ -53,65 +65,70 @@ func main() {
5365
pkg.EnvMongoDBClusterMonitorUser,
5466
pkg.EnvMongoDBClusterMonitorPassword,
5567
)
68+
5669
if err != nil {
57-
log.Fatalf("new cfg: %s", err)
70+
log.Error(err, "new cfg")
71+
os.Exit(1)
5872
}
5973

6074
command, err := app.Parse(os.Args[1:])
6175
if err != nil {
62-
log.Fatalf("Cannot parse command line: %s", err)
76+
log.Error(err, "Cannot parse command line")
77+
os.Exit(1)
6378
}
6479

6580
client, err := db.Dial(cnf)
6681
if err != nil {
67-
log.Fatalf("connection error: %v", err)
82+
log.Error(err, "connection error")
83+
os.Exit(1)
6884
}
6985

7086
defer func() {
7187
if err := client.Disconnect(context.TODO()); err != nil {
72-
log.Fatalf("failed to disconnect: %v", err)
88+
log.Error(err, "failed to disconnect")
89+
os.Exit(1)
7390
}
7491
}()
7592

7693
switch command {
7794

7895
case "k8s liveness":
79-
log.Infof("Running Kubernetes liveness check for %s", *component)
96+
log.Info("Running Kubernetes liveness check for", "component", component)
8097
switch *component {
8198

8299
case "mongod":
83100
memberState, err := healthcheck.HealthCheckMongodLiveness(client, int64(*startupDelaySeconds))
84101
if err != nil {
85102
client.Disconnect(context.TODO()) // nolint:golint,errcheck
86-
log.Errorf("Member failed Kubernetes liveness check: %s", err.Error())
103+
log.Error(err, "Member failed Kubernetes liveness check")
87104
os.Exit(1)
88105
}
89-
log.Infof("Member passed Kubernetes liveness check with replication state: %d", *memberState)
106+
log.Info("Member passed Kubernetes liveness check with replication state", "state", memberState)
90107

91108
case "mongos":
92109
err := healthcheck.HealthCheckMongosLiveness(client)
93110
if err != nil {
94111
client.Disconnect(context.TODO()) // nolint:golint,errcheck
95-
log.Errorf("Member failed Kubernetes liveness check: %s", err.Error())
112+
log.Error(err, "Member failed Kubernetes liveness check")
96113
os.Exit(1)
97114
}
98-
log.Infof("Member passed Kubernetes liveness check")
115+
log.Info("Member passed Kubernetes liveness check")
99116
}
100117

101118
case "k8s readiness":
102-
log.Infof("Running Kubernetes readiness check for %s", *component)
119+
log.Info("Running Kubernetes readiness check for component", "component", component)
103120
switch *component {
104121

105122
case "mongod":
106123
client.Disconnect(context.TODO()) // nolint:golint,errcheck
107-
log.Error("readiness check for mongod is not implemented")
124+
log.Error(err, "readiness check for mongod is not implemented")
108125
os.Exit(1)
109126

110127
case "mongos":
111128
err := healthcheck.MongosReadinessCheck(client)
112129
if err != nil {
113130
client.Disconnect(context.TODO()) // nolint:golint,errcheck
114-
log.Errorf("Member failed Kubernetes readiness check: %s", err.Error())
131+
log.Error(err, "Member failed Kubernetes readiness check")
115132
os.Exit(1)
116133
}
117134
}
@@ -128,3 +145,40 @@ func fileExists(name string) (bool, error) {
128145
}
129146
return true, nil
130147
}
148+
149+
func getLogEncoder() zapcore.Encoder {
150+
consoleEnc := zapcore.NewConsoleEncoder(uzap.NewDevelopmentEncoderConfig())
151+
152+
s, found := os.LookupEnv("LOG_STRUCTURED")
153+
if !found {
154+
return consoleEnc
155+
}
156+
157+
useJson, err := strconv.ParseBool(s)
158+
if err != nil {
159+
return consoleEnc
160+
}
161+
if !useJson {
162+
return consoleEnc
163+
}
164+
165+
return zapcore.NewJSONEncoder(uzap.NewProductionEncoderConfig())
166+
}
167+
168+
func getLogLevel() zapcore.LevelEnabler {
169+
l, found := os.LookupEnv("LOG_LEVEL")
170+
if !found {
171+
return zapcore.InfoLevel
172+
}
173+
174+
switch strings.ToUpper(l) {
175+
case "DEBUG":
176+
return zapcore.DebugLevel
177+
case "INFO":
178+
return zapcore.InfoLevel
179+
case "ERROR":
180+
return zapcore.ErrorLevel
181+
default:
182+
return zapcore.InfoLevel
183+
}
184+
}

deploy/bundle.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17168,7 +17168,5 @@ spec:
1716817168
value: percona-server-mongodb-operator
1716917169
- name: RESYNC_PERIOD
1717017170
value: 5s
17171-
- name: LOG_VERBOSE
17172-
value: "false"
1717317171
- name: DISABLE_TELEMETRY
1717417172
value: "false"

deploy/cw-bundle.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17179,7 +17179,5 @@ spec:
1717917179
value: percona-server-mongodb-operator
1718017180
- name: RESYNC_PERIOD
1718117181
value: 5s
17182-
- name: LOG_VERBOSE
17183-
value: "false"
1718417182
- name: DISABLE_TELEMETRY
1718517183
value: "false"

deploy/cw-operator.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,5 @@ spec:
3838
value: percona-server-mongodb-operator
3939
- name: RESYNC_PERIOD
4040
value: 5s
41-
- name: LOG_VERBOSE
42-
value: "false"
4341
- name: DISABLE_TELEMETRY
4442
value: "false"

deploy/operator.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,5 @@ spec:
4040
value: percona-server-mongodb-operator
4141
- name: RESYNC_PERIOD
4242
value: 5s
43-
- name: LOG_VERBOSE
44-
value: "false"
4543
- name: DISABLE_TELEMETRY
4644
value: "false"

healthcheck/pkg/env.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ package pkg
1616

1717
const (
1818
// general
19-
EnvLogVerbose = "LOG_VERBOSE"
2019
EnvServiceName = "SERVICE_NAME"
2120
EnvMongoDBPort = "MONGODB_PORT"
2221
EnvMongoDBIp = "MONGODB_IP"

healthcheck/tools/logger/logger.go

Lines changed: 0 additions & 74 deletions
This file was deleted.

healthcheck/tools/tool/tool.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,18 @@ import (
2222

2323
"github.com/alecthomas/kingpin"
2424
tools "github.com/percona/percona-server-mongodb-operator/healthcheck"
25-
"github.com/percona/percona-server-mongodb-operator/healthcheck/tools/logger"
2625
)
2726

2827
// Author is the author used by kingpin
2928
const Author = "Percona LLC."
3029

3130
// New sets up a new kingpin.Application
32-
func New(help, commit, branch string) (*kingpin.Application, *bool) {
31+
func New(help, commit, branch string) *kingpin.Application {
3332
app := kingpin.New(filepath.Base(os.Args[0]), help)
3433
app.Author(Author)
3534
app.Version(fmt.Sprintf(
3635
"%s version %s\ngit commit %s, branch %s\ngo version %s",
3736
app.Name, tools.Version, commit, branch, runtime.Version(),
3837
))
39-
return app, logger.SetupLogger(
40-
app,
41-
logger.GetLogFormatter(),
42-
os.Stdout,
43-
)
38+
return app
4439
}

pkg/controller/perconaservermongodbbackup/backup.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func (b *Backup) Status(ctx context.Context, cr *api.PerconaServerMongoDBBackup)
114114
}
115115

116116
if meta == nil || meta.Name == "" || errors.Is(err, pbm.ErrNotFound) {
117-
logf.FromContext(ctx).Info("Waiting for backup metadata", "PBM name", cr.Status.PBMname, "backup", cr.Name)
117+
logf.FromContext(ctx).Info("Waiting for backup metadata", "pbmName", cr.Status.PBMname, "backup", cr.Name)
118118
return status, nil
119119
}
120120

pkg/controller/perconaservermongodbbackup/perconaservermongodbbackup_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func newReconciler(mgr manager.Manager) reconcile.Reconciler {
5151
// add adds a new Controller to mgr with r as the reconcile.Reconciler
5252
func add(mgr manager.Manager, r reconcile.Reconciler) error {
5353
// Create a new controller
54-
c, err := controller.New("perconaservermongodbbackup-controller", mgr, controller.Options{Reconciler: r})
54+
c, err := controller.New("psmdbbackup-controller", mgr, controller.Options{Reconciler: r})
5555
if err != nil {
5656
return err
5757
}

0 commit comments

Comments
 (0)