Google Cloud Monitoring Exporter for OpenTelemetry
The `opentelemetry-exporter-gcp-monitoring` library provides an OpenTelemetry Python exporter for sending metrics to Google Cloud Monitoring. It is part of the `opentelemetry-operations-python` project, ensuring compatibility with other Google Cloud OpenTelemetry components. The current version is 1.11.0a0 and the project maintains a regular release cadence with frequent updates.
Warnings
- breaking Version 1.11.0a0 introduced an upper bound on `opentelemetry-sdk` due to potential breaking changes related to logging exporters. If you are also using OpenTelemetry logging components, ensure careful version management to avoid conflicts.
- gotcha Proper Google Cloud authentication is required for the exporter to send metrics. The library relies on `google-auth` to find credentials, typically through `GOOGLE_APPLICATION_CREDENTIALS` environment variable, `gcloud` CLI defaults, or service account attached to the VM/environment.
- gotcha OpenTelemetry Resource attributes are mapped to Google Cloud Monitoring MonitoredResource labels. Incorrect or missing critical resource attributes (e.g., `service.name`, `service.namespace`) can lead to metrics not appearing or being incorrectly categorized in Cloud Monitoring.
- gotcha The `PeriodicExportingMetricReader` exports metrics at a specified interval. If your application exits before an export interval completes or before a manual `shutdown()` or `force_flush()` call, recent metrics may not be sent to Cloud Monitoring.
Install
-
pip install opentelemetry-exporter-gcp-monitoring
Imports
- CloudMonitoringMetricsExporter
from opentelemetry.exporter.gcp_monitoring import CloudMonitoringMetricsExporter
Quickstart
import os
import time
from opentelemetry import metrics
from opentelemetry.exporter.gcp_monitoring import CloudMonitoringMetricsExporter
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
# Ensure your Google Cloud credentials are set up (e.g., via GOOGLE_APPLICATION_CREDENTIALS)
# os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '/path/to/your/key.json'
# Configure Resource attributes (these map to GCP MonitoredResource labels)
resource = Resource.create(
{
"service.name": os.environ.get('SERVICE_NAME', 'my-gcp-metrics-service'),
"service.namespace": os.environ.get('SERVICE_NAMESPACE', 'default'),
"service.instance.id": os.environ.get('SERVICE_INSTANCE_ID', 'instance-1'),
}
)
# Configure the exporter and metric reader
exporter = CloudMonitoringMetricsExporter()
reader = PeriodicExportingMetricReader(
exporter,
export_interval_millis=5000, # Export every 5 seconds
export_timeout_millis=30000 # Timeout after 30 seconds
)
meter_provider = MeterProvider(metric_readers=[reader], resource=resource)
metrics.set_meter_provider(meter_provider)
# Create a meter from the global meter provider
meter = metrics.get_meter(__name__)
# Create a counter instrument
counter = meter.create_counter(
"my_app_requests_total",
description="Total number of application requests",
unit="1",
)
# Record some measurements
print("Recording metrics...")
for i in range(5):
counter.add(1, {"http_method": "GET", "http_status": "200"})
counter.add(1, {"http_method": "POST", "http_status": "201"})
print(f" Added metrics batch {i+1}")
time.sleep(2) # Sleep to allow multiple export intervals
print("Metrics sent to Google Cloud Monitoring. Check your dashboard.")
# Flush and shutdown the provider to ensure all metrics are exported
meter_provider.shutdown()
print("Metric provider shut down.")