Skip to content

Commit 6252bf7

Browse files
authored
Make agent log file configurable (#1360)
1 parent 424bb8a commit 6252bf7

File tree

5 files changed

+41
-5
lines changed

5 files changed

+41
-5
lines changed

api/v1/mongodbcommunity_types.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,8 @@ type AgentConfiguration struct {
355355
// +optional
356356
LogLevel LogLevel `json:"logLevel"`
357357
// +optional
358+
LogFile string `json:"logFile"`
359+
// +optional
358360
MaxLogFileDurationHours int `json:"maxLogFileDurationHours"`
359361
// +optional
360362
// LogRotate if enabled, will enable LogRotate for all processes.
@@ -1154,6 +1156,10 @@ func (m MongoDBCommunity) GetAgentLogLevel() LogLevel {
11541156
return m.Spec.AgentConfiguration.LogLevel
11551157
}
11561158

1159+
func (m MongoDBCommunity) GetAgentLogFile() string {
1160+
return m.Spec.AgentConfiguration.LogFile
1161+
}
1162+
11571163
func (m MongoDBCommunity) GetAgentMaxLogFileDurationHours() int {
11581164
return m.Spec.AgentConfiguration.MaxLogFileDurationHours
11591165
}

config/crd/bases/mongodbcommunity.mongodb.com_mongodbcommunity.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ spec:
6969
description: AgentConfiguration sets options for the MongoDB automation
7070
agent
7171
properties:
72+
logFile:
73+
type: string
7274
logLevel:
7375
type: string
7476
logRotate:

controllers/construct/build_statefulset_test.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,14 +176,28 @@ func TestMongod_Container(t *testing.T) {
176176
})
177177
}
178178

