Skip to content

Commit 9fa76f8

Browse files
Add integration test for metrics port override via env vars
1 parent 277bb56 commit 9fa76f8

1 file changed

Lines changed: 78 additions & 0 deletions

File tree

integration_test/ops_agent_test/main_test.go

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6131,6 +6131,84 @@ func TestUninstallRemovesService(t *testing.T) {
61316131
})
61326132
}
61336133

6134+
func TestMetricsPortOverrideEnv(t *testing.T) {
6135+
t.Parallel()
6136+
RunForEachImageAndFeatureFlag(t, []string{agents.OtlpHttpExporterFeatureFlag}, func(t *testing.T, imageSpec string, feature string) {
6137+
t.Parallel()
6138+
if gce.IsWindows(imageSpec) {
6139+
t.Skip("Skipping on Windows for now as it requires different environment variable setup")
6140+
}
6141+
ctx, logger, vm := setupMainLogAndVM(t, imageSpec)
6142+
6143+
// Setup agent with default config first
6144+
if err := agents.SetupOpsAgentWithFeatureFlag(ctx, logger, vm, "", feature); err != nil {
6145+
t.Fatal(err)
6146+
}
6147+
6148+
// Stop the agent to avoid race conditions while setting up overrides
6149+
if _, err := gce.RunRemotely(ctx, logger, vm, "sudo systemctl stop google-cloud-ops-agent"); err != nil {
6150+
t.Fatal(err)
6151+
}
6152+
6153+
// Set up systemd overrides for Fluent Bit
6154+
fbOverrideDir := "/etc/systemd/system/google-cloud-ops-agent-fluent-bit.service.d"
6155+
fbOverrideFile := fbOverrideDir + "/override.conf"
6156+
if _, err := gce.RunRemotely(ctx, logger, vm, fmt.Sprintf("sudo mkdir -p %s", fbOverrideDir)); err != nil {
6157+
t.Fatal(err)
6158+
}
6159+
fbOverrideContent := `[Service]
6160+
Environment="OPS_AGENT_FLUENT_BIT_METRICS_PORT=40002"
6161+
`
6162+
if _, err := gce.RunRemotely(ctx, logger, vm, fmt.Sprintf("echo '%s' | sudo tee %s", fbOverrideContent, fbOverrideFile)); err != nil {
6163+
t.Fatal(err)
6164+
}
6165+
6166+
// Set up systemd overrides for OTel Collector
6167+
otelOverrideDir := "/etc/systemd/system/google-cloud-ops-agent-opentelemetry-collector.service.d"
6168+
otelOverrideFile := otelOverrideDir + "/override.conf"
6169+
if _, err := gce.RunRemotely(ctx, logger, vm, fmt.Sprintf("sudo mkdir -p %s", otelOverrideDir)); err != nil {
6170+
t.Fatal(err)
6171+
}
6172+
otelOverrideContent := `[Service]
6173+
Environment="OPS_AGENT_OTEL_METRICS_PORT=40001"
6174+
Environment="OPS_AGENT_FLUENT_BIT_METRICS_PORT=40002"
6175+
`
6176+
if _, err := gce.RunRemotely(ctx, logger, vm, fmt.Sprintf("echo '%s' | sudo tee %s", otelOverrideContent, otelOverrideFile)); err != nil {
6177+
t.Fatal(err)
6178+
}
6179+
6180+
// Reload systemd and restart agent
6181+
if _, err := gce.RunRemotely(ctx, logger, vm, "sudo systemctl daemon-reload"); err != nil {
6182+
t.Fatal(err)
6183+
}
6184+
if _, err := gce.RunRemotely(ctx, logger, vm, "sudo systemctl start google-cloud-ops-agent"); err != nil {
6185+
t.Fatal(err)
6186+
}
6187+
6188+
// Wait for agent to start up
6189+
time.Sleep(20 * time.Second)
6190+
6191+
// Verify that we can scrape metrics from the new ports
6192+
// Fluent Bit metrics on 40002
6193+
fbMetricsOut, err := gce.RunRemotely(ctx, logger, vm, "curl -s localhost:40002/metrics")
6194+
if err != nil {
6195+
t.Fatalf("Failed to scrape Fluent Bit metrics on port 40002: %v", err)
6196+
}
6197+
if !strings.Contains(fbMetricsOut.Stdout, "fluentbit_uptime") {
6198+
t.Fatalf("Fluent Bit metrics on port 40002 do not contain expected content. Output: %s", fbMetricsOut.Stdout)
6199+
}
6200+
6201+
// OTel Collector metrics on 40001
6202+
otelMetricsOut, err := gce.RunRemotely(ctx, logger, vm, "curl -s localhost:40001/metrics")
6203+
if err != nil {
6204+
t.Fatalf("Failed to scrape OTel Collector metrics on port 40001: %v", err)
6205+
}
6206+
if !strings.Contains(otelMetricsOut.Stdout, "otelcol_") {
6207+
t.Fatalf("OTel Collector metrics on port 40001 do not contain expected content. Output: %s", otelMetricsOut.Stdout)
6208+
}
6209+
})
6210+
}
6211+
61346212
func TestMain(m *testing.M) {
61356213
code := m.Run()
61366214
gce.CleanupKeysOrDie()

0 commit comments

Comments
 (0)