Untitled

 avatar
unknown
plain_text
6 months ago
2.7 kB
2
Indexable
'''
adjust_cloudwatch_retention.py
Ally Jade Veil
written for DEVOPS-22952

About:

    This script adjusts the retention policy of specified CloudWatch log groups.

Usage:

    adjust_cloudwatch_retention.py [--days DAYS] [--log-group LOG_GROUP]

    --days:
        Type: int
        Default: 365
        Description: Number of days to retain log events. Log events older than this number of days will be purged.
        Example: --days 7

    --log-group:
        Type: str
        Default: all
        Description: The name of the CloudWatch log group to adjust. If set to 'all', the script will adjust all log groups.
        Example: --log-group my-log-group
'''

# Imports

import argparse
import boto3

# Functions

def adjust_log_group_retention(logs_client, log_group_name, retention_days):
    """
    Adjust the retention policy for the specified CloudWatch log group.
    """

    try:
        logs_client.put_retention_policy(
            logGroupName=log_group_name,
            retentionInDays=retention_days
        )
        print(f"Adjusted retention policy of log group '{log_group_name}' to {retention_days} days.")
    except Exception as e:
        print(f"Error adjusting retention policy for log group '{log_group_name}': {e}")

def get_enabled_regions():
    """
    Get the list of enabled regions for the AWS account.
    """

    ec2_client = boto3.client('ec2')
    response = ec2_client.describe_regions(AllRegions=False)
    enabled_regions = [region['RegionName'] for region in response['Regions']]
    return enabled_regions

# Main

# Argument parsing
parser = argparse.ArgumentParser(
    description='Adjust CloudWatch log group retention and purge old log events.'
)
parser.add_argument(
    '--days',
    type=int,
    default=365,
    help='Number of days to retain log events. Default is 365.'
)
parser.add_argument(
    '--log-group',
    type=str,
    default='all',
    help='The name of the CloudWatch log group to adjust. Default is all.'
)
args = parser.parse_args()
log_group_name = args.log_group
retention_days = args.days

# Iterate through all enabled regions and check CloudWatch log streams in each
regions = get_enabled_regions()
for region in regions:
    logs_client = boto3.client('logs', region_name = region)
    if log_group_name == 'all':
        log_groups = logs_client.describe_log_groups()['logGroups']
        for log_group in log_groups:
            group_name = log_group['logGroupName']
            adjust_log_group_retention(logs_client, group_name, retention_days)
    else:
        adjust_log_group_retention(logs_client, log_group_name, retention_days)

print("\nLog group retention adjustment complete.")
Editor is loading...
Leave a Comment