Skip to content

Commit 38a8796

Browse files
author
Daniel Thielking
committed
Added just a short script to automate deletion of Loggroup streams.
1 parent efd2a5e commit 38a8796

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
import boto3
2+
import argparse
3+
import logging
4+
import sys
5+
6+
parser = argparse.ArgumentParser()
7+
parser.add_argument('-p', '--profile', help='AWS Profile to use.')
8+
parser.add_argument('-l', '--log-group', help='Specify Loggroup to delete entries')
9+
parser.add_argument('-a', '--role-arn', help='Specify role arn to use.')
10+
parser.add_argument('-v', '--verbose', action='store_true', help='Increases verbosity.')
11+
args = parser.parse_args()
12+
13+
if len(sys.argv) <= 1:
14+
parser.print_help()
15+
sys.exit(0)
16+
17+
18+
def get_logger(debug=False):
19+
20+
log_level = logging.ERROR
21+
22+
if debug:
23+
log_level = logging.DEBUG
24+
25+
logging.basicConfig(
26+
level=logging.ERROR,
27+
format='%(asctime)s [%(levelname)s] %(funcName)s line %(lineno)d: %(message)s'
28+
)
29+
logger = logging.getLogger(__name__)
30+
logger.setLevel(log_level)
31+
return logger
32+
33+
34+
def main():
35+
36+
logger = get_logger(debug=args.verbose)
37+
38+
try:
39+
boto_session = boto3.Session(profile_name=args.profile.strip())
40+
sts = boto_session.client('sts')
41+
sts_response = sts.assume_role(
42+
RoleArn=args.role_arn.strip(),
43+
RoleSessionName='cloudwatch_logs_deleter'
44+
)
45+
except:
46+
logger.error('Unable to locate credentials')
47+
logger.debug('', exc_info=True)
48+
sys.exit(127)
49+
50+
try:
51+
sts_access_key = sts_response['Credentials']['AccessKeyId']
52+
sts_secret_key = sts_response['Credentials']['SecretAccessKey']
53+
sts_sec_token = sts_response['Credentials']['SessionToken']
54+
except:
55+
logger.error('AccessKeyId or SecretAccessKey not available!')
56+
logger.debug('', exc_info=True)
57+
sys.exit(127)
58+
59+
try:
60+
nextToken = None
61+
cw_logs_client = boto3.client(
62+
'logs',
63+
aws_access_key_id=sts_access_key,
64+
aws_secret_access_key=sts_secret_key,
65+
aws_session_token=sts_sec_token
66+
)
67+
68+
log_stream_names = list()
69+
70+
while True:
71+
if nextToken:
72+
log_streams = cw_logs_client.describe_log_streams(
73+
logGroupName=args.log_group.strip(),
74+
nextToken=nextToken
75+
)
76+
else:
77+
log_streams = cw_logs_client.describe_log_streams(
78+
logGroupName=args.log_group.strip()
79+
)
80+
81+
if 'nextToken' in log_streams:
82+
nextToken = log_streams['nextToken']
83+
else:
84+
nextToken = None
85+
86+
for i in log_streams['logStreams']:
87+
log_stream_names.append(i['logStreamName'])
88+
89+
if not nextToken:
90+
break
91+
92+
for log_stream_name in log_stream_names:
93+
resp = cw_logs_client.delete_log_stream(
94+
logGroupName=args.log_group.strip(),
95+
logStreamName=log_stream_name
96+
)
97+
98+
if resp['ResponseMetadata']['HTTPStatusCode'] == 200:
99+
print('Deletion successfull LogstreamName: {}'.format(log_stream_name))
100+
else:
101+
logger.error(resp)
102+
103+
except:
104+
logger.error('Error in deleting logs from loggroup.')
105+
logger.debug('', exc_info=True)
106+
sys.exit(127)
107+
108+
if __name__ == '__main__':
109+
main()

0 commit comments

Comments
 (0)