agent: |
h2ozXNRKuV8VsHandh8wList all AWS CloudWatch Log Streams
List all AWS CloudWatch Log Streams
There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.
This task is designed to systematically retrieve and enumerate all CloudWatch log streams present in specified AWS regions. It offers a detailed snapshot of the existing log streams, enabling users to understand their logging landscape across various AWS services and applications.
inputs
outputs
import boto3
creds = _get_creds(cred_label)['creds']
access_key = creds['username']
secret_key = creds['password']
def fetch_log_streams(client, region):
log_streams_info = []
#print(f"\nFetching log streams for region: {region}...")
log_groups = client.describe_log_groups()
if not log_groups.get('logGroups'):
#print(f"No log groups or streams found in region: {region}.")
return log_streams_info
for log_group in log_groups['logGroups']:
log_group_name = log_group['logGroupName']
log_streams = client.describe_log_streams(logGroupName=log_group_name)
for stream in log_streams.get('logStreams', []):
#print(f"Region: {region}, Log Group: {log_group_name}, Log Stream: {stream['logStreamName']}")
# Append the information to log_streams_info
log_streams_info.append({
'region': region,
'log_group': log_group_name,
'log_stream': stream['logStreamName']
})
return log_streams_info
def list_all_log_streams(region=None):
log_streams_info = [] # To store log streams information for all regions
try:
# Create an initial client to fetch regions if no specific region is provided
ec2_client = boto3.client('ec2', aws_access_key_id=access_key, aws_secret_access_key=secret_key, region_name='us-east-1')
if region:
regions = [region]
else:
regions = [region['RegionName'] for region in ec2_client.describe_regions()['Regions']]
for specific_region in regions:
client = boto3.client('logs', aws_access_key_id=access_key, aws_secret_access_key=secret_key, region_name=specific_region)
region_log_streams = fetch_log_streams(client, specific_region)
log_streams_info.extend(region_log_streams)
except boto3.exceptions.Boto3Error as e:
print(f"An error occurred while accessing AWS: {e}")
except Exception as e:
print(f"An unexpected error occurred: {e}")
return log_streams_info
def display_log_streams(data):
# Initialize table with the desired structure and headers
table = context.newtable()
table.title = "AWS Log Streams Data"
table.num_cols = 3 # Number of columns for Region, Log Group, and Log Stream
table.num_rows = 1 # Starts with one row for headers
table.has_header_row = True
# Define header names
headers = ["Region", "Log Group", "Log Stream"]
# Set headers in the first row
for col_num, header in enumerate(headers):
table.setval(0, col_num, header)
# Sort the log stream data by region for better readability
data.sort(key=lambda x: x["region"])
# Populate the table with log stream data
for row_num, entry in enumerate(data, start=1): # Starting from the second row
table.num_rows += 1 # Add a row for each log stream entry
values = [entry["region"], entry["log_group"], entry["log_stream"]]
for col_num, value in enumerate(values):
table.setval(row_num, col_num, value)
# Main block
target_region = None # hardcoded for one time result
log_streams_data = list_all_log_streams(target_region) # Pass the name of region as a string to search for that specific region otherwise it runs for all regions
#print("\nCompleted fetching log streams data.")
# Uncomment the line below if you want to see the returned data structure
# print(log_streams_data)
display_log_streams(log_streams_data)
copied