CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-google-cloud-monitoring

Google Cloud Monitoring API client library for collecting, analyzing, and alerting on metrics, events, and metadata from cloud and on-premise sources.

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

groups.mddocs/

Resource Group Management

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.

Capabilities

Group Operations

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
        """

Data Types

Group

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 cluster

Request and Response Types

class 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 update

Usage Examples

Creating a Resource Group

from 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}")

Creating Hierarchical Groups

# 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}")

Listing Groups with Filtering

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}")

Listing Group Members

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}")

Updating a Group

# 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}")

Deleting Groups

# 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}")

Validation-Only Operations

# 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}")

Working with Group Membership over Time

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}")

Async Group Operations

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())

Resource Path Helpers

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."""

Error Handling

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

docs

alert-policies.md

groups.md

index.md

metrics.md

notifications.md

services.md

snooze.md

uptime-checks.md

tile.json