Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/pkg/config/agent_management_remote_config_test.go
4095 views
1
package config
2
3
import (
4
"testing"
5
"time"
6
7
"github.com/grafana/agent/pkg/metrics/instance"
8
"github.com/stretchr/testify/require"
9
)
10
11
func TestBuildRemoteConfig(t *testing.T) {
12
baseConfig := `
13
server:
14
log_level: debug
15
`
16
metricsSnippets := []Snippet{{
17
Config: `
18
metrics_scrape_configs:
19
- job_name: 'prometheus'
20
scrape_interval: 15s
21
static_configs:
22
- targets: ['localhost:9090']
23
`,
24
}}
25
logsSnippets := []Snippet{{
26
Config: `
27
logs_scrape_configs:
28
- job_name: 'loki'
29
static_configs:
30
- targets: ['localhost:3100']
31
`,
32
}}
33
integrationSnippets := []Snippet{{
34
Config: `
35
integration_configs:
36
agent:
37
enabled: true
38
relabel_configs:
39
- action: replace
40
source_labels:
41
- agent_hostname
42
target_label: instance
43
`,
44
}}
45
46
allSnippets := []Snippet{}
47
allSnippets = append(allSnippets, metricsSnippets...)
48
allSnippets = append(allSnippets, logsSnippets...)
49
allSnippets = append(allSnippets, integrationSnippets...)
50
51
t.Run("only metrics snippets provided", func(t *testing.T) {
52
rc := RemoteConfig{
53
BaseConfig: BaseConfigContent(baseConfig),
54
Snippets: metricsSnippets,
55
}
56
c, err := rc.BuildAgentConfig()
57
require.NoError(t, err)
58
require.Equal(t, len(c.Metrics.Configs), 1)
59
require.Empty(t, c.Logs)
60
require.Empty(t, c.Integrations.configV1.Integrations)
61
})
62
63
t.Run("only log snippets provided", func(t *testing.T) {
64
rc := RemoteConfig{
65
BaseConfig: BaseConfigContent(baseConfig),
66
Snippets: logsSnippets,
67
}
68
c, err := rc.BuildAgentConfig()
69
require.NoError(t, err)
70
require.Equal(t, len(c.Logs.Configs), 1)
71
require.Empty(t, c.Metrics.Configs)
72
require.Empty(t, c.Integrations.configV1.Integrations)
73
})
74
75
t.Run("only integration snippets provided", func(t *testing.T) {
76
rc := RemoteConfig{
77
BaseConfig: BaseConfigContent(baseConfig),
78
Snippets: integrationSnippets,
79
}
80
c, err := rc.BuildAgentConfig()
81
require.NoError(t, err)
82
require.Empty(t, c.Metrics.Configs)
83
require.Empty(t, c.Logs)
84
require.Equal(t, 1, len(c.Integrations.configV1.Integrations))
85
})
86
87
t.Run("base with already logs, metrics and integrations provided", func(t *testing.T) {
88
fullConfig := `
89
metrics:
90
configs:
91
- name: default
92
scrape_configs:
93
- job_name: default-prom
94
static_configs:
95
- targets:
96
- localhost:9090
97
logs:
98
positions_directory: /tmp/grafana-agent-positions
99
configs:
100
- name: default
101
scrape_configs:
102
- job_name: default-loki
103
static_configs:
104
- targets:
105
- localhost:3100
106
integrations:
107
node_exporter:
108
enabled: true
109
`
110
rc := RemoteConfig{
111
BaseConfig: BaseConfigContent(fullConfig),
112
Snippets: allSnippets,
113
}
114
c, err := rc.BuildAgentConfig()
115
require.NoError(t, err)
116
require.Equal(t, len(c.Logs.Configs), 2)
117
require.Equal(t, len(c.Metrics.Configs), 2)
118
require.Equal(t, 2, len(c.Integrations.configV1.Integrations))
119
})
120
121
t.Run("all snippets provided", func(t *testing.T) {
122
rc := RemoteConfig{
123
BaseConfig: BaseConfigContent(baseConfig),
124
Snippets: allSnippets,
125
}
126
c, err := rc.BuildAgentConfig()
127
require.NoError(t, err)
128
require.Equal(t, 1, len(c.Logs.Configs))
129
require.Equal(t, 1, len(c.Metrics.Configs))
130
require.Equal(t, 1, len(c.Integrations.configV1.Integrations))
131
132
// check some fields to make sure the config was parsed correctly
133
require.Equal(t, "prometheus", c.Metrics.Configs[0].ScrapeConfigs[0].JobName)
134
require.Equal(t, "loki", c.Logs.Configs[0].ScrapeConfig[0].JobName)
135
require.Equal(t, "agent", c.Integrations.configV1.Integrations[0].Name())
136
137
// make sure defaults for metric snippets are applied
138
require.Equal(t, instance.DefaultConfig.WALTruncateFrequency, c.Metrics.Configs[0].WALTruncateFrequency)
139
require.Equal(t, instance.DefaultConfig.HostFilter, c.Metrics.Configs[0].HostFilter)
140
require.Equal(t, instance.DefaultConfig.MinWALTime, c.Metrics.Configs[0].MinWALTime)
141
require.Equal(t, instance.DefaultConfig.MaxWALTime, c.Metrics.Configs[0].MaxWALTime)
142
require.Equal(t, instance.DefaultConfig.RemoteFlushDeadline, c.Metrics.Configs[0].RemoteFlushDeadline)
143
require.Equal(t, instance.DefaultConfig.WriteStaleOnShutdown, c.Metrics.Configs[0].WriteStaleOnShutdown)
144
require.Equal(t, instance.DefaultGlobalConfig, c.Metrics.Global)
145
146
// make sure defaults for log snippets are applied
147
require.Equal(t, 10*time.Second, c.Logs.Configs[0].PositionsConfig.SyncPeriod)
148
require.Equal(t, "", c.Logs.Configs[0].PositionsConfig.PositionsFile)
149
require.Equal(t, false, c.Logs.Configs[0].PositionsConfig.IgnoreInvalidYaml)
150
require.Equal(t, false, c.Logs.Configs[0].TargetConfig.Stdin)
151
152
// make sure defaults for integration snippets are applied
153
require.Equal(t, true, c.Integrations.configV1.ScrapeIntegrations)
154
require.Equal(t, true, c.Integrations.configV1.UseHostnameLabel)
155
require.Equal(t, true, c.Integrations.configV1.ReplaceInstanceLabel)
156
require.Equal(t, 5*time.Second, c.Integrations.configV1.IntegrationRestartBackoff)
157
})
158
}
159
160