Google Cloud Monitoring API client library for collecting, analyzing, and alerting on metrics, events, and metadata from cloud and on-premise sources.
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Core functionality for working with metrics, time series data, and monitored resources in Google Cloud Monitoring. This service handles metric descriptor management, time series data ingestion and querying, and monitored resource descriptor operations.
Manage metric descriptors that define the schema and metadata for custom metrics.
class MetricServiceClient:
def list_metric_descriptors(
self,
request=None,
*,
name: str = None,
retry=None,
timeout=None,
metadata=()
) -> pagers.ListMetricDescriptorsPager:
"""
Lists metric descriptors that match a filter.
Args:
request: The request object or dict equivalent
name: Required. Project name in format 'projects/[PROJECT_ID]'
retry: Retry configuration
timeout: Request timeout in seconds
metadata: Additional metadata
Returns:
Pager for iterating over metric descriptors
"""
def get_metric_descriptor(
self,
request=None,
*,
name: str = None,
retry=None,
timeout=None,
metadata=()
) -> metric_pb2.MetricDescriptor:
"""
Gets a single metric descriptor.
Args:
request: The request object or dict equivalent
name: Required. Metric descriptor name
retry: Retry configuration
timeout: Request timeout in seconds
metadata: Additional metadata
Returns:
MetricDescriptor object
"""
def create_metric_descriptor(
self,
request=None,
*,
name: str = None,
metric_descriptor=None,
retry=None,
timeout=None,
metadata=()
) -> metric_pb2.MetricDescriptor:
"""
Creates a user-defined metric descriptor.
Args:
request: The request object or dict equivalent
name: Required. Project name
metric_descriptor: Required. The metric descriptor to create
retry: Retry configuration
timeout: Request timeout in seconds
metadata: Additional metadata
Returns:
Created MetricDescriptor object
"""
def delete_metric_descriptor(
self,
request=None,
*,
name: str = None,
retry=None,
timeout=None,
metadata=()
) -> None:
"""
Deletes a metric descriptor.
Args:
request: The request object or dict equivalent
name: Required. Metric descriptor name to delete
retry: Retry configuration
timeout: Request timeout in seconds
metadata: Additional metadata
"""Manage time series data including reading historical data and writing new data points.
class MetricServiceClient:
def list_time_series(
self,
request=None,
*,
name: str = None,
filter: str = None,
interval=None,
view=None,
retry=None,
timeout=None,
metadata=()
) -> pagers.ListTimeSeriesPager:
"""
Lists time series that match a filter.
Args:
request: The request object or dict equivalent
name: Required. Project name
filter: Required. Monitoring filter string
interval: Required. Time interval for data
view: Specifies which information is returned
retry: Retry configuration
timeout: Request timeout in seconds
metadata: Additional metadata
Returns:
Pager for iterating over TimeSeries objects
"""
def create_time_series(
self,
request=None,
*,
name: str = None,
time_series=None,
retry=None,
timeout=None,
metadata=()
) -> None:
"""
Creates or adds data to one or more time series.
Args:
request: The request object or dict equivalent
name: Required. Project name
time_series: Required. List of TimeSeries objects
retry: Retry configuration
timeout: Request timeout in seconds
metadata: Additional metadata
"""
def create_service_time_series(
self,
request=None,
*,
name: str = None,
time_series=None,
retry=None,
timeout=None,
metadata=()
) -> None:
"""
Creates or adds data to service time series.
Args:
request: The request object or dict equivalent
name: Required. Project name
time_series: Required. List of TimeSeries objects
retry: Retry configuration
timeout: Request timeout in seconds
metadata: Additional metadata
"""Manage monitored resource descriptors that define resource types and their label schemas.
class MetricServiceClient:
def list_monitored_resource_descriptors(
self,
request=None,
*,
name: str = None,
retry=None,
timeout=None,
metadata=()
) -> pagers.ListMonitoredResourceDescriptorsPager:
"""
Lists monitored resource descriptors.
Args:
request: The request object or dict equivalent
name: Required. Project name
retry: Retry configuration
timeout: Request timeout in seconds
metadata: Additional metadata
Returns:
Pager for iterating over MonitoredResourceDescriptor objects
"""
def get_monitored_resource_descriptor(
self,
request=None,
*,
name: str = None,
retry=None,
timeout=None,
metadata=()
) -> monitored_resource_pb2.MonitoredResourceDescriptor:
"""
Gets a single monitored resource descriptor.
Args:
request: The request object or dict equivalent
name: Required. Monitored resource descriptor name
retry: Retry configuration
timeout: Request timeout in seconds
metadata: Additional metadata
Returns:
MonitoredResourceDescriptor object
"""Represents a collection of data points associated with a metric.
class TimeSeries:
metric: Metric # Associated metric
resource: MonitoredResource # Associated resource
metadata: MonitoredResourceMetadata # Resource metadata
metric_kind: MetricDescriptor.MetricKind # Metric kind
value_type: MetricDescriptor.ValueType # Value type
points: List[Point] # Data points
unit: str # Unit of measurement
class Point:
interval: TimeInterval # Time interval for the point
value: TypedValue # The value of the point
class Metric:
type: str # Metric type name
labels: Dict[str, str] # Metric labels
class MonitoredResource:
type: str # Resource type
labels: Dict[str, str] # Resource labelsclass ListTimeSeriesRequest:
name: str # Required. Project name
filter: str # Required. Monitoring filter
interval: TimeInterval # Required. Time interval
aggregation: Aggregation # Aggregation specification
order_by: str # Ordering specification
view: ListTimeSeriesRequest.TimeSeriesView # View type
page_size: int # Maximum results per page
page_token: str # Page token
class ListTimeSeriesResponse:
time_series: List[TimeSeries] # Time series data
next_page_token: str # Next page token
execution_errors: List[Status] # Execution errors
class CreateTimeSeriesRequest:
name: str # Required. Project name
time_series: List[TimeSeries] # Required. Time series data
class CreateTimeSeriesSummary:
total_point_count: int # Total points processed
success_point_count: int # Successfully written points
errors: List[CreateTimeSeriesError] # Errors encountered
class CreateTimeSeriesError:
time_series: TimeSeries # Time series with error
status: Status # Error statusclass ListMetricDescriptorsRequest:
name: str # Required. Project name
filter: str # Filter expression
page_size: int # Maximum results per page
page_token: str # Page token
class ListMetricDescriptorsResponse:
metric_descriptors: List[MetricDescriptor] # Metric descriptors
next_page_token: str # Next page token
class CreateMetricDescriptorRequest:
name: str # Required. Project name
metric_descriptor: MetricDescriptor # Required. Metric descriptor
class GetMetricDescriptorRequest:
name: str # Required. Metric descriptor name
class DeleteMetricDescriptorRequest:
name: str # Required. Metric descriptor name to delete
class GetMonitoredResourceDescriptorRequest:
name: str # Required. Monitored resource descriptor name
class ListMonitoredResourceDescriptorsRequest:
name: str # Required. Project name
filter: str # Filter expression
page_size: int # Maximum results per page
page_token: str # Page token
class ListMonitoredResourceDescriptorsResponse:
resource_descriptors: List[MonitoredResourceDescriptor] # Resource descriptors
next_page_token: str # Next page tokenfrom google.cloud.monitoring import MetricServiceClient
from google.api import metric_pb2
from google.api import label_pb2
client = MetricServiceClient()
project_name = f"projects/{project_id}"
# Create metric descriptor
descriptor = metric_pb2.MetricDescriptor()
descriptor.type = "custom.googleapis.com/my_metric"
descriptor.metric_kind = metric_pb2.MetricDescriptor.MetricKind.GAUGE
descriptor.value_type = metric_pb2.MetricDescriptor.ValueType.DOUBLE
descriptor.description = "My custom metric"
descriptor.display_name = "My Metric"
# Add labels
label = label_pb2.LabelDescriptor()
label.key = "environment"
label.value_type = label_pb2.LabelDescriptor.ValueType.STRING
label.description = "Environment label"
descriptor.labels.append(label)
# Create the descriptor
created_descriptor = client.create_metric_descriptor(
name=project_name,
metric_descriptor=descriptor
)
print(f"Created metric descriptor: {created_descriptor.type}")from google.cloud.monitoring import MetricServiceClient
from google.cloud.monitoring_v3.types import TimeSeries, Point, TypedValue
from google.cloud.monitoring_v3.types import TimeInterval, Metric, MonitoredResource
from google.protobuf.timestamp_pb2 import Timestamp
import time
client = MetricServiceClient()
project_name = f"projects/{project_id}"
# Create time series
series = TimeSeries()
# Set metric
series.metric.type = "custom.googleapis.com/my_metric"
series.metric.labels["environment"] = "production"
# Set resource
series.resource.type = "gce_instance"
series.resource.labels["instance_id"] = "my-instance-123"
series.resource.labels["zone"] = "us-central1-a"
# Create data point
now = time.time()
seconds = int(now)
nanos = int((now - seconds) * 10**9)
point = Point()
point.value.double_value = 42.0
point.interval.end_time.seconds = seconds
point.interval.end_time.nanos = nanos
series.points = [point]
# Write the time series
client.create_time_series(
name=project_name,
time_series=[series]
)
print("Time series data written successfully")from google.cloud.monitoring import MetricServiceClient
from google.cloud.monitoring_v3.types import TimeInterval, Aggregation
from google.protobuf.timestamp_pb2 import Timestamp
import time
client = MetricServiceClient()
project_name = f"projects/{project_id}"
# Define time interval (last hour)
now = time.time()
interval = TimeInterval()
interval.end_time.seconds = int(now)
interval.start_time.seconds = int(now - 3600) # 1 hour ago
# Query time series
filter_str = 'metric.type="compute.googleapis.com/instance/cpu/utilization"'
for series in client.list_time_series(
name=project_name,
filter=filter_str,
interval=interval
):
print(f"Metric: {series.metric.type}")
print(f"Resource: {series.resource.type}")
for point in series.points:
print(f"Value: {point.value.double_value} at {point.interval.end_time}")from google.cloud.monitoring_v3.types import Aggregation, Duration
# Create aggregation specification
aggregation = Aggregation()
aggregation.alignment_period.seconds = 300 # 5 minutes
aggregation.per_series_aligner = Aggregation.Aligner.ALIGN_MEAN
aggregation.cross_series_reducer = Aggregation.Reducer.REDUCE_MEAN
aggregation.group_by_fields = ["resource.label.zone"]
# Query with aggregation
for series in client.list_time_series(
name=project_name,
filter=filter_str,
interval=interval,
aggregation=aggregation
):
print(f"Aggregated series: {series.metric.type}")
for point in series.points:
print(f"Aggregated value: {point.value.double_value}")client = MetricServiceClient()
project_name = f"projects/{project_id}"
# List all metric descriptors
for descriptor in client.list_metric_descriptors(name=project_name):
print(f"Metric: {descriptor.type}")
print(f"Kind: {descriptor.metric_kind}")
print(f"Value Type: {descriptor.value_type}")
# Filter custom metrics
filter_expr = 'metric.type=starts_with("custom.googleapis.com/")'
request = {"name": project_name, "filter": filter_expr}
for descriptor in client.list_metric_descriptors(request=request):
print(f"Custom metric: {descriptor.type}")import asyncio
from google.cloud.monitoring import MetricServiceAsyncClient
async def manage_metrics():
client = MetricServiceAsyncClient()
project_name = f"projects/{project_id}"
# List metric descriptors asynchronously
async for descriptor in await client.list_metric_descriptors(name=project_name):
print(f"Async metric: {descriptor.type}")
# Create time series asynchronously
await client.create_time_series(
name=project_name,
time_series=[series] # series defined earlier
)
print("Async time series creation completed")
asyncio.run(manage_metrics())class MetricServiceClient:
@staticmethod
def metric_descriptor_path(project: str, metric_descriptor: str) -> str:
"""Returns a fully-qualified metric_descriptor string."""
@staticmethod
def monitored_resource_descriptor_path(
project: str,
monitored_resource_descriptor: str
) -> str:
"""Returns a fully-qualified monitored_resource_descriptor string."""
@staticmethod
def parse_metric_descriptor_path(path: str) -> Dict[str, str]:
"""Parses a metric_descriptor path into its component segments."""Metric operations can encounter various error conditions:
from google.api_core import exceptions
from google.cloud.monitoring import MetricServiceClient
client = MetricServiceClient()
try:
# Attempt to create time series
client.create_time_series(name=project_name, time_series=invalid_series)
except exceptions.InvalidArgument as e:
print(f"Invalid time series data: {e}")
except exceptions.ResourceExhausted:
print("Rate limit exceeded")
except exceptions.NotFound:
print("Metric descriptor not found")
except exceptions.PermissionDenied:
print("Insufficient permissions to write metrics")Install with Tessl CLI
npx tessl i tessl/pypi-google-cloud-monitoring