func()

in confgenerator/agentmetrics.go [35:108]


func (r AgentSelfMetrics) MetricsSubmodulePipeline() otel.ReceiverPipeline {
	return otel.ReceiverPipeline{
		Receiver: otel.Component{
			Type: "prometheus",
			Config: map[string]interface{}{
				"config": map[string]interface{}{
					"scrape_configs": []map[string]interface{}{{
						"job_name":        "otel-collector",
						"scrape_interval": "1m",
						"static_configs": []map[string]interface{}{{
							// TODO(b/196990135): Customization for the port number
							"targets": []string{fmt.Sprintf("0.0.0.0:%d", r.Port)},
						}},
					}},
				},
			},
		},
		ExporterTypes: map[string]otel.ExporterType{
			"metrics": otel.System,
		},
		Processors: map[string][]otel.Component{"metrics": {
			otel.MetricsFilter(
				"include",
				"strict",
				"otelcol_process_uptime",
				"otelcol_process_memory_rss",
				"grpc.client.attempt.duration",
				"googlecloudmonitoring/point_count",
			),
			otel.Transform("metric", "metric",
				// create new count metric from histogram metric
				ottl.ExtractCountMetric(true, "grpc.client.attempt.duration"),
			),
			otel.MetricsFilter(
				"include",
				"strict",
				"otelcol_process_uptime",
				"otelcol_process_memory_rss",
				"grpc.client.attempt.duration_count",
				"googlecloudmonitoring/point_count",
			),
			otel.MetricsTransform(
				otel.RenameMetric("otelcol_process_uptime", "agent/uptime",
					// change data type from double -> int64
					otel.ToggleScalarDataType,
					otel.AddLabel("version", r.Version),
					// remove service.version label
					otel.AggregateLabels("sum", "version"),
				),
				otel.RenameMetric("otelcol_process_memory_rss", "agent/memory_usage",
					// remove service.version label
					otel.AggregateLabels("sum"),
				),
				otel.RenameMetric("grpc.client.attempt.duration_count", "agent/api_request_count",
					// TODO: below is proposed new configuration for the metrics transform processor
					// ignore any non "google.monitoring" RPCs (note there won't be any other RPCs for now)
					// - action: select_label_values
					//   label: grpc_client_method
					//   value_regexp: ^google\.monitoring
					otel.RenameLabel("grpc.status", "state"),
					// delete grpc_client_method dimension & service.version label, retaining only state
					otel.AggregateLabels("sum", "state"),
				),
				otel.RenameMetric("googlecloudmonitoring/point_count", "agent/monitoring/point_count",
					// change data type from double -> int64
					otel.ToggleScalarDataType,
					// Remove service.version label
					otel.AggregateLabels("sum", "status"),
				),
				otel.AddPrefix("agent.googleapis.com"),
			),
		}},
	}
}