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
Comprehensive resource group management for organizing and categorizing monitored resources in Google Cloud Monitoring. Groups enable bulk operations, simplified resource management, and hierarchical organization of your monitoring infrastructure.
Manage the complete lifecycle of resource groups including creation, updates, retrieval, deletion, and member management.
class GroupServiceClient:
def list_groups(
self,
request=None,
*,
name: str = None,
retry=None,
timeout=None,
metadata=()
) -> pagers.ListGroupsPager:
"""
Lists the existing groups.
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 Group objects
"""
def get_group(
self,
request=None,
*,
name: str = None,
retry=None,
timeout=None,
metadata=()
) -> group.Group:
"""
Gets a single group.
Args:
request: The request object or dict equivalent
name: Required. Group name in format 'projects/[PROJECT_ID]/groups/[GROUP_ID]'
retry: Retry configuration
timeout: Request timeout in seconds
metadata: Additional metadata
Returns:
Group object
"""
def create_group(
self,
request=None,
*,
name: str = None,
group: group.Group = None,
retry=None,
timeout=None,
metadata=()
) -> group.Group:
"""
Creates a new group.
Args:
request: The request object or dict equivalent
name: Required. Project name
group: Required. The group to create
retry: Retry configuration
timeout: Request timeout in seconds
metadata: Additional metadata
Returns:
Created Group object
"""
def update_group(
self,
request=None,
*,
group: group.Group = None,
retry=None,
timeout=None,
metadata=()
) -> group.Group:
"""
Updates an existing group.
Args:
request: The request object or dict equivalent
group: Required. Updated group
retry: Retry configuration
timeout: Request timeout in seconds
metadata: Additional metadata
Returns:
Updated Group object
"""
def delete_group(
self,
request=None,
*,
name: str = None,
retry=None,
timeout=None,
metadata=()
) -> None:
"""
Deletes an existing group.
Args:
request: The request object or dict equivalent
name: Required. Group name to delete
retry: Retry configuration
timeout: Request timeout in seconds
metadata: Additional metadata
"""
def list_group_members(
self,
request=None,
*,
name: str = None,
retry=None,
timeout=None,
metadata=()
) -> pagers.ListGroupMembersPager:
"""
Lists the monitored resources that are members of a group.
Args:
request: The request object or dict equivalent
name: Required. Group name
retry: Retry configuration
timeout: Request timeout in seconds
metadata: Additional metadata
Returns:
Pager for iterating over MonitoredResource objects
"""Represents a logical group of monitored resources.
class Group:
name: str # Resource name
display_name: str # Human-readable name
parent_name: str # Parent group name
filter: str # Filter defining group membership
is_cluster: bool # Whether group represents a clusterclass CreateGroupRequest:
name: str # Required. Project name
group: Group # Required. Group to create
validate_only: bool # Only validate, don't create
class DeleteGroupRequest:
name: str # Required. Group name to delete
recursive: bool # Delete child groups recursively
class GetGroupRequest:
name: str # Required. Group name to retrieve
class ListGroupsRequest:
name: str # Required. Project name
children_of_group: str # Parent group filter
ancestors_of_group: str # Ancestor group filter
descendants_of_group: str # Descendant group filter
page_size: int # Maximum results per page
page_token: str # Page token for pagination
class ListGroupsResponse:
group: List[Group] # Groups
next_page_token: str # Token for next page
class ListGroupMembersRequest:
name: str # Required. Group name
page_size: int # Maximum results per page
page_token: str # Page token for pagination
filter: str # Additional resource filter
interval: TimeInterval # Time interval for membership
class ListGroupMembersResponse:
members: List[MonitoredResource] # Group members
next_page_token: str # Token for next page
total_size: int # Total member count
class UpdateGroupRequest:
group: Group # Required. Updated group
validate_only: bool # Only validate, don't updatefrom google.cloud.monitoring import GroupServiceClient, Group
client = GroupServiceClient()
project_name = f"projects/{project_id}"
# Create a group for production web servers
group = Group()
group.display_name = "Production Web Servers"
group.filter = 'resource.type="gce_instance" AND resource.label.env="production" AND resource.label.role="web"'
created_group = client.create_group(
name=project_name,
group=group
)
print(f"Created group: {created_group.name}")
print(f"Group filter: {created_group.filter}")# Create parent group
parent_group = Group()
parent_group.display_name = "Production Environment"
parent_group.filter = 'resource.label.env="production"'
created_parent = client.create_group(
name=project_name,
group=parent_group
)
# Create child group
child_group = Group()
child_group.display_name = "Production Databases"
child_group.parent_name = created_parent.name
child_group.filter = 'resource.type="gce_instance" AND resource.label.env="production" AND resource.label.role="database"'
created_child = client.create_group(
name=project_name,
group=child_group
)
print(f"Created child group: {created_child.name}")
print(f"Parent: {created_child.parent_name}")client = GroupServiceClient()
project_name = f"projects/{project_id}"
# List all groups
print("All groups:")
for group in client.list_groups(name=project_name):
print(f"- {group.display_name}: {group.name}")
# List child groups of a specific parent
parent_group_name = f"projects/{project_id}/groups/{parent_group_id}"
print(f"\nChildren of {parent_group_name}:")
for group in client.list_groups(name=project_name, children_of_group=parent_group_name):
print(f"- {group.display_name}")
# List ancestor groups
print(f"\nAncestors of {child_group_name}:")
for group in client.list_groups(name=project_name, ancestors_of_group=child_group_name):
print(f"- {group.display_name}")group_name = f"projects/{project_id}/groups/{group_id}"
# List all members of a group
print(f"Members of group {group_name}:")
for member in client.list_group_members(name=group_name):
print(f"- Type: {member.type}")
print(f" Labels: {dict(member.labels)}")
# List members with additional filtering
additional_filter = 'resource.label.zone="us-central1-a"'
print(f"\nMembers in zone us-central1-a:")
for member in client.list_group_members(name=group_name, filter=additional_filter):
print(f"- {member.type}: {member.labels}")# Get existing group
group_name = f"projects/{project_id}/groups/{group_id}"
group = client.get_group(name=group_name)
# Update the group
group.display_name = "Updated Production Web Servers"
group.filter = 'resource.type="gce_instance" AND resource.label.env="production" AND (resource.label.role="web" OR resource.label.role="api")'
updated_group = client.update_group(group=group)
print(f"Updated group: {updated_group.display_name}")
print(f"New filter: {updated_group.filter}")# Delete a single group
group_name = f"projects/{project_id}/groups/{group_id}"
client.delete_group(name=group_name)
print(f"Deleted group: {group_name}")
# Delete group and all children recursively
parent_group_name = f"projects/{project_id}/groups/{parent_group_id}"
client.delete_group(name=parent_group_name, recursive=True)
print(f"Deleted group and children: {parent_group_name}")# Validate group creation without actually creating
test_group = Group()
test_group.display_name = "Test Group"
test_group.filter = 'invalid_filter_expression'
try:
# This will validate the group but not create it
client.create_group(
name=project_name,
group=test_group,
validate_only=True
)
print("Group validation passed")
except Exception as e:
print(f"Group validation failed: {e}")from google.cloud.monitoring_v3.types import TimeInterval
from google.protobuf.timestamp_pb2 import Timestamp
import time
group_name = f"projects/{project_id}/groups/{group_id}"
# Define time interval for historical membership
now = time.time()
interval = TimeInterval()
interval.end_time.seconds = int(now)
interval.start_time.seconds = int(now - 3600) # 1 hour ago
# Get group membership at specific time
for member in client.list_group_members(name=group_name, interval=interval):
print(f"Historical member: {member.type}")import asyncio
from google.cloud.monitoring import GroupServiceAsyncClient
async def manage_groups():
client = GroupServiceAsyncClient()
project_name = f"projects/{project_id}"
# List groups asynchronously
async for group in await client.list_groups(name=project_name):
print(f"Async group: {group.display_name}")
# Create group asynchronously
new_group = Group()
new_group.display_name = "Async Created Group"
new_group.filter = 'resource.type="gce_instance"'
created = await client.create_group(name=project_name, group=new_group)
print(f"Async created group: {created.name}")
asyncio.run(manage_groups())class GroupServiceClient:
@staticmethod
def group_path(project: str, group: str) -> str:
"""Returns a fully-qualified group string."""
@staticmethod
def parse_group_path(path: str) -> Dict[str, str]:
"""Parses a group path into its component segments."""Group operations can raise specific exceptions:
from google.api_core import exceptions
from google.cloud.monitoring import GroupServiceClient
client = GroupServiceClient()
try:
group = client.get_group(name="invalid/path")
except exceptions.NotFound:
print("Group not found")
except exceptions.InvalidArgument as e:
print(f"Invalid group filter: {e}")
except exceptions.PermissionDenied:
print("Insufficient permissions")
except exceptions.FailedPrecondition as e:
print(f"Cannot delete group with children: {e}")Install with Tessl CLI
npx tessl i tessl/pypi-google-cloud-monitoring