Skip to content

Commit 9244f64

Browse files
authored
[8.18] (backport #8261) [bug] Fix monitoring config reloading (#8290)
* [bug] Fix monitoring config reloading (#8261)
1 parent 003dc4e commit 9244f64

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
@@ -125,9 +125,15 @@ func (b *BeatsMonitor) Reload(rawConfig *config.Config) error {
125125
return nil
126126
}
127127

128-
if err := rawConfig.UnpackTo(&b.config); err != nil {
128+
newConfig := monitoringConfig{
129+
C: monitoringCfg.DefaultConfig(),
130+
}
131+
132+
if err := rawConfig.UnpackTo(&newConfig); err != nil {
129133
return errors.New(err, "failed to unpack monitoring config during reload")
130134
}
135+
136+
b.config = &newConfig
131137
return nil
132138
}
133139

@@ -424,6 +430,7 @@ func (b *BeatsMonitor) injectLogsInput(cfg map[string]interface{}, componentInfo
424430
"streams": streams,
425431
},
426432
}
433+
427434
inputsNode, found := cfg[inputsKey]
428435
if !found {
429436
return fmt.Errorf("no inputs in config")

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

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

2121
"github.com/elastic/elastic-agent-libs/mapstr"
2222
"github.com/elastic/elastic-agent/internal/pkg/agent/application/info"
23+
"github.com/elastic/elastic-agent/internal/pkg/config"
2324
monitoringcfg "github.com/elastic/elastic-agent/internal/pkg/core/monitoring/config"
2425
"github.com/elastic/elastic-agent/pkg/component"
2526
)
@@ -851,3 +852,29 @@ type AddFields struct {
851852
Fields Fields `json:"fields"`
852853
Target string `json:"target"`
853854
}
855+
856+
// This test ensures if any field under [agent.monitoring] is unset,
857+
// it falls back to the default value defined in monitoringCfg.DefaultConfig()
858+
func TestMonitorReload(t *testing.T) {
859+
// set log and metric monitoring to false
860+
monitorcfg := monitoringcfg.DefaultConfig()
861+
monitorcfg.MonitorLogs = false
862+
monitorcfg.MonitorMetrics = false
863+
864+
beatsMonitor := New(true, "", monitorcfg, nil)
865+
assert.Equal(t, beatsMonitor.config.C.MonitorLogs, false)
866+
assert.Equal(t, beatsMonitor.config.C.MonitorLogs, false)
867+
868+
// unset logs and metrics
869+
agentConfig := `
870+
agent.monitoring:
871+
enabled: true
872+
`
873+
conf := config.MustNewConfigFrom(agentConfig)
874+
// Reload will set unset fields to default
875+
err := beatsMonitor.Reload(conf)
876+
require.NoError(t, err)
877+
878+
assert.Equal(t, beatsMonitor.config.C.MonitorLogs, true)
879+
assert.Equal(t, beatsMonitor.config.C.MonitorMetrics, true)
880+
}

0 commit comments

Comments
 (0)