@@ -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+
61346212func TestMain (m * testing.M ) {
61356213 code := m .Run ()
61366214 gce .CleanupKeysOrDie ()
0 commit comments