From 6170b489f7a6d8a9efdb7aab3d89afa98fe512af Mon Sep 17 00:00:00 2001 From: Rafael Westphal Date: Wed, 3 Jun 2026 14:18:27 +0000 Subject: [PATCH] feat(confgenerator): use OTLP exporter for prometheus metrics when otlp_exporter experiment is enabled Previously, we overrode the metrics exporter to use GMP for prometheus receiver pipelines even when the otlp_exporter experiment flag was enabled. This change reverts that decision, allowing prometheus receiver pipelines to send metrics via the OTLP exporter (otlp_grpc) when the otlp_exporter experiment is enabled. All confgenerator goldens have been updated to reflect the new exporter configuration. --- confgenerator/confgenerator.go | 16 +- .../golden/linux-gpu/otel.yaml | 25 +- .../golden/linux/otel.yaml | 25 +- .../golden/windows-2012/otel.yaml | 25 +- .../golden/windows/otel.yaml | 25 +- .../golden/linux-gpu/otel.yaml | 25 +- .../golden/linux/otel.yaml | 25 +- .../golden/windows-2012/otel.yaml | 25 +- .../golden/windows/otel.yaml | 25 +- .../golden/linux-gpu/otel.yaml | 25 +- .../golden/linux/otel.yaml | 25 +- .../golden/windows-2012/otel.yaml | 25 +- .../golden/windows/otel.yaml | 25 +- .../golden/linux-gpu/otel.yaml | 25 +- .../golden/linux/otel.yaml | 25 +- .../golden/windows-2012/otel.yaml | 25 +- .../golden/windows/otel.yaml | 25 +- integration_test/ops_agent_test/main_test.go | 215 ++++++++++++++++++ 18 files changed, 544 insertions(+), 87 deletions(-) diff --git a/confgenerator/confgenerator.go b/confgenerator/confgenerator.go index 8d400ab5f7..0545106255 100644 --- a/confgenerator/confgenerator.go +++ b/confgenerator/confgenerator.go @@ -99,14 +99,16 @@ func ConvertToOtlpExporter(pipeline otel.ReceiverPipeline, ctx context.Context, } if _, ok := pipeline.ExporterTypes["metrics"]; ok { + pipeline.ExporterTypes["metrics"] = otel.OTLP_Metrics + if isSystem { + pipeline.Processors["metrics"] = append(pipeline.Processors["metrics"], otel.MetricsRemoveInstrumentationLibraryLabelsAttributes()) + pipeline.Processors["metrics"] = append(pipeline.Processors["metrics"], otel.MetricsRemoveServiceAttributes()) + } if isPrometheus { - pipeline.ExporterTypes["metrics"] = otel.GMP - } else { - pipeline.ExporterTypes["metrics"] = otel.OTLP_Metrics - if isSystem { - pipeline.Processors["metrics"] = append(pipeline.Processors["metrics"], otel.MetricsRemoveInstrumentationLibraryLabelsAttributes()) - pipeline.Processors["metrics"] = append(pipeline.Processors["metrics"], otel.MetricsRemoveServiceAttributes()) - } + pipeline.Processors["metrics"] = append(pipeline.Processors["metrics"], otel.MetricUnknownCounter()) + // If a metric already has a domain, it will not be considered a prometheus metric by the UTR endpoint unless we add the prefix. + // This behavior is the same as the GCM/GMP exporters. + pipeline.Processors["metrics"] = append(pipeline.Processors["metrics"], otel.MetricsTransform(otel.AddPrefix("prometheus.googleapis.com"))) } } diff --git a/confgenerator/testdata/goldens/combined-receiver_otlp_otel_logging_otlpgrpc_exporter/golden/linux-gpu/otel.yaml b/confgenerator/testdata/goldens/combined-receiver_otlp_otel_logging_otlpgrpc_exporter/golden/linux-gpu/otel.yaml index e21f8eac4b..8306fcac5b 100644 --- a/confgenerator/testdata/goldens/combined-receiver_otlp_otel_logging_otlpgrpc_exporter/golden/linux-gpu/otel.yaml +++ b/confgenerator/testdata/goldens/combined-receiver_otlp_otel_logging_otlpgrpc_exporter/golden/linux-gpu/otel.yaml @@ -7,10 +7,6 @@ exporters: service_resource_labels: true skip_create_descriptor: true user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=linux;ShortName=linux_platform;ShortVersion=linux_platform_version) - googlemanagedprometheus: - metric: - add_metric_suffixes: false - user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=linux;ShortName=linux_platform;ShortVersion=linux_platform_version) otlp_grpc/otlp_logs: auth: authenticator: googleclientauth @@ -723,6 +719,12 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + metricstransform/otlp_4: + transforms: + - action: update + include: ^(.*)$$ + match_type: regexp + new_name: prometheus.googleapis.com/$${1} metricstransform/otlpgooglecloudmonitoring_0: transforms: - action: update @@ -927,6 +929,14 @@ processors: - set(attributes["cluster"], "__gce__") where "__gce__" != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" - set(attributes["instance_name"], resource.attributes["host.name"]) where resource.attributes["host.name"] != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" - set(attributes["machine_type"], resource.attributes["host.type"]) where resource.attributes["host.type"] != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" + transform/otlp_3: + error_mode: ignore + metric_statements: + - context: metric + statements: + - copy_metric(Concat([metric.name, "unknowncounter"], ":")) where metric.metadata["prometheus.type"] == "unknown" and not HasSuffix(metric.name, ":unknowncounter") + - convert_gauge_to_sum("cumulative", true) where HasSuffix(metric.name, ":unknowncounter") + - set(metric.name, Substring(metric.name, 0, Len(metric.name)-Len(":unknowncounter"))) where HasSuffix(metric.name, ":unknowncounter") transform/otlp_grpc/otlp_logs_logs_2: error_mode: ignore log_statements: @@ -1235,11 +1245,16 @@ service: - otlp/otlpgooglecloudmonitoring metrics/otlp_otlp: exporters: - - googlemanagedprometheus + - otlp_grpc/otlp_metrics processors: - resourcedetection/otlp_0 - transform/otlp_1 - groupbyattrs/otlp_2 + - transform/otlp_3 + - metricstransform/otlp_4 + - resource/otlp_grpc/otlp_metrics_metrics_0 + - metric_start_time/otlp_grpc/otlp_metrics_metrics_1 + - batch/otlp_grpc/otlp_metrics_metrics_2 receivers: - otlp/otlp traces/traces_otlp_otlp: diff --git a/confgenerator/testdata/goldens/combined-receiver_otlp_otel_logging_otlpgrpc_exporter/golden/linux/otel.yaml b/confgenerator/testdata/goldens/combined-receiver_otlp_otel_logging_otlpgrpc_exporter/golden/linux/otel.yaml index 8132813e4b..65a66e8381 100644 --- a/confgenerator/testdata/goldens/combined-receiver_otlp_otel_logging_otlpgrpc_exporter/golden/linux/otel.yaml +++ b/confgenerator/testdata/goldens/combined-receiver_otlp_otel_logging_otlpgrpc_exporter/golden/linux/otel.yaml @@ -7,10 +7,6 @@ exporters: service_resource_labels: true skip_create_descriptor: true user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=linux;ShortName=linux_platform;ShortVersion=linux_platform_version) - googlemanagedprometheus: - metric: - add_metric_suffixes: false - user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=linux;ShortName=linux_platform;ShortVersion=linux_platform_version) otlp_grpc/otlp_logs: auth: authenticator: googleclientauth @@ -694,6 +690,12 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + metricstransform/otlp_4: + transforms: + - action: update + include: ^(.*)$$ + match_type: regexp + new_name: prometheus.googleapis.com/$${1} metricstransform/otlpgooglecloudmonitoring_0: transforms: - action: update @@ -883,6 +885,14 @@ processors: - set(attributes["cluster"], "__gce__") where "__gce__" != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" - set(attributes["instance_name"], resource.attributes["host.name"]) where resource.attributes["host.name"] != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" - set(attributes["machine_type"], resource.attributes["host.type"]) where resource.attributes["host.type"] != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" + transform/otlp_3: + error_mode: ignore + metric_statements: + - context: metric + statements: + - copy_metric(Concat([metric.name, "unknowncounter"], ":")) where metric.metadata["prometheus.type"] == "unknown" and not HasSuffix(metric.name, ":unknowncounter") + - convert_gauge_to_sum("cumulative", true) where HasSuffix(metric.name, ":unknowncounter") + - set(metric.name, Substring(metric.name, 0, Len(metric.name)-Len(":unknowncounter"))) where HasSuffix(metric.name, ":unknowncounter") transform/otlp_grpc/otlp_logs_logs_2: error_mode: ignore log_statements: @@ -1175,11 +1185,16 @@ service: - otlp/otlpgooglecloudmonitoring metrics/otlp_otlp: exporters: - - googlemanagedprometheus + - otlp_grpc/otlp_metrics processors: - resourcedetection/otlp_0 - transform/otlp_1 - groupbyattrs/otlp_2 + - transform/otlp_3 + - metricstransform/otlp_4 + - resource/otlp_grpc/otlp_metrics_metrics_0 + - metric_start_time/otlp_grpc/otlp_metrics_metrics_1 + - batch/otlp_grpc/otlp_metrics_metrics_2 receivers: - otlp/otlp traces/traces_otlp_otlp: diff --git a/confgenerator/testdata/goldens/combined-receiver_otlp_otel_logging_otlpgrpc_exporter/golden/windows-2012/otel.yaml b/confgenerator/testdata/goldens/combined-receiver_otlp_otel_logging_otlpgrpc_exporter/golden/windows-2012/otel.yaml index 23aaf2abb6..bf9109c610 100644 --- a/confgenerator/testdata/goldens/combined-receiver_otlp_otel_logging_otlpgrpc_exporter/golden/windows-2012/otel.yaml +++ b/confgenerator/testdata/goldens/combined-receiver_otlp_otel_logging_otlpgrpc_exporter/golden/windows-2012/otel.yaml @@ -7,10 +7,6 @@ exporters: service_resource_labels: true skip_create_descriptor: true user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=windows;ShortName=win_platform;ShortVersion=win_platform_version) - googlemanagedprometheus: - metric: - add_metric_suffixes: false - user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=windows;ShortName=win_platform;ShortVersion=win_platform_version) otlp_grpc/otlp_logs: auth: authenticator: googleclientauth @@ -756,6 +752,12 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + metricstransform/otlp_4: + transforms: + - action: update + include: ^(.*)$$ + match_type: regexp + new_name: prometheus.googleapis.com/$${1} metricstransform/otlpgooglecloudmonitoring_0: transforms: - action: update @@ -994,6 +996,14 @@ processors: - set(attributes["cluster"], "__gce__") where "__gce__" != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" - set(attributes["instance_name"], resource.attributes["host.name"]) where resource.attributes["host.name"] != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" - set(attributes["machine_type"], resource.attributes["host.type"]) where resource.attributes["host.type"] != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" + transform/otlp_3: + error_mode: ignore + metric_statements: + - context: metric + statements: + - copy_metric(Concat([metric.name, "unknowncounter"], ":")) where metric.metadata["prometheus.type"] == "unknown" and not HasSuffix(metric.name, ":unknowncounter") + - convert_gauge_to_sum("cumulative", true) where HasSuffix(metric.name, ":unknowncounter") + - set(metric.name, Substring(metric.name, 0, Len(metric.name)-Len(":unknowncounter"))) where HasSuffix(metric.name, ":unknowncounter") transform/otlp_grpc/otlp_logs_logs_2: error_mode: ignore log_statements: @@ -1725,11 +1735,16 @@ service: - otlp/otlpgooglecloudmonitoring metrics/otlp_otlp: exporters: - - googlemanagedprometheus + - otlp_grpc/otlp_metrics processors: - resourcedetection/otlp_0 - transform/otlp_1 - groupbyattrs/otlp_2 + - transform/otlp_3 + - metricstransform/otlp_4 + - resource/otlp_grpc/otlp_metrics_metrics_0 + - metric_start_time/otlp_grpc/otlp_metrics_metrics_1 + - batch/otlp_grpc/otlp_metrics_metrics_2 receivers: - otlp/otlp traces/traces_otlp_otlp: diff --git a/confgenerator/testdata/goldens/combined-receiver_otlp_otel_logging_otlpgrpc_exporter/golden/windows/otel.yaml b/confgenerator/testdata/goldens/combined-receiver_otlp_otel_logging_otlpgrpc_exporter/golden/windows/otel.yaml index 23aaf2abb6..bf9109c610 100644 --- a/confgenerator/testdata/goldens/combined-receiver_otlp_otel_logging_otlpgrpc_exporter/golden/windows/otel.yaml +++ b/confgenerator/testdata/goldens/combined-receiver_otlp_otel_logging_otlpgrpc_exporter/golden/windows/otel.yaml @@ -7,10 +7,6 @@ exporters: service_resource_labels: true skip_create_descriptor: true user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=windows;ShortName=win_platform;ShortVersion=win_platform_version) - googlemanagedprometheus: - metric: - add_metric_suffixes: false - user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=windows;ShortName=win_platform;ShortVersion=win_platform_version) otlp_grpc/otlp_logs: auth: authenticator: googleclientauth @@ -756,6 +752,12 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + metricstransform/otlp_4: + transforms: + - action: update + include: ^(.*)$$ + match_type: regexp + new_name: prometheus.googleapis.com/$${1} metricstransform/otlpgooglecloudmonitoring_0: transforms: - action: update @@ -994,6 +996,14 @@ processors: - set(attributes["cluster"], "__gce__") where "__gce__" != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" - set(attributes["instance_name"], resource.attributes["host.name"]) where resource.attributes["host.name"] != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" - set(attributes["machine_type"], resource.attributes["host.type"]) where resource.attributes["host.type"] != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" + transform/otlp_3: + error_mode: ignore + metric_statements: + - context: metric + statements: + - copy_metric(Concat([metric.name, "unknowncounter"], ":")) where metric.metadata["prometheus.type"] == "unknown" and not HasSuffix(metric.name, ":unknowncounter") + - convert_gauge_to_sum("cumulative", true) where HasSuffix(metric.name, ":unknowncounter") + - set(metric.name, Substring(metric.name, 0, Len(metric.name)-Len(":unknowncounter"))) where HasSuffix(metric.name, ":unknowncounter") transform/otlp_grpc/otlp_logs_logs_2: error_mode: ignore log_statements: @@ -1725,11 +1735,16 @@ service: - otlp/otlpgooglecloudmonitoring metrics/otlp_otlp: exporters: - - googlemanagedprometheus + - otlp_grpc/otlp_metrics processors: - resourcedetection/otlp_0 - transform/otlp_1 - groupbyattrs/otlp_2 + - transform/otlp_3 + - metricstransform/otlp_4 + - resource/otlp_grpc/otlp_metrics_metrics_0 + - metric_start_time/otlp_grpc/otlp_metrics_metrics_1 + - batch/otlp_grpc/otlp_metrics_metrics_2 receivers: - otlp/otlp traces/traces_otlp_otlp: diff --git a/confgenerator/testdata/goldens/combined-receiver_otlp_otlpgrpc_exporter/golden/linux-gpu/otel.yaml b/confgenerator/testdata/goldens/combined-receiver_otlp_otlpgrpc_exporter/golden/linux-gpu/otel.yaml index e16c5be2d5..b482d2f0e9 100644 --- a/confgenerator/testdata/goldens/combined-receiver_otlp_otlpgrpc_exporter/golden/linux-gpu/otel.yaml +++ b/confgenerator/testdata/goldens/combined-receiver_otlp_otlpgrpc_exporter/golden/linux-gpu/otel.yaml @@ -7,10 +7,6 @@ exporters: service_resource_labels: true skip_create_descriptor: true user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=linux;ShortName=linux_platform;ShortVersion=linux_platform_version) - googlemanagedprometheus: - metric: - add_metric_suffixes: false - user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=linux;ShortName=linux_platform;ShortVersion=linux_platform_version) otlp_grpc/otlp_logs: auth: authenticator: googleclientauth @@ -723,6 +719,12 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + metricstransform/otlp_4: + transforms: + - action: update + include: ^(.*)$$ + match_type: regexp + new_name: prometheus.googleapis.com/$${1} metricstransform/otlpgooglecloudmonitoring_0: transforms: - action: update @@ -898,6 +900,14 @@ processors: - set(attributes["cluster"], "__gce__") where "__gce__" != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" - set(attributes["instance_name"], resource.attributes["host.name"]) where resource.attributes["host.name"] != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" - set(attributes["machine_type"], resource.attributes["host.type"]) where resource.attributes["host.type"] != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" + transform/otlp_3: + error_mode: ignore + metric_statements: + - context: metric + statements: + - copy_metric(Concat([metric.name, "unknowncounter"], ":")) where metric.metadata["prometheus.type"] == "unknown" and not HasSuffix(metric.name, ":unknowncounter") + - convert_gauge_to_sum("cumulative", true) where HasSuffix(metric.name, ":unknowncounter") + - set(metric.name, Substring(metric.name, 0, Len(metric.name)-Len(":unknowncounter"))) where HasSuffix(metric.name, ":unknowncounter") transform/otlp_grpc/otlp_logs_logs_2: error_mode: ignore log_statements: @@ -1120,11 +1130,16 @@ service: - otlp/otlpgooglecloudmonitoring metrics/otlp_otlp: exporters: - - googlemanagedprometheus + - otlp_grpc/otlp_metrics processors: - resourcedetection/otlp_0 - transform/otlp_1 - groupbyattrs/otlp_2 + - transform/otlp_3 + - metricstransform/otlp_4 + - resource/otlp_grpc/otlp_metrics_metrics_0 + - metric_start_time/otlp_grpc/otlp_metrics_metrics_1 + - batch/otlp_grpc/otlp_metrics_metrics_2 receivers: - otlp/otlp traces/traces_otlp_otlp: diff --git a/confgenerator/testdata/goldens/combined-receiver_otlp_otlpgrpc_exporter/golden/linux/otel.yaml b/confgenerator/testdata/goldens/combined-receiver_otlp_otlpgrpc_exporter/golden/linux/otel.yaml index 84746da889..d4395d9391 100644 --- a/confgenerator/testdata/goldens/combined-receiver_otlp_otlpgrpc_exporter/golden/linux/otel.yaml +++ b/confgenerator/testdata/goldens/combined-receiver_otlp_otlpgrpc_exporter/golden/linux/otel.yaml @@ -7,10 +7,6 @@ exporters: service_resource_labels: true skip_create_descriptor: true user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=linux;ShortName=linux_platform;ShortVersion=linux_platform_version) - googlemanagedprometheus: - metric: - add_metric_suffixes: false - user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=linux;ShortName=linux_platform;ShortVersion=linux_platform_version) otlp_grpc/otlp_logs: auth: authenticator: googleclientauth @@ -694,6 +690,12 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + metricstransform/otlp_4: + transforms: + - action: update + include: ^(.*)$$ + match_type: regexp + new_name: prometheus.googleapis.com/$${1} metricstransform/otlpgooglecloudmonitoring_0: transforms: - action: update @@ -854,6 +856,14 @@ processors: - set(attributes["cluster"], "__gce__") where "__gce__" != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" - set(attributes["instance_name"], resource.attributes["host.name"]) where resource.attributes["host.name"] != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" - set(attributes["machine_type"], resource.attributes["host.type"]) where resource.attributes["host.type"] != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" + transform/otlp_3: + error_mode: ignore + metric_statements: + - context: metric + statements: + - copy_metric(Concat([metric.name, "unknowncounter"], ":")) where metric.metadata["prometheus.type"] == "unknown" and not HasSuffix(metric.name, ":unknowncounter") + - convert_gauge_to_sum("cumulative", true) where HasSuffix(metric.name, ":unknowncounter") + - set(metric.name, Substring(metric.name, 0, Len(metric.name)-Len(":unknowncounter"))) where HasSuffix(metric.name, ":unknowncounter") transform/otlp_grpc/otlp_logs_logs_2: error_mode: ignore log_statements: @@ -1060,11 +1070,16 @@ service: - otlp/otlpgooglecloudmonitoring metrics/otlp_otlp: exporters: - - googlemanagedprometheus + - otlp_grpc/otlp_metrics processors: - resourcedetection/otlp_0 - transform/otlp_1 - groupbyattrs/otlp_2 + - transform/otlp_3 + - metricstransform/otlp_4 + - resource/otlp_grpc/otlp_metrics_metrics_0 + - metric_start_time/otlp_grpc/otlp_metrics_metrics_1 + - batch/otlp_grpc/otlp_metrics_metrics_2 receivers: - otlp/otlp traces/traces_otlp_otlp: diff --git a/confgenerator/testdata/goldens/combined-receiver_otlp_otlpgrpc_exporter/golden/windows-2012/otel.yaml b/confgenerator/testdata/goldens/combined-receiver_otlp_otlpgrpc_exporter/golden/windows-2012/otel.yaml index 08d1390df6..ff3b4ada46 100644 --- a/confgenerator/testdata/goldens/combined-receiver_otlp_otlpgrpc_exporter/golden/windows-2012/otel.yaml +++ b/confgenerator/testdata/goldens/combined-receiver_otlp_otlpgrpc_exporter/golden/windows-2012/otel.yaml @@ -7,10 +7,6 @@ exporters: service_resource_labels: true skip_create_descriptor: true user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=windows;ShortName=win_platform;ShortVersion=win_platform_version) - googlemanagedprometheus: - metric: - add_metric_suffixes: false - user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=windows;ShortName=win_platform;ShortVersion=win_platform_version) otlp_grpc/otlp_logs: auth: authenticator: googleclientauth @@ -756,6 +752,12 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + metricstransform/otlp_4: + transforms: + - action: update + include: ^(.*)$$ + match_type: regexp + new_name: prometheus.googleapis.com/$${1} metricstransform/otlpgooglecloudmonitoring_0: transforms: - action: update @@ -965,6 +967,14 @@ processors: - set(attributes["cluster"], "__gce__") where "__gce__" != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" - set(attributes["instance_name"], resource.attributes["host.name"]) where resource.attributes["host.name"] != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" - set(attributes["machine_type"], resource.attributes["host.type"]) where resource.attributes["host.type"] != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" + transform/otlp_3: + error_mode: ignore + metric_statements: + - context: metric + statements: + - copy_metric(Concat([metric.name, "unknowncounter"], ":")) where metric.metadata["prometheus.type"] == "unknown" and not HasSuffix(metric.name, ":unknowncounter") + - convert_gauge_to_sum("cumulative", true) where HasSuffix(metric.name, ":unknowncounter") + - set(metric.name, Substring(metric.name, 0, Len(metric.name)-Len(":unknowncounter"))) where HasSuffix(metric.name, ":unknowncounter") transform/otlp_grpc/otlp_logs_logs_2: error_mode: ignore log_statements: @@ -1610,11 +1620,16 @@ service: - otlp/otlpgooglecloudmonitoring metrics/otlp_otlp: exporters: - - googlemanagedprometheus + - otlp_grpc/otlp_metrics processors: - resourcedetection/otlp_0 - transform/otlp_1 - groupbyattrs/otlp_2 + - transform/otlp_3 + - metricstransform/otlp_4 + - resource/otlp_grpc/otlp_metrics_metrics_0 + - metric_start_time/otlp_grpc/otlp_metrics_metrics_1 + - batch/otlp_grpc/otlp_metrics_metrics_2 receivers: - otlp/otlp traces/traces_otlp_otlp: diff --git a/confgenerator/testdata/goldens/combined-receiver_otlp_otlpgrpc_exporter/golden/windows/otel.yaml b/confgenerator/testdata/goldens/combined-receiver_otlp_otlpgrpc_exporter/golden/windows/otel.yaml index 08d1390df6..ff3b4ada46 100644 --- a/confgenerator/testdata/goldens/combined-receiver_otlp_otlpgrpc_exporter/golden/windows/otel.yaml +++ b/confgenerator/testdata/goldens/combined-receiver_otlp_otlpgrpc_exporter/golden/windows/otel.yaml @@ -7,10 +7,6 @@ exporters: service_resource_labels: true skip_create_descriptor: true user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=windows;ShortName=win_platform;ShortVersion=win_platform_version) - googlemanagedprometheus: - metric: - add_metric_suffixes: false - user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=windows;ShortName=win_platform;ShortVersion=win_platform_version) otlp_grpc/otlp_logs: auth: authenticator: googleclientauth @@ -756,6 +752,12 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + metricstransform/otlp_4: + transforms: + - action: update + include: ^(.*)$$ + match_type: regexp + new_name: prometheus.googleapis.com/$${1} metricstransform/otlpgooglecloudmonitoring_0: transforms: - action: update @@ -965,6 +967,14 @@ processors: - set(attributes["cluster"], "__gce__") where "__gce__" != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" - set(attributes["instance_name"], resource.attributes["host.name"]) where resource.attributes["host.name"] != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" - set(attributes["machine_type"], resource.attributes["host.type"]) where resource.attributes["host.type"] != nil and resource.attributes["cloud.platform"] == "gcp_compute_engine" + transform/otlp_3: + error_mode: ignore + metric_statements: + - context: metric + statements: + - copy_metric(Concat([metric.name, "unknowncounter"], ":")) where metric.metadata["prometheus.type"] == "unknown" and not HasSuffix(metric.name, ":unknowncounter") + - convert_gauge_to_sum("cumulative", true) where HasSuffix(metric.name, ":unknowncounter") + - set(metric.name, Substring(metric.name, 0, Len(metric.name)-Len(":unknowncounter"))) where HasSuffix(metric.name, ":unknowncounter") transform/otlp_grpc/otlp_logs_logs_2: error_mode: ignore log_statements: @@ -1610,11 +1620,16 @@ service: - otlp/otlpgooglecloudmonitoring metrics/otlp_otlp: exporters: - - googlemanagedprometheus + - otlp_grpc/otlp_metrics processors: - resourcedetection/otlp_0 - transform/otlp_1 - groupbyattrs/otlp_2 + - transform/otlp_3 + - metricstransform/otlp_4 + - resource/otlp_grpc/otlp_metrics_metrics_0 + - metric_start_time/otlp_grpc/otlp_metrics_metrics_1 + - batch/otlp_grpc/otlp_metrics_metrics_2 receivers: - otlp/otlp traces/traces_otlp_otlp: 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 5cf8c9dd1a..37a8ac98be 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 @@ -1,8 +1,4 @@ exporters: - googlemanagedprometheus: - metric: - add_metric_suffixes: false - user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=linux;ShortName=linux_platform;ShortVersion=linux_platform_version) otlp_grpc/otlp_logs: auth: authenticator: googleclientauth @@ -710,6 +706,12 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + metricstransform/prometheus_2: + transforms: + - action: update + include: ^(.*)$$ + match_type: regexp + new_name: prometheus.googleapis.com/$${1} resource/otlp_grpc/otlp_logs_logs_0: attributes: - action: insert @@ -845,6 +847,14 @@ processors: - delete_key(attributes, "location") - delete_key(attributes, "cluster") - delete_key(attributes, "namespace") + transform/prometheus_1: + error_mode: ignore + metric_statements: + - context: metric + statements: + - copy_metric(Concat([metric.name, "unknowncounter"], ":")) where metric.metadata["prometheus.type"] == "unknown" and not HasSuffix(metric.name, ":unknowncounter") + - convert_gauge_to_sum("cumulative", true) where HasSuffix(metric.name, ":unknowncounter") + - set(metric.name, Substring(metric.name, 0, Len(metric.name)-Len(":unknowncounter"))) where HasSuffix(metric.name, ":unknowncounter") transform/syslog_0: error_mode: ignore log_statements: @@ -1088,9 +1098,14 @@ service: - prometheus/agent_prometheus metrics/prometheus__pipeline_prometheus: exporters: - - googlemanagedprometheus + - otlp_grpc/otlp_metrics processors: - transform/prometheus_0 + - transform/prometheus_1 + - metricstransform/prometheus_2 + - resource/otlp_grpc/otlp_metrics_metrics_0 + - metric_start_time/otlp_grpc/otlp_metrics_metrics_1 + - batch/otlp_grpc/otlp_metrics_metrics_2 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 468a69b1ee..6282f4bce1 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 @@ -1,8 +1,4 @@ exporters: - googlemanagedprometheus: - metric: - add_metric_suffixes: false - user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=linux;ShortName=linux_platform;ShortVersion=linux_platform_version) otlp_grpc/otlp_logs: auth: authenticator: googleclientauth @@ -681,6 +677,12 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + metricstransform/prometheus_2: + transforms: + - action: update + include: ^(.*)$$ + match_type: regexp + new_name: prometheus.googleapis.com/$${1} resource/otlp_grpc/otlp_logs_logs_0: attributes: - action: insert @@ -801,6 +803,14 @@ processors: - delete_key(attributes, "location") - delete_key(attributes, "cluster") - delete_key(attributes, "namespace") + transform/prometheus_1: + error_mode: ignore + metric_statements: + - context: metric + statements: + - copy_metric(Concat([metric.name, "unknowncounter"], ":")) where metric.metadata["prometheus.type"] == "unknown" and not HasSuffix(metric.name, ":unknowncounter") + - convert_gauge_to_sum("cumulative", true) where HasSuffix(metric.name, ":unknowncounter") + - set(metric.name, Substring(metric.name, 0, Len(metric.name)-Len(":unknowncounter"))) where HasSuffix(metric.name, ":unknowncounter") transform/syslog_0: error_mode: ignore log_statements: @@ -1028,9 +1038,14 @@ service: - prometheus/agent_prometheus metrics/prometheus__pipeline_prometheus: exporters: - - googlemanagedprometheus + - otlp_grpc/otlp_metrics processors: - transform/prometheus_0 + - transform/prometheus_1 + - metricstransform/prometheus_2 + - resource/otlp_grpc/otlp_metrics_metrics_0 + - metric_start_time/otlp_grpc/otlp_metrics_metrics_1 + - batch/otlp_grpc/otlp_metrics_metrics_2 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 4154badac8..e4affa0e58 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 @@ -1,8 +1,4 @@ exporters: - googlemanagedprometheus: - metric: - add_metric_suffixes: false - user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=windows;ShortName=win_platform;ShortVersion=win_platform_version) otlp_grpc/otlp_logs: auth: authenticator: googleclientauth @@ -743,6 +739,12 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + metricstransform/prometheus_2: + transforms: + - action: update + include: ^(.*)$$ + match_type: regexp + new_name: prometheus.googleapis.com/$${1} resource/otlp_grpc/otlp_logs_logs_0: attributes: - action: insert @@ -912,6 +914,14 @@ processors: - delete_key(attributes, "location") - delete_key(attributes, "cluster") - delete_key(attributes, "namespace") + transform/prometheus_1: + error_mode: ignore + metric_statements: + - context: metric + statements: + - copy_metric(Concat([metric.name, "unknowncounter"], ":")) where metric.metadata["prometheus.type"] == "unknown" and not HasSuffix(metric.name, ":unknowncounter") + - convert_gauge_to_sum("cumulative", true) where HasSuffix(metric.name, ":unknowncounter") + - set(metric.name, Substring(metric.name, 0, Len(metric.name)-Len(":unknowncounter"))) where HasSuffix(metric.name, ":unknowncounter") transform/windows__event__log_0: error_mode: ignore log_statements: @@ -1578,9 +1588,14 @@ service: - prometheus/agent_prometheus metrics/prometheus__pipeline_prometheus: exporters: - - googlemanagedprometheus + - otlp_grpc/otlp_metrics processors: - transform/prometheus_0 + - transform/prometheus_1 + - metricstransform/prometheus_2 + - resource/otlp_grpc/otlp_metrics_metrics_0 + - metric_start_time/otlp_grpc/otlp_metrics_metrics_1 + - batch/otlp_grpc/otlp_metrics_metrics_2 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 4154badac8..e4affa0e58 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 @@ -1,8 +1,4 @@ exporters: - googlemanagedprometheus: - metric: - add_metric_suffixes: false - user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=windows;ShortName=win_platform;ShortVersion=win_platform_version) otlp_grpc/otlp_logs: auth: authenticator: googleclientauth @@ -743,6 +739,12 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + metricstransform/prometheus_2: + transforms: + - action: update + include: ^(.*)$$ + match_type: regexp + new_name: prometheus.googleapis.com/$${1} resource/otlp_grpc/otlp_logs_logs_0: attributes: - action: insert @@ -912,6 +914,14 @@ processors: - delete_key(attributes, "location") - delete_key(attributes, "cluster") - delete_key(attributes, "namespace") + transform/prometheus_1: + error_mode: ignore + metric_statements: + - context: metric + statements: + - copy_metric(Concat([metric.name, "unknowncounter"], ":")) where metric.metadata["prometheus.type"] == "unknown" and not HasSuffix(metric.name, ":unknowncounter") + - convert_gauge_to_sum("cumulative", true) where HasSuffix(metric.name, ":unknowncounter") + - set(metric.name, Substring(metric.name, 0, Len(metric.name)-Len(":unknowncounter"))) where HasSuffix(metric.name, ":unknowncounter") transform/windows__event__log_0: error_mode: ignore log_statements: @@ -1578,9 +1588,14 @@ service: - prometheus/agent_prometheus metrics/prometheus__pipeline_prometheus: exporters: - - googlemanagedprometheus + - otlp_grpc/otlp_metrics processors: - transform/prometheus_0 + - transform/prometheus_1 + - metricstransform/prometheus_2 + - resource/otlp_grpc/otlp_metrics_metrics_0 + - metric_start_time/otlp_grpc/otlp_metrics_metrics_1 + - batch/otlp_grpc/otlp_metrics_metrics_2 receivers: - prometheus/prometheus telemetry: diff --git a/confgenerator/testdata/goldens/test-otlp-exporter-only/golden/linux-gpu/otel.yaml b/confgenerator/testdata/goldens/test-otlp-exporter-only/golden/linux-gpu/otel.yaml index f0bb34ca9a..90f61e90f1 100644 --- a/confgenerator/testdata/goldens/test-otlp-exporter-only/golden/linux-gpu/otel.yaml +++ b/confgenerator/testdata/goldens/test-otlp-exporter-only/golden/linux-gpu/otel.yaml @@ -1,8 +1,4 @@ exporters: - googlemanagedprometheus: - metric: - add_metric_suffixes: false - user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=linux;ShortName=linux_platform;ShortVersion=linux_platform_version) otlp_grpc/otlp_logs: auth: authenticator: googleclientauth @@ -710,6 +706,12 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + metricstransform/prometheus_2: + transforms: + - action: update + include: ^(.*)$$ + match_type: regexp + new_name: prometheus.googleapis.com/$${1} resource/otlp_grpc/otlp_logs_logs_0: attributes: - action: insert @@ -845,6 +847,14 @@ processors: - delete_key(attributes, "location") - delete_key(attributes, "cluster") - delete_key(attributes, "namespace") + transform/prometheus_1: + error_mode: ignore + metric_statements: + - context: metric + statements: + - copy_metric(Concat([metric.name, "unknowncounter"], ":")) where metric.metadata["prometheus.type"] == "unknown" and not HasSuffix(metric.name, ":unknowncounter") + - convert_gauge_to_sum("cumulative", true) where HasSuffix(metric.name, ":unknowncounter") + - set(metric.name, Substring(metric.name, 0, Len(metric.name)-Len(":unknowncounter"))) where HasSuffix(metric.name, ":unknowncounter") transform/syslog_0: error_mode: ignore log_statements: @@ -1130,9 +1140,14 @@ service: - prometheus/agent_prometheus metrics/prometheus__pipeline_prometheus: exporters: - - googlemanagedprometheus + - otlp_grpc/otlp_metrics processors: - transform/prometheus_0 + - transform/prometheus_1 + - metricstransform/prometheus_2 + - resource/otlp_grpc/otlp_metrics_metrics_0 + - metric_start_time/otlp_grpc/otlp_metrics_metrics_1 + - batch/otlp_grpc/otlp_metrics_metrics_2 receivers: - prometheus/prometheus telemetry: diff --git a/confgenerator/testdata/goldens/test-otlp-exporter-only/golden/linux/otel.yaml b/confgenerator/testdata/goldens/test-otlp-exporter-only/golden/linux/otel.yaml index 62a03bca6a..d16be5e6c3 100644 --- a/confgenerator/testdata/goldens/test-otlp-exporter-only/golden/linux/otel.yaml +++ b/confgenerator/testdata/goldens/test-otlp-exporter-only/golden/linux/otel.yaml @@ -1,8 +1,4 @@ exporters: - googlemanagedprometheus: - metric: - add_metric_suffixes: false - user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=linux;ShortName=linux_platform;ShortVersion=linux_platform_version) otlp_grpc/otlp_logs: auth: authenticator: googleclientauth @@ -681,6 +677,12 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + metricstransform/prometheus_2: + transforms: + - action: update + include: ^(.*)$$ + match_type: regexp + new_name: prometheus.googleapis.com/$${1} resource/otlp_grpc/otlp_logs_logs_0: attributes: - action: insert @@ -801,6 +803,14 @@ processors: - delete_key(attributes, "location") - delete_key(attributes, "cluster") - delete_key(attributes, "namespace") + transform/prometheus_1: + error_mode: ignore + metric_statements: + - context: metric + statements: + - copy_metric(Concat([metric.name, "unknowncounter"], ":")) where metric.metadata["prometheus.type"] == "unknown" and not HasSuffix(metric.name, ":unknowncounter") + - convert_gauge_to_sum("cumulative", true) where HasSuffix(metric.name, ":unknowncounter") + - set(metric.name, Substring(metric.name, 0, Len(metric.name)-Len(":unknowncounter"))) where HasSuffix(metric.name, ":unknowncounter") transform/syslog_0: error_mode: ignore log_statements: @@ -1070,9 +1080,14 @@ service: - prometheus/agent_prometheus metrics/prometheus__pipeline_prometheus: exporters: - - googlemanagedprometheus + - otlp_grpc/otlp_metrics processors: - transform/prometheus_0 + - transform/prometheus_1 + - metricstransform/prometheus_2 + - resource/otlp_grpc/otlp_metrics_metrics_0 + - metric_start_time/otlp_grpc/otlp_metrics_metrics_1 + - batch/otlp_grpc/otlp_metrics_metrics_2 receivers: - prometheus/prometheus telemetry: diff --git a/confgenerator/testdata/goldens/test-otlp-exporter-only/golden/windows-2012/otel.yaml b/confgenerator/testdata/goldens/test-otlp-exporter-only/golden/windows-2012/otel.yaml index c9fa029378..5ffbfc3baf 100644 --- a/confgenerator/testdata/goldens/test-otlp-exporter-only/golden/windows-2012/otel.yaml +++ b/confgenerator/testdata/goldens/test-otlp-exporter-only/golden/windows-2012/otel.yaml @@ -1,8 +1,4 @@ exporters: - googlemanagedprometheus: - metric: - add_metric_suffixes: false - user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=windows;ShortName=win_platform;ShortVersion=win_platform_version) otlp_grpc/otlp_logs: auth: authenticator: googleclientauth @@ -743,6 +739,12 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + metricstransform/prometheus_2: + transforms: + - action: update + include: ^(.*)$$ + match_type: regexp + new_name: prometheus.googleapis.com/$${1} resource/otlp_grpc/otlp_logs_logs_0: attributes: - action: insert @@ -912,6 +914,14 @@ processors: - delete_key(attributes, "location") - delete_key(attributes, "cluster") - delete_key(attributes, "namespace") + transform/prometheus_1: + error_mode: ignore + metric_statements: + - context: metric + statements: + - copy_metric(Concat([metric.name, "unknowncounter"], ":")) where metric.metadata["prometheus.type"] == "unknown" and not HasSuffix(metric.name, ":unknowncounter") + - convert_gauge_to_sum("cumulative", true) where HasSuffix(metric.name, ":unknowncounter") + - set(metric.name, Substring(metric.name, 0, Len(metric.name)-Len(":unknowncounter"))) where HasSuffix(metric.name, ":unknowncounter") transform/windows__event__log_0: error_mode: ignore log_statements: @@ -1620,9 +1630,14 @@ service: - prometheus/agent_prometheus metrics/prometheus__pipeline_prometheus: exporters: - - googlemanagedprometheus + - otlp_grpc/otlp_metrics processors: - transform/prometheus_0 + - transform/prometheus_1 + - metricstransform/prometheus_2 + - resource/otlp_grpc/otlp_metrics_metrics_0 + - metric_start_time/otlp_grpc/otlp_metrics_metrics_1 + - batch/otlp_grpc/otlp_metrics_metrics_2 receivers: - prometheus/prometheus telemetry: diff --git a/confgenerator/testdata/goldens/test-otlp-exporter-only/golden/windows/otel.yaml b/confgenerator/testdata/goldens/test-otlp-exporter-only/golden/windows/otel.yaml index c9fa029378..5ffbfc3baf 100644 --- a/confgenerator/testdata/goldens/test-otlp-exporter-only/golden/windows/otel.yaml +++ b/confgenerator/testdata/goldens/test-otlp-exporter-only/golden/windows/otel.yaml @@ -1,8 +1,4 @@ exporters: - googlemanagedprometheus: - metric: - add_metric_suffixes: false - user_agent: Google-Cloud-Ops-Agent-Metrics/latest (BuildDistro=build_distro;Platform=windows;ShortName=win_platform;ShortVersion=win_platform_version) otlp_grpc/otlp_logs: auth: authenticator: googleclientauth @@ -743,6 +739,12 @@ processors: include: ^(.*)$$ match_type: regexp new_name: agent.googleapis.com/$${1} + metricstransform/prometheus_2: + transforms: + - action: update + include: ^(.*)$$ + match_type: regexp + new_name: prometheus.googleapis.com/$${1} resource/otlp_grpc/otlp_logs_logs_0: attributes: - action: insert @@ -912,6 +914,14 @@ processors: - delete_key(attributes, "location") - delete_key(attributes, "cluster") - delete_key(attributes, "namespace") + transform/prometheus_1: + error_mode: ignore + metric_statements: + - context: metric + statements: + - copy_metric(Concat([metric.name, "unknowncounter"], ":")) where metric.metadata["prometheus.type"] == "unknown" and not HasSuffix(metric.name, ":unknowncounter") + - convert_gauge_to_sum("cumulative", true) where HasSuffix(metric.name, ":unknowncounter") + - set(metric.name, Substring(metric.name, 0, Len(metric.name)-Len(":unknowncounter"))) where HasSuffix(metric.name, ":unknowncounter") transform/windows__event__log_0: error_mode: ignore log_statements: @@ -1620,9 +1630,14 @@ service: - prometheus/agent_prometheus metrics/prometheus__pipeline_prometheus: exporters: - - googlemanagedprometheus + - otlp_grpc/otlp_metrics processors: - transform/prometheus_0 + - transform/prometheus_1 + - metricstransform/prometheus_2 + - resource/otlp_grpc/otlp_metrics_metrics_0 + - metric_start_time/otlp_grpc/otlp_metrics_metrics_1 + - batch/otlp_grpc/otlp_metrics_metrics_2 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 d4465fe1e7..367fa4569f 100644 --- a/integration_test/ops_agent_test/main_test.go +++ b/integration_test/ops_agent_test/main_test.go @@ -4974,6 +4974,221 @@ traces: ) } +func TestOTLPMetricsOTLP(t *testing.T) { + t.Parallel() + gce.RunForEachImage(t, func(t *testing.T, imageSpec string) { + if gce.IsOpsAgentUAPPlugin() { + // Ops Agent Plugin does not restart subagents on termination. + t.SkipNow() + } + t.Parallel() + ctx, logger, vm := setupMainLogAndVM(t, imageSpec) + otlpConfig := ` +combined: + receivers: + otlp: + type: otlp + grpc_endpoint: 0.0.0.0:4317 +metrics: + service: + pipelines: + otlp: + receivers: + - otlp +traces: + service: + pipelines: +` + // Only run the test for the OTLP http exporter + if err := agents.SetupOpsAgentWithFeatureFlag(ctx, logger, vm, otlpConfig, agents.OtlpHttpExporterFeatureFlag); err != nil { + t.Fatal(err) + } + + // Have to wait for startup feature tracking metrics to be sent + // before we tear down the service. + time.Sleep(2 * time.Minute) + + // Generate metric traffic with dummy app + metricFile, err := testdataDir.Open(path.Join("testdata", "otlp", "metrics.go")) + if err != nil { + t.Fatal(err) + } + defer metricFile.Close() + if err := installGolang(ctx, logger, vm); err != nil { + t.Fatal(err) + } + serviceName := "otlp-metric-googlemanagedprometheus-test" + if err = runGoCode(ctx, logger, vm, metricFile, "-service_name", serviceName); err != nil { + t.Fatal(err) + } + expectedLabels := []*metadata.MetricLabel{ + {Name: "otel_scope_name", ValueRegex: "foo"}, + {Name: "instance_name", ValueRegex: vm.Name}, + {Name: "machine_type", ValueRegex: fmt.Sprintf("projects/[0-9]+/machineTypes/%s", vm.MachineType)}, + } + tests := []metadata.ExpectedMetric{ + { + MetricSpec: metadata.MetricSpec{ + Type: "prometheus.googleapis.com/otlp.test.gauge/gauge", + Kind: metric.MetricDescriptor_GAUGE.String(), + ValueType: metric.MetricDescriptor_DOUBLE.String(), + Value: 5.0, + MonitoredResources: []string{"prometheus_target"}, + Labels: expectedLabels, + }, + Optional: false, + }, + { + MetricSpec: metadata.MetricSpec{ + Type: "prometheus.googleapis.com/otlp.test.cumulative/counter", + Kind: metric.MetricDescriptor_CUMULATIVE.String(), + ValueType: metric.MetricDescriptor_DOUBLE.String(), + Value: 15.0, + MonitoredResources: []string{"prometheus_target"}, + Labels: expectedLabels, + }, + Optional: false, + }, + { + MetricSpec: metadata.MetricSpec{ + Type: "prometheus.googleapis.com/otlp.test.histogram/histogram", + Kind: metric.MetricDescriptor_CUMULATIVE.String(), + ValueType: metric.MetricDescriptor_DISTRIBUTION.String(), + Value: &distribution.Distribution{ + Count: 3, + Mean: 2, + SumOfSquaredDeviation: 0.75, + BucketOptions: &distribution.Distribution_BucketOptions{ + Options: &distribution.Distribution_BucketOptions_ExplicitBuckets{ + ExplicitBuckets: &distribution.Distribution_BucketOptions_Explicit{ + Bounds: []float64{0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000}, + }, + }, + }, + BucketCounts: []int64{0, 3}, + }, + MonitoredResources: []string{"prometheus_target"}, + Labels: expectedLabels, + }, + Optional: false, + }, + { + MetricSpec: metadata.MetricSpec{ + Type: "prometheus.googleapis.com/otlp.test.updowncounter/gauge", + Kind: metric.MetricDescriptor_GAUGE.String(), + // b/476112381: New OTLP endpoint for prometheus converts INT metrics types to DOUBLE + ValueType: metric.MetricDescriptor_DOUBLE.String(), + Value: 3.0, + MonitoredResources: []string{"prometheus_target"}, + Labels: expectedLabels, + }, + Optional: false, + }, + { + MetricSpec: metadata.MetricSpec{ + Type: "prometheus.googleapis.com/workload.googleapis.com/otlp.test.prefix1/gauge", + Kind: metric.MetricDescriptor_GAUGE.String(), + ValueType: metric.MetricDescriptor_DOUBLE.String(), + Value: 5.0, + MonitoredResources: []string{"prometheus_target"}, + Labels: expectedLabels, + }, + Optional: false, + }, + { + MetricSpec: metadata.MetricSpec{ + Type: "prometheus.googleapis.com/.invalid.googleapis.com/otlp.test.prefix2/gauge", + Kind: metric.MetricDescriptor_GAUGE.String(), + ValueType: metric.MetricDescriptor_DOUBLE.String(), + Value: 5.0, + MonitoredResources: []string{"prometheus_target"}, + Labels: expectedLabels, + }, + Optional: false, + }, + { + MetricSpec: metadata.MetricSpec{ + Type: "prometheus.googleapis.com/otlp.test.prefix3/workload.googleapis.com/abc/gauge", + Kind: metric.MetricDescriptor_GAUGE.String(), + ValueType: metric.MetricDescriptor_DOUBLE.String(), + Value: 5.0, + MonitoredResources: []string{"prometheus_target"}, + Labels: expectedLabels, + }, + Optional: false, + }, + { + MetricSpec: metadata.MetricSpec{ + Type: "prometheus.googleapis.com/WORKLOAD.GOOGLEAPIS.COM/otlp.test.prefix4/gauge", + Kind: metric.MetricDescriptor_GAUGE.String(), + ValueType: metric.MetricDescriptor_DOUBLE.String(), + Value: 5.0, + MonitoredResources: []string{"prometheus_target"}, + Labels: expectedLabels, + }, + Optional: false, + }, + { + MetricSpec: metadata.MetricSpec{ + Type: "prometheus.googleapis.com/WORKLOAD.googleapis.com/otlp.test.prefix5/gauge", + Kind: metric.MetricDescriptor_GAUGE.String(), + ValueType: metric.MetricDescriptor_DOUBLE.String(), + Value: 5.0, + MonitoredResources: []string{"prometheus_target"}, + Labels: expectedLabels, + }, + Optional: false, + }, + } + var multiErr error + for _, test := range tests { + multiErr = multierr.Append(multiErr, waitForAndAssertMetric(ctx, logger, vm, time.Hour, &test, nil, true)) + } + if multiErr != nil { + t.Error(multiErr) + } + + expectedFeatures := []*feature_tracking_metadata.FeatureTracking{ + { + Module: "logging", + Feature: "service:pipelines", + Key: "default_pipeline_overridden", + Value: "false", + }, + { + Module: "metrics", + Feature: "service:pipelines", + Key: "default_pipeline_overridden", + Value: "false", + }, + { + Module: "combined", + Feature: "receivers:otlp", + Key: "[0].enabled", + Value: "true", + }, + { + Module: "combined", + Feature: "receivers:otlp", + Key: "[0].grpc_endpoint", + Value: "endpoint", + }, + } + + series, err := gce.WaitForMetricSeries(ctx, logger, vm, "agent.googleapis.com/agent/internal/ops/feature_tracking", time.Hour, nil, false, len(expectedFeatures)) + if err != nil { + t.Error(err) + return + } + + err = feature_tracking_metadata.AssertFeatureTrackingMetrics(series, expectedFeatures) + if err != nil { + t.Error(err) + return + } + }) +} + func TestOTLPMetricsGMP(t *testing.T) { t.Parallel() gce.RunForEachImage(t, func(t *testing.T, imageSpec string) {