diff --git a/confgenerator/agentmetrics.go b/confgenerator/agentmetrics.go index 6ea3434372..ec6dce1c68 100644 --- a/confgenerator/agentmetrics.go +++ b/confgenerator/agentmetrics.go @@ -15,6 +15,7 @@ package confgenerator import ( + "context" "fmt" "path/filepath" "time" @@ -56,9 +57,9 @@ var grpcToHTTPStatus = map[string]string{ "DEADLINE_EXCEEDED": "504", } -func (r AgentSelfMetrics) AddSelfMetricsPipelines(receiverPipelines map[string]otel.ReceiverPipeline, pipelines map[string]otel.Pipeline) { +func (r AgentSelfMetrics) AddSelfMetricsPipelines(receiverPipelines map[string]otel.ReceiverPipeline, pipelines map[string]otel.Pipeline, ctx context.Context) { // Receiver pipelines names should have 1 underscore to avoid collision with user configurations. - receiverPipelines["agent_prometheus"] = r.PrometheusMetricsPipeline() + receiverPipelines["agent_prometheus"] = r.PrometheusMetricsPipeline(ctx) // Pipeline names should have no underscores to avoid collision with user configurations. pipelines["otel"] = otel.Pipeline{ @@ -79,15 +80,15 @@ func (r AgentSelfMetrics) AddSelfMetricsPipelines(receiverPipelines map[string]o Processors: r.LoggingMetricsPipelineProcessors(), } - receiverPipelines["ops_agent"] = r.OpsAgentPipeline() + receiverPipelines["ops_agent"] = r.OpsAgentPipeline(ctx) pipelines["opsagent"] = otel.Pipeline{ Type: "metrics", ReceiverPipelineName: "ops_agent", } } -func (r AgentSelfMetrics) PrometheusMetricsPipeline() otel.ReceiverPipeline { - return otel.ReceiverPipeline{ +func (r AgentSelfMetrics) PrometheusMetricsPipeline(ctx context.Context) otel.ReceiverPipeline { + return ConvertGCMSystemExporterToOtlpExporter(otel.ReceiverPipeline{ Receiver: otel.Component{ Type: "prometheus", Config: map[string]interface{}{ @@ -128,7 +129,7 @@ func (r AgentSelfMetrics) PrometheusMetricsPipeline() otel.ReceiverPipeline { ), }, }, - } + }, ctx) } func (r AgentSelfMetrics) OtelPipelineProcessors() []otel.Component { @@ -303,18 +304,18 @@ func (r AgentSelfMetrics) LoggingMetricsPipelineProcessors() []otel.Component { } } -func (r AgentSelfMetrics) OpsAgentPipeline() otel.ReceiverPipeline { - receiver_config := map[string]any{ +func (r AgentSelfMetrics) OpsAgentPipeline(ctx context.Context) otel.ReceiverPipeline { + receiverConfig := map[string]any{ "include": []string{ filepath.Join(r.OtelRuntimeDir, "enabled_receivers_otlp.json"), filepath.Join(r.OtelRuntimeDir, "feature_tracking_otlp.json")}, "replay_file": true, "poll_interval": time.Duration(60 * time.Second).String(), } - return otel.ReceiverPipeline{ + return ConvertGCMSystemExporterToOtlpExporter(otel.ReceiverPipeline{ Receiver: otel.Component{ Type: "otlpjsonfile", - Config: receiver_config, + Config: receiverConfig, }, ExporterTypes: map[string]otel.ExporterType{ "metrics": otel.System, @@ -324,7 +325,7 @@ func (r AgentSelfMetrics) OpsAgentPipeline() otel.ReceiverPipeline { otel.Transform("metric", "datapoint", []ottl.Statement{"set(time, Now())"}), }, }, - } + }, ctx) } // intentionally not registered as a component because this is not created by users diff --git a/confgenerator/confgenerator.go b/confgenerator/confgenerator.go index 850421f00a..372527b0ef 100644 --- a/confgenerator/confgenerator.go +++ b/confgenerator/confgenerator.go @@ -57,32 +57,43 @@ func googleCloudExporter(userAgent string, instrumentationLabels bool, serviceRe } } -func ConvertPrometheusExporterToOtlpExporter(receiver otel.ReceiverPipeline, ctx context.Context) otel.ReceiverPipeline { - return ConvertToOtlpExporter(receiver, ctx, true) +func otelSetOtlpExporterComponents() []otel.Component { + return []otel.Component{otel.MetricStartTime()} } -func ConvertGCMOtelExporterToOtlpExporter(receiver otel.ReceiverPipeline, ctx context.Context) otel.ReceiverPipeline { - return ConvertToOtlpExporter(receiver, ctx, false) +func ConvertPrometheusExporterToOtlpExporter(pipeline otel.ReceiverPipeline, ctx context.Context) otel.ReceiverPipeline { + return ConvertToOtlpExporter(pipeline, ctx, true, false) } -func ConvertToOtlpExporter(receiver otel.ReceiverPipeline, ctx context.Context, isPrometheus bool) otel.ReceiverPipeline { +func ConvertGCMOtelExporterToOtlpExporter(pipeline otel.ReceiverPipeline, ctx context.Context) otel.ReceiverPipeline { + return ConvertToOtlpExporter(pipeline, ctx, false, false) +} + +func ConvertGCMSystemExporterToOtlpExporter(pipeline otel.ReceiverPipeline, ctx context.Context) otel.ReceiverPipeline { + return ConvertToOtlpExporter(pipeline, ctx, false, true) +} + +func ConvertToOtlpExporter(pipeline otel.ReceiverPipeline, ctx context.Context, isPrometheus bool, isSystem bool) otel.ReceiverPipeline { expOtlpExporter := experimentsFromContext(ctx)["otlp_exporter"] resource, _ := platform.FromContext(ctx).GetResource() if !expOtlpExporter { - return receiver + return pipeline } - _, err := receiver.ExporterTypes["metrics"] + _, err := pipeline.ExporterTypes["metrics"] if !err { - return receiver + return pipeline } - receiver.ExporterTypes["metrics"] = otel.OTLP + pipeline.ExporterTypes["metrics"] = otel.OTLP - receiver.Processors["metrics"] = append(receiver.Processors["metrics"], otel.GCPProjectID(resource.ProjectName())) + pipeline.Processors["metrics"] = append(pipeline.Processors["metrics"], otel.GCPProjectID(resource.ProjectName())) + if isSystem { + pipeline.Processors["metrics"] = append(pipeline.Processors["metrics"], otel.MetricsRemoveInstrumentationLibraryLabelsAttributes()) + } if isPrometheus { - receiver.Processors["metrics"] = append(receiver.Processors["metrics"], otel.MetricUnknownCounter()) - receiver.Processors["metrics"] = append(receiver.Processors["metrics"], otel.MetricStartTime()) + pipeline.Processors["metrics"] = append(pipeline.Processors["metrics"], otel.MetricUnknownCounter()) + } - return receiver + return pipeline } func otlpExporter(userAgent string) otel.Component { @@ -127,6 +138,7 @@ func (uc *UnifiedConfig) GenerateOtelConfig(ctx context.Context, outDir string) userAgent, _ := p.UserAgent("Google-Cloud-Ops-Agent-Metrics") metricVersionLabel, _ := p.VersionLabel("google-cloud-ops-agent-metrics") loggingVersionLabel, _ := p.VersionLabel("google-cloud-ops-agent-logging") + expOtlpExporter := experimentsFromContext(ctx)["otlp_exporter"] receiverPipelines, pipelines, err := uc.generateOtelPipelines(ctx) if err != nil { @@ -141,9 +153,8 @@ func (uc *UnifiedConfig) GenerateOtelConfig(ctx context.Context, outDir string) OtelRuntimeDir: outDir, OtelLogging: uc.Logging.Service.OTelLogging, } - agentSelfMetrics.AddSelfMetricsPipelines(receiverPipelines, pipelines) + agentSelfMetrics.AddSelfMetricsPipelines(receiverPipelines, pipelines, ctx) - expOtlpExporter := experimentsFromContext(ctx)["otlp_exporter"] extensions := map[string]interface{}{} if expOtlpExporter { extensions["googleclientauth"] = map[string]interface{}{} diff --git a/confgenerator/otel/modular.go b/confgenerator/otel/modular.go index 212b62b35d..88f4b9cde1 100644 --- a/confgenerator/otel/modular.go +++ b/confgenerator/otel/modular.go @@ -256,6 +256,12 @@ func (c ModularConfig) Generate(ctx context.Context, expOtlpExporter bool) (stri copyProcessor := CopyHostIDToInstanceID() processorNames = append(processorNames, copyProcessor.name("_global_0")) processors[copyProcessor.name("_global_0")] = copyProcessor.Config + // Similar to the resource detector, for any pipeline that is using the + // otlphttp exporter, we add a MetricStartTime processor at the end of it. + // This mimics the current behavior on GCM exporter. + metricStartTime := MetricStartTime() + processorNames = append(processorNames, metricStartTime.name(fmt.Sprintf("%s_0", prefix))) + processors[metricStartTime.name(fmt.Sprintf("%s_0", prefix))] = metricStartTime.Config } } exporterType := receiverPipeline.ExporterTypes[pipeline.Type] diff --git a/confgenerator/otel/processors.go b/confgenerator/otel/processors.go index b6cb6bc4b5..576907b8f1 100644 --- a/confgenerator/otel/processors.go +++ b/confgenerator/otel/processors.go @@ -291,6 +291,13 @@ func MetricsRemoveServiceAttributes() Component { } } +func MetricsRemoveInstrumentationLibraryLabelsAttributes() Component { + return TransformationMetrics( + SetScopeName(""), + SetScopeVersion(""), + ) +} + func CopyHostIDToInstanceID() Component { return Component{ Type: "transform", diff --git a/confgenerator/testdata/goldens/metrics-exporter_prometheus_otlp/golden/linux-gpu/otel.yaml b/confgenerator/testdata/goldens/metrics-exporter_prometheus_otlp/golden/linux-gpu/otel.yaml index 7e69ba25e6..1b3946babc 100644 --- a/confgenerator/testdata/goldens/metrics-exporter_prometheus_otlp/golden/linux-gpu/otel.yaml +++ b/confgenerator/testdata/goldens/metrics-exporter_prometheus_otlp/golden/linux-gpu/otel.yaml @@ -86,7 +86,17 @@ processors: - googlecloudmonitoring/point_count interval/loggingmetrics_7: interval: 1m - metricstarttime/prometheus_3: + metricstarttime/default__pipeline_hostmetrics_0: + strategy: subtract_initial_point + metricstarttime/default__pipeline_hostmetrics_1_0: + strategy: subtract_initial_point + metricstarttime/fluentbit_0: + strategy: subtract_initial_point + metricstarttime/loggingmetrics_0: + strategy: subtract_initial_point + metricstarttime/opsagent_0: + strategy: subtract_initial_point + metricstarttime/otel_0: strategy: subtract_initial_point metricstransform/fluentbit_1: transforms: @@ -587,6 +597,16 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + resource/agent_prometheus_1: + attributes: + - action: insert + key: gcp.project_id + value: test-project + resource/ops_agent_1: + attributes: + - action: insert + key: gcp.project_id + value: test-project resource/prometheus_1: attributes: - action: insert @@ -610,6 +630,12 @@ processors: - delete_key(resource.attributes, "service.instance.id") - delete_key(resource.attributes, "server.port") - delete_key(resource.attributes, "url.scheme") + transform/agent_prometheus_2: + metric_statements: + - context: scope + statements: + - set(name, "") + - set(version, "") transform/loggingmetrics_0: error_mode: ignore metric_statements: @@ -637,6 +663,12 @@ processors: - context: datapoint statements: - set(time, Now()) + transform/ops_agent_2: + metric_statements: + - context: scope + statements: + - set(name, "") + - set(version, "") transform/otel_0: error_mode: ignore metric_statements: @@ -769,6 +801,7 @@ service: - filter/default__pipeline_hostmetrics_0 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/default__pipeline_hostmetrics_0 receivers: - hostmetrics/hostmetrics metrics/default__pipeline_hostmetrics_1: @@ -779,24 +812,30 @@ service: - filter/default__pipeline_hostmetrics_1_0 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/default__pipeline_hostmetrics_1_0 receivers: - nvml/hostmetrics_1 metrics/fluentbit: exporters: - - googlecloud + - otlphttp/otlp processors: - transform/agent_prometheus_0 + - resource/agent_prometheus_1 + - transform/agent_prometheus_2 - filter/fluentbit_0 - metricstransform/fluentbit_1 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/fluentbit_0 receivers: - prometheus/agent_prometheus metrics/loggingmetrics: exporters: - - googlecloud + - otlphttp/otlp processors: - transform/agent_prometheus_0 + - resource/agent_prometheus_1 + - transform/agent_prometheus_2 - transform/loggingmetrics_0 - filter/loggingmetrics_1 - filter/loggingmetrics_2 @@ -808,28 +847,35 @@ service: - metricstransform/loggingmetrics_8 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/loggingmetrics_0 receivers: - prometheus/agent_prometheus metrics/opsagent: exporters: - - googlecloud + - otlphttp/otlp processors: - transform/ops_agent_0 + - resource/ops_agent_1 + - transform/ops_agent_2 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/opsagent_0 receivers: - otlpjsonfile/ops_agent metrics/otel: exporters: - - googlecloud + - otlphttp/otlp processors: - transform/agent_prometheus_0 + - resource/agent_prometheus_1 + - transform/agent_prometheus_2 - transform/otel_0 - filter/otel_1 - filter/otel_2 - metricstransform/otel_3 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/otel_0 receivers: - prometheus/agent_prometheus metrics/prometheus__pipeline_prometheus: @@ -839,7 +885,6 @@ service: - transform/prometheus_0 - resource/prometheus_1 - transform/prometheus_2 - - metricstarttime/prometheus_3 receivers: - prometheus/prometheus telemetry: diff --git a/confgenerator/testdata/goldens/metrics-exporter_prometheus_otlp/golden/linux/otel.yaml b/confgenerator/testdata/goldens/metrics-exporter_prometheus_otlp/golden/linux/otel.yaml index 637aa315b0..92b175ee6e 100644 --- a/confgenerator/testdata/goldens/metrics-exporter_prometheus_otlp/golden/linux/otel.yaml +++ b/confgenerator/testdata/goldens/metrics-exporter_prometheus_otlp/golden/linux/otel.yaml @@ -81,7 +81,15 @@ processors: - googlecloudmonitoring/point_count interval/loggingmetrics_7: interval: 1m - metricstarttime/prometheus_3: + metricstarttime/default__pipeline_hostmetrics_0: + strategy: subtract_initial_point + metricstarttime/fluentbit_0: + strategy: subtract_initial_point + metricstarttime/loggingmetrics_0: + strategy: subtract_initial_point + metricstarttime/opsagent_0: + strategy: subtract_initial_point + metricstarttime/otel_0: strategy: subtract_initial_point metricstransform/fluentbit_1: transforms: @@ -558,6 +566,16 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + resource/agent_prometheus_1: + attributes: + - action: insert + key: gcp.project_id + value: test-project + resource/ops_agent_1: + attributes: + - action: insert + key: gcp.project_id + value: test-project resource/prometheus_1: attributes: - action: insert @@ -581,6 +599,12 @@ processors: - delete_key(resource.attributes, "service.instance.id") - delete_key(resource.attributes, "server.port") - delete_key(resource.attributes, "url.scheme") + transform/agent_prometheus_2: + metric_statements: + - context: scope + statements: + - set(name, "") + - set(version, "") transform/loggingmetrics_0: error_mode: ignore metric_statements: @@ -608,6 +632,12 @@ processors: - context: datapoint statements: - set(time, Now()) + transform/ops_agent_2: + metric_statements: + - context: scope + statements: + - set(name, "") + - set(version, "") transform/otel_0: error_mode: ignore metric_statements: @@ -738,24 +768,30 @@ service: - filter/default__pipeline_hostmetrics_0 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/default__pipeline_hostmetrics_0 receivers: - hostmetrics/hostmetrics metrics/fluentbit: exporters: - - googlecloud + - otlphttp/otlp processors: - transform/agent_prometheus_0 + - resource/agent_prometheus_1 + - transform/agent_prometheus_2 - filter/fluentbit_0 - metricstransform/fluentbit_1 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/fluentbit_0 receivers: - prometheus/agent_prometheus metrics/loggingmetrics: exporters: - - googlecloud + - otlphttp/otlp processors: - transform/agent_prometheus_0 + - resource/agent_prometheus_1 + - transform/agent_prometheus_2 - transform/loggingmetrics_0 - filter/loggingmetrics_1 - filter/loggingmetrics_2 @@ -767,28 +803,35 @@ service: - metricstransform/loggingmetrics_8 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/loggingmetrics_0 receivers: - prometheus/agent_prometheus metrics/opsagent: exporters: - - googlecloud + - otlphttp/otlp processors: - transform/ops_agent_0 + - resource/ops_agent_1 + - transform/ops_agent_2 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/opsagent_0 receivers: - otlpjsonfile/ops_agent metrics/otel: exporters: - - googlecloud + - otlphttp/otlp processors: - transform/agent_prometheus_0 + - resource/agent_prometheus_1 + - transform/agent_prometheus_2 - transform/otel_0 - filter/otel_1 - filter/otel_2 - metricstransform/otel_3 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/otel_0 receivers: - prometheus/agent_prometheus metrics/prometheus__pipeline_prometheus: @@ -798,7 +841,6 @@ service: - transform/prometheus_0 - resource/prometheus_1 - transform/prometheus_2 - - metricstarttime/prometheus_3 receivers: - prometheus/prometheus telemetry: diff --git a/confgenerator/testdata/goldens/metrics-exporter_prometheus_otlp/golden/windows-2012/otel.yaml b/confgenerator/testdata/goldens/metrics-exporter_prometheus_otlp/golden/windows-2012/otel.yaml index f674b1e655..7272b790e2 100644 --- a/confgenerator/testdata/goldens/metrics-exporter_prometheus_otlp/golden/windows-2012/otel.yaml +++ b/confgenerator/testdata/goldens/metrics-exporter_prometheus_otlp/golden/windows-2012/otel.yaml @@ -96,7 +96,19 @@ processors: - googlecloudmonitoring/point_count interval/loggingmetrics_7: interval: 1m - metricstarttime/prometheus_3: + metricstarttime/default__pipeline_hostmetrics_0: + strategy: subtract_initial_point + metricstarttime/default__pipeline_iis_0: + strategy: subtract_initial_point + metricstarttime/default__pipeline_mssql_0: + strategy: subtract_initial_point + metricstarttime/fluentbit_0: + strategy: subtract_initial_point + metricstarttime/loggingmetrics_0: + strategy: subtract_initial_point + metricstarttime/opsagent_0: + strategy: subtract_initial_point + metricstarttime/otel_0: strategy: subtract_initial_point metricstransform/fluentbit_1: transforms: @@ -624,6 +636,11 @@ processors: match_type: regexp new_name: agent.googleapis.com/$${1} normalizesums/iis_2: {} + resource/agent_prometheus_1: + attributes: + - action: insert + key: gcp.project_id + value: test-project resource/iis_4: attributes: - action: insert @@ -634,6 +651,11 @@ processors: - action: insert key: gcp.project_id value: test-project + resource/ops_agent_1: + attributes: + - action: insert + key: gcp.project_id + value: test-project resource/prometheus_1: attributes: - action: insert @@ -657,6 +679,12 @@ processors: - delete_key(resource.attributes, "service.instance.id") - delete_key(resource.attributes, "server.port") - delete_key(resource.attributes, "url.scheme") + transform/agent_prometheus_2: + metric_statements: + - context: scope + statements: + - set(name, "") + - set(version, "") transform/iis_3: metric_statements: - context: scope @@ -696,6 +724,12 @@ processors: - context: datapoint statements: - set(time, Now()) + transform/ops_agent_2: + metric_statements: + - context: scope + statements: + - set(name, "") + - set(version, "") transform/otel_0: error_mode: ignore metric_statements: @@ -861,6 +895,7 @@ service: - filter/default__pipeline_hostmetrics_0 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/default__pipeline_hostmetrics_0 receivers: - hostmetrics/hostmetrics metrics/default__pipeline_iis: @@ -875,6 +910,7 @@ service: - filter/default__pipeline_iis_0 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/default__pipeline_iis_0 receivers: - windowsperfcounters/iis metrics/default__pipeline_mssql: @@ -887,24 +923,30 @@ service: - filter/default__pipeline_mssql_0 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/default__pipeline_mssql_0 receivers: - windowsperfcounters/mssql metrics/fluentbit: exporters: - - googlecloud + - otlphttp/otlp processors: - transform/agent_prometheus_0 + - resource/agent_prometheus_1 + - transform/agent_prometheus_2 - filter/fluentbit_0 - metricstransform/fluentbit_1 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/fluentbit_0 receivers: - prometheus/agent_prometheus metrics/loggingmetrics: exporters: - - googlecloud + - otlphttp/otlp processors: - transform/agent_prometheus_0 + - resource/agent_prometheus_1 + - transform/agent_prometheus_2 - transform/loggingmetrics_0 - filter/loggingmetrics_1 - filter/loggingmetrics_2 @@ -916,28 +958,35 @@ service: - metricstransform/loggingmetrics_8 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/loggingmetrics_0 receivers: - prometheus/agent_prometheus metrics/opsagent: exporters: - - googlecloud + - otlphttp/otlp processors: - transform/ops_agent_0 + - resource/ops_agent_1 + - transform/ops_agent_2 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/opsagent_0 receivers: - otlpjsonfile/ops_agent metrics/otel: exporters: - - googlecloud + - otlphttp/otlp processors: - transform/agent_prometheus_0 + - resource/agent_prometheus_1 + - transform/agent_prometheus_2 - transform/otel_0 - filter/otel_1 - filter/otel_2 - metricstransform/otel_3 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/otel_0 receivers: - prometheus/agent_prometheus metrics/prometheus__pipeline_prometheus: @@ -947,7 +996,6 @@ service: - transform/prometheus_0 - resource/prometheus_1 - transform/prometheus_2 - - metricstarttime/prometheus_3 receivers: - prometheus/prometheus telemetry: diff --git a/confgenerator/testdata/goldens/metrics-exporter_prometheus_otlp/golden/windows/otel.yaml b/confgenerator/testdata/goldens/metrics-exporter_prometheus_otlp/golden/windows/otel.yaml index f674b1e655..7272b790e2 100644 --- a/confgenerator/testdata/goldens/metrics-exporter_prometheus_otlp/golden/windows/otel.yaml +++ b/confgenerator/testdata/goldens/metrics-exporter_prometheus_otlp/golden/windows/otel.yaml @@ -96,7 +96,19 @@ processors: - googlecloudmonitoring/point_count interval/loggingmetrics_7: interval: 1m - metricstarttime/prometheus_3: + metricstarttime/default__pipeline_hostmetrics_0: + strategy: subtract_initial_point + metricstarttime/default__pipeline_iis_0: + strategy: subtract_initial_point + metricstarttime/default__pipeline_mssql_0: + strategy: subtract_initial_point + metricstarttime/fluentbit_0: + strategy: subtract_initial_point + metricstarttime/loggingmetrics_0: + strategy: subtract_initial_point + metricstarttime/opsagent_0: + strategy: subtract_initial_point + metricstarttime/otel_0: strategy: subtract_initial_point metricstransform/fluentbit_1: transforms: @@ -624,6 +636,11 @@ processors: match_type: regexp new_name: agent.googleapis.com/$${1} normalizesums/iis_2: {} + resource/agent_prometheus_1: + attributes: + - action: insert + key: gcp.project_id + value: test-project resource/iis_4: attributes: - action: insert @@ -634,6 +651,11 @@ processors: - action: insert key: gcp.project_id value: test-project + resource/ops_agent_1: + attributes: + - action: insert + key: gcp.project_id + value: test-project resource/prometheus_1: attributes: - action: insert @@ -657,6 +679,12 @@ processors: - delete_key(resource.attributes, "service.instance.id") - delete_key(resource.attributes, "server.port") - delete_key(resource.attributes, "url.scheme") + transform/agent_prometheus_2: + metric_statements: + - context: scope + statements: + - set(name, "") + - set(version, "") transform/iis_3: metric_statements: - context: scope @@ -696,6 +724,12 @@ processors: - context: datapoint statements: - set(time, Now()) + transform/ops_agent_2: + metric_statements: + - context: scope + statements: + - set(name, "") + - set(version, "") transform/otel_0: error_mode: ignore metric_statements: @@ -861,6 +895,7 @@ service: - filter/default__pipeline_hostmetrics_0 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/default__pipeline_hostmetrics_0 receivers: - hostmetrics/hostmetrics metrics/default__pipeline_iis: @@ -875,6 +910,7 @@ service: - filter/default__pipeline_iis_0 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/default__pipeline_iis_0 receivers: - windowsperfcounters/iis metrics/default__pipeline_mssql: @@ -887,24 +923,30 @@ service: - filter/default__pipeline_mssql_0 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/default__pipeline_mssql_0 receivers: - windowsperfcounters/mssql metrics/fluentbit: exporters: - - googlecloud + - otlphttp/otlp processors: - transform/agent_prometheus_0 + - resource/agent_prometheus_1 + - transform/agent_prometheus_2 - filter/fluentbit_0 - metricstransform/fluentbit_1 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/fluentbit_0 receivers: - prometheus/agent_prometheus metrics/loggingmetrics: exporters: - - googlecloud + - otlphttp/otlp processors: - transform/agent_prometheus_0 + - resource/agent_prometheus_1 + - transform/agent_prometheus_2 - transform/loggingmetrics_0 - filter/loggingmetrics_1 - filter/loggingmetrics_2 @@ -916,28 +958,35 @@ service: - metricstransform/loggingmetrics_8 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/loggingmetrics_0 receivers: - prometheus/agent_prometheus metrics/opsagent: exporters: - - googlecloud + - otlphttp/otlp processors: - transform/ops_agent_0 + - resource/ops_agent_1 + - transform/ops_agent_2 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/opsagent_0 receivers: - otlpjsonfile/ops_agent metrics/otel: exporters: - - googlecloud + - otlphttp/otlp processors: - transform/agent_prometheus_0 + - resource/agent_prometheus_1 + - transform/agent_prometheus_2 - transform/otel_0 - filter/otel_1 - filter/otel_2 - metricstransform/otel_3 - resourcedetection/_global_0 - transform/_global_0 + - metricstarttime/otel_0 receivers: - prometheus/agent_prometheus metrics/prometheus__pipeline_prometheus: @@ -947,7 +996,6 @@ service: - transform/prometheus_0 - resource/prometheus_1 - transform/prometheus_2 - - metricstarttime/prometheus_3 receivers: - prometheus/prometheus telemetry: diff --git a/integration_test/ops_agent_test/main_test.go b/integration_test/ops_agent_test/main_test.go index 9c8b8865d8..e75b289cae 100644 --- a/integration_test/ops_agent_test/main_test.go +++ b/integration_test/ops_agent_test/main_test.go @@ -272,10 +272,10 @@ func SetupOpsAgentWithFeatureFlag(ctx context.Context, logger *log.Logger, vm *g return err } case OtlpHttpExporterFeatureFlag: + // Set experimental feature environment variable. if err := setExperimentalFeatures(ctx, logger, vm, feature); err != nil { return err } - } return agents.SetupOpsAgent(ctx, logger, vm, config) } @@ -2748,7 +2748,7 @@ func testDefaultMetrics(ctx context.Context, t *testing.T, logger *log.Logger, v func TestDefaultMetricsNoProxy(t *testing.T) { t.Parallel() - RunForEachImageAndFeatureFlag(t, []string{OtelLoggingFeatureFlag}, func(t *testing.T, imageSpec string, feature string) { + RunForEachImageAndFeatureFlag(t, []string{OtelLoggingFeatureFlag, OtlpHttpExporterFeatureFlag}, func(t *testing.T, imageSpec string, feature string) { t.Parallel() ctx, logger, vm := setupMainLogAndVM(t, imageSpec) if err := SetupOpsAgentWithFeatureFlag(ctx, logger, vm, "", feature); err != nil { @@ -2766,7 +2766,7 @@ func TestDefaultMetricsNoProxy(t *testing.T) { // go/sdi-integ-test#proxy-testing func TestDefaultMetricsWithProxy(t *testing.T) { t.Parallel() - RunForEachImageAndFeatureFlag(t, []string{OtelLoggingFeatureFlag}, func(t *testing.T, imageSpec string, feature string) { + RunForEachImageAndFeatureFlag(t, []string{OtelLoggingFeatureFlag, OtlpHttpExporterFeatureFlag}, func(t *testing.T, imageSpec string, feature string) { t.Parallel() if !gce.IsWindows(imageSpec) { t.Skip("Proxy test is currently only supported on windows.")