179+
func TestMongoDBAgentLogging_Container(t *testing.T) {
180+
c := container.New(mongodbAgentContainer("test-mongodb-automation-config", []corev1.VolumeMount{}, "INFO", "/var/log/mongodb-mms-automation/automation-agent.log", 24))
181+
182+
t.Run("Has correct Env vars", func(t *testing.T) {
183+
assert.Len(t, c.Env, 7)
184+
assert.Equal(t, agentLogFileEnv, c.Env[0].Name)
185+
assert.Equal(t, "/var/log/mongodb-mms-automation/automation-agent.log", c.Env[0].Value)
186+
assert.Equal(t, agentLogLevelEnv, c.Env[1].Name)
187+
assert.Equal(t, "INFO", c.Env[1].Value)
188+
assert.Equal(t, agentMaxLogFileDurationHoursEnv, c.Env[2].Name)
189+
assert.Equal(t, "24", c.Env[2].Value)
190+
})
191+
}
192+
179193
func assertStatefulSetIsBuiltCorrectly(t *testing.T, mdb mdbv1.MongoDBCommunity, sts *appsv1.StatefulSet) {
180194
assert.Len(t, sts.Spec.Template.Spec.Containers, 2)
181195
assert.Len(t, sts.Spec.Template.Spec.InitContainers, 2)
182196
assert.Equal(t, mdb.ServiceName(), sts.Spec.ServiceName)
183197
assert.Equal(t, mdb.Name, sts.Name)
184198
assert.Equal(t, mdb.Namespace, sts.Namespace)
185199
assert.Equal(t, mongodbDatabaseServiceAccountName, sts.Spec.Template.Spec.ServiceAccountName)
186-
assert.Len(t, sts.Spec.Template.Spec.Containers[0].Env, 6)
200+
assert.Len(t, sts.Spec.Template.Spec.Containers[0].Env, 7)
187201
assert.Len(t, sts.Spec.Template.Spec.Containers[1].Env, 1)
188202

189203
managedSecurityContext := envvar.ReadBool(podtemplatespec.ManagedSecurityContextEnv)

controllers/construct/mongodbstatefulset.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ package construct
22

33
import (
44
"fmt"
5-
"github.com/mongodb/mongodb-kubernetes-operator/pkg/util/envvar"
65
"os"
76
"strconv"
87
"strings"
98

9+
"github.com/mongodb/mongodb-kubernetes-operator/pkg/util/envvar"
10+
1011
"github.com/mongodb/mongodb-kubernetes-operator/pkg/automationconfig"
1112
"github.com/mongodb/mongodb-kubernetes-operator/pkg/kube/container"
1213
"github.com/mongodb/mongodb-kubernetes-operator/pkg/kube/persistentvolumeclaim"
@@ -53,13 +54,14 @@ const (
5354
VersionUpgradeHookImageEnv = "VERSION_UPGRADE_HOOK_IMAGE"
5455
ReadinessProbeImageEnv = "READINESS_PROBE_IMAGE"
5556
agentLogLevelEnv = "AGENT_LOG_LEVEL"
57+
agentLogFileEnv = "AGENT_LOG_FILE"
5658
agentMaxLogFileDurationHoursEnv = "AGENT_MAX_LOG_FILE_DURATION_HOURS"
5759

5860
automationMongodConfFileName = "automation-mongod.conf"
5961
keyfileFilePath = "/var/lib/mongodb-mms-automation/authentication/keyfile"
6062

6163
automationAgentOptions = " -skipMongoStart -noDaemonize -useLocalMongoDbTools"
62-
automationAgentLogOptions = " -logFile /var/log/mongodb-mms-automation/automation-agent.log -maxLogFileDurationHrs ${AGENT_MAX_LOG_FILE_DURATION_HOURS} -logLevel ${AGENT_LOG_LEVEL}"
64+
automationAgentLogOptions = " -logFile ${AGENT_LOG_FILE} -maxLogFileDurationHrs ${AGENT_MAX_LOG_FILE_DURATION_HOURS} -logLevel ${AGENT_LOG_LEVEL}"
6365

6466
MongodbUserCommand = `current_uid=$(id -u)
6567
AGENT_API_KEY="$(cat /mongodb-automation/agent-api-key/agentApiKey)"
@@ -98,6 +100,8 @@ type MongoDBStatefulSetOwner interface {
98100
LogsVolumeName() string
99101
// GetAgentLogLevel returns the log level for the MongoDB automation agent.
100102
GetAgentLogLevel() mdbv1.LogLevel
103+
// GetAgentLogFile returns the log file for the MongoDB automation agent.
104+
GetAgentLogFile() string
101105
// GetAgentMaxLogFileDurationHours returns the number of hours after which the log file should be rolled.
102106
GetAgentMaxLogFileDurationHours() int
103107

@@ -177,6 +181,11 @@ func BuildMongoDBReplicaSetStatefulSetModificationFunction(mdb MongoDBStatefulSe
177181
agentLogLevel = string(mdb.GetAgentLogLevel())
178182
}
179183

184+
agentLogFile := automationconfig.DefaultAgentLogFile
185+
if mdb.GetAgentLogFile() != "" {
186+
agentLogFile = mdb.GetAgentLogFile()
187+
}
188+
180189
agentMaxLogFileDurationHours := automationconfig.DefaultAgentMaxLogFileDurationHours
181190
if mdb.GetAgentMaxLogFileDurationHours() != 0 {
182191
agentMaxLogFileDurationHours = mdb.GetAgentMaxLogFileDurationHours()
@@ -204,7 +213,7 @@ func BuildMongoDBReplicaSetStatefulSetModificationFunction(mdb MongoDBStatefulSe
204213
podtemplatespec.WithVolume(tmpVolume),
205214
podtemplatespec.WithVolume(keyFileVolume),
206215
podtemplatespec.WithServiceAccount(mongodbDatabaseServiceAccountName),
207-
podtemplatespec.WithContainer(AgentName, mongodbAgentContainer(mdb.AutomationConfigSecretName(), mongodbAgentVolumeMounts, agentLogLevel, agentMaxLogFileDurationHours)),
216+
podtemplatespec.WithContainer(AgentName, mongodbAgentContainer(mdb.AutomationConfigSecretName(), mongodbAgentVolumeMounts, agentLogLevel, agentLogFile, agentMaxLogFileDurationHours)),
208217
podtemplatespec.WithContainer(MongodbName, mongodbContainer(mdb.GetMongoDBVersion(), mongodVolumeMounts, mdb.GetMongodConfiguration())),
209218
podtemplatespec.WithInitContainer(versionUpgradeHookName, versionUpgradeHookInit([]corev1.VolumeMount{hooksVolumeMount})),
210219
podtemplatespec.WithInitContainer(ReadinessProbeContainerName, readinessProbeInit([]corev1.VolumeMount{scriptsVolumeMount})),
@@ -220,7 +229,7 @@ func AutomationAgentCommand() []string {
220229
return []string{"/bin/bash", "-c", MongodbUserCommand + BaseAgentCommand() + " -cluster=" + clusterFilePath + automationAgentOptions + automationAgentLogOptions}
221230
}
222231

223-
func mongodbAgentContainer(automationConfigSecretName string, volumeMounts []corev1.VolumeMount, logLevel string, maxLogFileDurationHours int) container.Modification {
232+
func mongodbAgentContainer(automationConfigSecretName string, volumeMounts []corev1.VolumeMount, logLevel string, logFile string, maxLogFileDurationHours int) container.Modification {
224233
_, containerSecurityContext := podtemplatespec.WithDefaultSecurityContextsModifications()
225234
return container.Apply(
226235
container.WithName(AgentName),
@@ -257,6 +266,10 @@ func mongodbAgentContainer(automationConfigSecretName string, volumeMounts []cor
257266
Name: agentLogLevelEnv,
258267
Value: logLevel,
259268
},
269+
corev1.EnvVar{
270+
Name: agentLogFileEnv,
271+
Value: logFile,
272+
},
260273
corev1.EnvVar{
261274
Name: agentMaxLogFileDurationHoursEnv,
262275
Value: strconv.Itoa(maxLogFileDurationHours),

pkg/automationconfig/automation_config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const (
1414
DefaultMongoDBDataDir string = "/data"
1515
DefaultDBPort int = 27017
1616
DefaultAgentLogPath string = "/var/log/mongodb-mms-automation"
17+
DefaultAgentLogFile string = "/var/log/mongodb-mms-automation/automation-agent.log"
1718
DefaultAgentMaxLogFileDurationHours int = 24
1819
)
1920

0 commit comments

Comments
 (0)