Relabeling configuration to convert verbose prometheus.exporter.gcp metric names to Datadog-compatible naming convention.
The prometheus.exporter.gcp component (based on stackdriver_exporter) generates verbose metric names:
Original GCP Metric:
run.googleapis.com/request_count
Exported Format:
stackdriver_{resource_type}_{metric_path_with_underscores}
Result:
stackdriver_cloud_run_revision_run_googleapis_com_request_count
│ │
│ └─ metric path (dots/slashes → underscores)
└─ GCP resource type
After base relabel (stackdriver_ → gcp_):
gcp_cloud_run_revision_run_googleapis_com_request_count
| GCP Service | Resource Type |
|---|---|
| Cloud Run | cloud_run_revision |
| Cloud Functions | cloud_function |
| Pub/Sub Topic | pubsub_topic |
| Pub/Sub Subscription | pubsub_subscription |
| AlloyDB | alloydb_googleapis_com_Instance |
| Cloud Workflows | workflows_googleapis_com_Workflow |
| Firestore | firestore_googleapis_com_Database |
| Cloud Tasks | cloud_tasks_queue |
| Load Balancer (HTTPS) | https_lb_rule |
| Load Balancer (L3) | internal_tcp_lb_rule |
Datadog uses a simplified naming pattern:
- GCP metric:
run.googleapis.com/request_count - Datadog metric:
gcp.run.request_count
Pattern: gcp.<service>.<metric_path>
The relabel rules below transform verbose Alloy names to match Datadog's convention.
| GCP Service | GCP Metric | Alloy Exported Name | Datadog-style Target |
|---|---|---|---|
| Cloud Run | run.googleapis.com/request_count |
stackdriver_cloud_run_revision_run_googleapis_com_request_count |
gcp_run_request_count |
run.googleapis.com/request_latencies |
stackdriver_cloud_run_revision_run_googleapis_com_request_latencies |
gcp_run_request_latencies |
|
run.googleapis.com/container/cpu/utilization |
stackdriver_cloud_run_revision_run_googleapis_com_container_cpu_utilization |
gcp_run_container_cpu_utilization |
|
run.googleapis.com/container/memory/utilization |
stackdriver_cloud_run_revision_run_googleapis_com_container_memory_utilization |
gcp_run_container_memory_utilization |
|
run.googleapis.com/container/instance_count |
stackdriver_cloud_run_revision_run_googleapis_com_container_instance_count |
gcp_run_container_instance_count |
|
| Cloud Functions | cloudfunctions.googleapis.com/function/execution_count |
stackdriver_cloud_function_cloudfunctions_googleapis_com_function_execution_count |
gcp_cloudfunctions_function_execution_count |
cloudfunctions.googleapis.com/function/active_instances |
stackdriver_cloud_function_cloudfunctions_googleapis_com_function_active_instances |
gcp_cloudfunctions_function_active_instances |
|
cloudfunctions.googleapis.com/function/execution_times |
stackdriver_cloud_function_cloudfunctions_googleapis_com_function_execution_times |
gcp_cloudfunctions_function_execution_times |
|
cloudfunctions.googleapis.com/function/user_memory_bytes |
stackdriver_cloud_function_cloudfunctions_googleapis_com_function_user_memory_bytes |
gcp_cloudfunctions_function_user_memory_bytes |
|
| Pub/Sub Topic | pubsub.googleapis.com/topic/send_request_count |
stackdriver_pubsub_topic_pubsub_googleapis_com_topic_send_request_count |
gcp_pubsub_topic_send_request_count |
pubsub.googleapis.com/topic/message_sizes |
stackdriver_pubsub_topic_pubsub_googleapis_com_topic_message_sizes |
gcp_pubsub_topic_message_sizes |
|
| Pub/Sub Subscription | pubsub.googleapis.com/subscription/num_outstanding_messages |
stackdriver_pubsub_subscription_pubsub_googleapis_com_subscription_num_outstanding_messages |
gcp_pubsub_subscription_num_outstanding_messages |
pubsub.googleapis.com/subscription/oldest_unacked_message_age |
stackdriver_pubsub_subscription_pubsub_googleapis_com_subscription_oldest_unacked_message_age |
gcp_pubsub_subscription_oldest_unacked_message_age |
|
| AlloyDB | alloydb.googleapis.com/database/cpu/utilization |
stackdriver_alloydb_googleapis_com_Instance_alloydb_googleapis_com_database_cpu_utilization |
gcp_alloydb_database_cpu_utilization |
alloydb.googleapis.com/database/memory/utilization |
stackdriver_alloydb_googleapis_com_Instance_alloydb_googleapis_com_database_memory_utilization |
gcp_alloydb_database_memory_utilization |
|
| Workflows | workflows.googleapis.com/finished_execution_count |
stackdriver_workflows_googleapis_com_Workflow_workflows_googleapis_com_finished_execution_count |
gcp_workflows_finished_execution_count |
workflows.googleapis.com/failed_execution_count |
stackdriver_workflows_googleapis_com_Workflow_workflows_googleapis_com_failed_execution_count |
gcp_workflows_failed_execution_count |
|
| Firestore | firestore.googleapis.com/api/request_count |
stackdriver_firestore_googleapis_com_Database_firestore_googleapis_com_api_request_count |
gcp_firestore_api_request_count |
| Cloud Tasks | cloudtasks.googleapis.com/queue/depth |
stackdriver_cloud_tasks_queue_cloudtasks_googleapis_com_queue_depth |
gcp_cloudtasks_queue_depth |
cloudtasks.googleapis.com/queue/task_attempt_count |
stackdriver_cloud_tasks_queue_cloudtasks_googleapis_com_queue_task_attempt_count |
gcp_cloudtasks_queue_task_attempt_count |
|
| Artifact Registry | artifactregistry.googleapis.com/api/request_count |
stackdriver_artifactregistry_googleapis_com_*_artifactregistry_googleapis_com_api_request_count |
gcp_artifactregistry_api_request_count |
| Load Balancer (HTTPS) | loadbalancing.googleapis.com/https/request_count |
stackdriver_https_lb_rule_loadbalancing_googleapis_com_https_request_count |
gcp_loadbalancing_https_request_count |
| Load Balancer (L3) | loadbalancing.googleapis.com/l3/internal/egress_bytes_count |
stackdriver_internal_tcp_lb_rule_loadbalancing_googleapis_com_l3_internal_egress_bytes_count |
gcp_loadbalancing_l3_internal_egress_bytes_count |
prometheus.relabel "rename_metrics" {
forward_to = [prometheus.remote_write.gcp_forward.receiver]
// ============================================
// Base rule: stackdriver_ → gcp_
// ============================================
rule {
source_labels = ["__name__"]
regex = "stackdriver_(.*)"
target_label = "__name__"
replacement = "gcp_$1"
}
// ============================================
// Cloud Run
// gcp_cloud_run_revision_run_googleapis_com_X → gcp_run_X
// ============================================
rule {
source_labels = ["__name__"]
regex = "gcp_cloud_run_revision_run_googleapis_com_(.*)"
target_label = "__name__"
replacement = "gcp_run_$1"
}
// ============================================
// Cloud Functions
// gcp_cloud_function_cloudfunctions_googleapis_com_function_X → gcp_cloudfunctions_function_X
// ============================================
rule {
source_labels = ["__name__"]
regex = "gcp_cloud_function_cloudfunctions_googleapis_com_function_(.*)"
target_label = "__name__"
replacement = "gcp_cloudfunctions_function_$1"
}
// ============================================
// Pub/Sub Topic
// gcp_pubsub_topic_pubsub_googleapis_com_topic_X → gcp_pubsub_topic_X
// ============================================
rule {
source_labels = ["__name__"]
regex = "gcp_pubsub_topic_pubsub_googleapis_com_topic_(.*)"
target_label = "__name__"
replacement = "gcp_pubsub_topic_$1"
}
// ============================================
// Pub/Sub Subscription
// gcp_pubsub_subscription_pubsub_googleapis_com_subscription_X → gcp_pubsub_subscription_X
// ============================================
rule {
source_labels = ["__name__"]
regex = "gcp_pubsub_subscription_pubsub_googleapis_com_subscription_(.*)"
target_label = "__name__"
replacement = "gcp_pubsub_subscription_$1"
}
// ============================================
// AlloyDB
// gcp_alloydb_googleapis_com_Instance_alloydb_googleapis_com_database_X → gcp_alloydb_database_X
// ============================================
rule {
source_labels = ["__name__"]
regex = "gcp_alloydb_googleapis_com_Instance_alloydb_googleapis_com_database_(.*)"
target_label = "__name__"
replacement = "gcp_alloydb_database_$1"
}
// ============================================
// Cloud Workflows
// gcp_workflows_googleapis_com_Workflow_workflows_googleapis_com_X → gcp_workflows_X
// ============================================
rule {
source_labels = ["__name__"]
regex = "gcp_workflows_googleapis_com_Workflow_workflows_googleapis_com_(.*)"
target_label = "__name__"
replacement = "gcp_workflows_$1"
}
// ============================================
// Firestore
// gcp_firestore_googleapis_com_Database_firestore_googleapis_com_X → gcp_firestore_X
// ============================================
rule {
source_labels = ["__name__"]
regex = "gcp_firestore_googleapis_com_Database_firestore_googleapis_com_(.*)"
target_label = "__name__"
replacement = "gcp_firestore_$1"
}
// ============================================
// Cloud Tasks
// gcp_cloud_tasks_queue_cloudtasks_googleapis_com_X → gcp_cloudtasks_X
// ============================================
rule {
source_labels = ["__name__"]
regex = "gcp_cloud_tasks_queue_cloudtasks_googleapis_com_(.*)"
target_label = "__name__"
replacement = "gcp_cloudtasks_$1"
}
// ============================================
// Artifact Registry
// gcp_artifactregistry_googleapis_com_*_artifactregistry_googleapis_com_X → gcp_artifactregistry_X
// ============================================
rule {
source_labels = ["__name__"]
regex = "gcp_artifactregistry_googleapis_com_[^_]+_artifactregistry_googleapis_com_(.*)"
target_label = "__name__"
replacement = "gcp_artifactregistry_$1"
}
// ============================================
// Load Balancer HTTPS
// gcp_https_lb_rule_loadbalancing_googleapis_com_https_X → gcp_loadbalancing_https_X
// ============================================
rule {
source_labels = ["__name__"]
regex = "gcp_https_lb_rule_loadbalancing_googleapis_com_https_(.*)"
target_label = "__name__"
replacement = "gcp_loadbalancing_https_$1"
}
// ============================================
// Load Balancer L3/Internal
// gcp_internal_tcp_lb_rule_loadbalancing_googleapis_com_l3_internal_X → gcp_loadbalancing_l3_internal_X
// ============================================
rule {
source_labels = ["__name__"]
regex = "gcp_internal_tcp_lb_rule_loadbalancing_googleapis_com_l3_internal_(.*)"
target_label = "__name__"
replacement = "gcp_loadbalancing_l3_internal_$1"
}
}| Service | Datadog-compatible Metric Name |
|---|---|
| Cloud Run | gcp_run_request_count |
gcp_run_request_latencies |
|
gcp_run_container_cpu_utilization |
|
gcp_run_container_memory_utilization |
|
gcp_run_container_instance_count |
|
gcp_run_container_startup_latencies |
|
| Cloud Functions | gcp_cloudfunctions_function_execution_count |
gcp_cloudfunctions_function_active_instances |
|
gcp_cloudfunctions_function_execution_times |
|
gcp_cloudfunctions_function_user_memory_bytes |
|
gcp_cloudfunctions_function_cpu_usage_seconds |
|
gcp_cloudfunctions_function_memory_usage_bytes |
|
| Pub/Sub | gcp_pubsub_topic_send_request_count |
gcp_pubsub_topic_message_sizes |
|
gcp_pubsub_subscription_num_outstanding_messages |
|
gcp_pubsub_subscription_oldest_unacked_message_age |
|
gcp_pubsub_subscription_backlog_bytes |
|
| AlloyDB | gcp_alloydb_database_cpu_utilization |
gcp_alloydb_database_memory_utilization |
|
gcp_alloydb_database_disk_utilization |
|
gcp_alloydb_database_active_connections |
|
| Workflows | gcp_workflows_finished_execution_count |
gcp_workflows_failed_execution_count |
|
gcp_workflows_execution_times |
|
| Firestore | gcp_firestore_api_request_count |
gcp_firestore_network_active_connections |
|
| Cloud Tasks | gcp_cloudtasks_queue_depth |
gcp_cloudtasks_queue_task_attempt_count |
|
gcp_cloudtasks_queue_task_attempt_delays |
|
gcp_cloudtasks_api_request_count |
|
| Artifact Registry | gcp_artifactregistry_api_request_count |
| Load Balancer | gcp_loadbalancing_https_request_count |
gcp_loadbalancing_https_backend_latencies |
|
gcp_loadbalancing_l3_internal_egress_bytes_count |
| Topic | URL |
|---|---|
| Grafana Alloy Relabeling | https://grafana.com/docs/alloy/latest/reference/components/prometheus/prometheus.relabel/ |
| Grafana Alloy GCP Exporter | https://grafana.com/docs/alloy/latest/reference/components/prometheus/prometheus.exporter.gcp/ |
| Datadog Cloud Run Integration | https://docs.datadoghq.com/integrations/google-cloud-run/ |
| Datadog Cloud Functions Integration | https://docs.datadoghq.com/integrations/google-cloud-functions/ |
| Datadog Pub/Sub Integration | https://docs.datadoghq.com/integrations/google-cloud-pubsub/ |
| Datadog AlloyDB Integration | https://docs.datadoghq.com/integrations/google-cloud-alloydb/ |
| Datadog Cloud Tasks Integration | https://docs.datadoghq.com/integrations/google-cloud-tasks/ |
| Datadog Firestore Integration | https://docs.datadoghq.com/integrations/google-cloud-firestore/ |
| Datadog GCP Platform Integration | https://docs.datadoghq.com/integrations/google-cloud-platform/ |
- Rule Order Matters - The base
stackdriver_→gcp_rule must come first - Regex Patterns - Patterns may need adjustment based on actual exported metric names
- Verification - Check actual metrics in Alloy's
/metricsendpoint or Grafana Explore after deployment - Underscores vs Dots - Prometheus uses underscores; Datadog native uses dots. This config uses underscores for Prometheus compatibility