Skip to content

Commit cd95000

Browse files
[bug] Fix monitoring config reloading (#8261) (#8291)
* [bug] Fix monitoring config reloading (cherry picked from commit f021558) Co-authored-by: Khushi Jain <[email protected]>
1 parent dd3f839 commit cd95000

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

internal/pkg/agent/application/monitoring/v1_monitor.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,15 @@ func (b *BeatsMonitor) Reload(rawConfig *config.Config) error {
129129
return nil
130130
}
131131

132-
if err := rawConfig.UnpackTo(&b.config); err != nil {
132+
newConfig := monitoringConfig{
133+
C: monitoringCfg.DefaultConfig(),
134+
}
135+
136+
if err := rawConfig.UnpackTo(&newConfig); err != nil {
133137
return errors.New(err, "failed to unpack monitoring config during reload")
134138
}
139+
140+
b.config = &newConfig
135141
return nil
136142
}
137143

@@ -451,6 +457,7 @@ func (b *BeatsMonitor) injectLogsInput(cfg map[string]interface{}, componentInfo
451457
useOutputKey: monitoringOutput,
452458
"streams": streams,
453459
}
460+
454461
// Make sure we don't set anything until the configuration is stable if the otel manager isn't enabled
455462
if b.config.C.RuntimeManager != monitoringCfg.DefaultRuntimeManager {
456463
input["_runtime_experimental"] = b.config.C.RuntimeManager

internal/pkg/agent/application/monitoring/v1_monitor_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222

2323
"github.com/elastic/elastic-agent-libs/mapstr"
2424
"github.com/elastic/elastic-agent/internal/pkg/agent/application/info"
25+
"github.com/elastic/elastic-agent/internal/pkg/config"
2526
monitoringcfg "github.com/elastic/elastic-agent/internal/pkg/core/monitoring/config"
2627
"github.com/elastic/elastic-agent/pkg/component"
2728
)
@@ -1064,3 +1065,29 @@ type AddFields struct {
10641065
Fields Fields `json:"fields"`
10651066
Target string `json:"target"`
10661067
}
1068+
1069+
// This test ensures if any field under [agent.monitoring] is unset,
1070+
// it falls back to the default value defined in monitoringCfg.DefaultConfig()
1071+
func TestMonitorReload(t *testing.T) {
1072+
// set log and metric monitoring to false
1073+
monitorcfg := monitoringcfg.DefaultConfig()
1074+
monitorcfg.MonitorLogs = false
1075+
monitorcfg.MonitorMetrics = false
1076+
1077+
beatsMonitor := New(true, "", monitorcfg, nil)
1078+
assert.Equal(t, beatsMonitor.config.C.MonitorLogs, false)
1079+
assert.Equal(t, beatsMonitor.config.C.MonitorLogs, false)
1080+
1081+
// unset logs and metrics
1082+
agentConfig := `
1083+
agent.monitoring:
1084+
enabled: true
1085+
`
1086+
conf := config.MustNewConfigFrom(agentConfig)
1087+
// Reload will set unset fields to default
1088+
err := beatsMonitor.Reload(conf)
1089+
require.NoError(t, err)
1090+
1091+
assert.Equal(t, beatsMonitor.config.C.MonitorLogs, true)
1092+
assert.Equal(t, beatsMonitor.config.C.MonitorMetrics, true)
1093+
}

0 commit comments

Comments
 (0)