Masse löschen Cloudwatch-log-Gruppen mit Boto3 – delete_log_group

Ich habe eine ziemlich lange Liste von cloudwatch-log-Gruppen, die ich löschen müssen….wie nahe hundert. Da haben Sie, um Sie zu löschen ein zu einer Zeit dachte ich, ein kleines python-Skript könntest mir helfen, aber jetzt bin ich stecken.

hier ist mein Skript so weit…

import boto3
from botocore.exceptions import ClientError
import json

#Connect to AWS using default AWS credentials in awscli config
cwlogs = boto3.client('logs')

loglist = cwlogs.describe_log_groups(
    logGroupNamePrefix='/aws/lambda/staging-east1-'
)

#writes json output to file...
with open('loglist.json', 'w') as outfile:
    json.dump(loglist, outfile, ensure_ascii=False, indent=4, 
sort_keys=True)

#Opens file and searches through to find given loggroup name
with open("loglist.json") as f:
    file_parsed = json.load(f)

for i in file_parsed['logGroups']:
    print i['logGroupName']


#   cwlogs.delete_log_group(
#       logGroupName='string'   <---here is where im stuck
#   )

Wie nehme ich den Wert von ‚logGroupName‘ in i und wandelt es in eine Zeichenfolge, die die delete_log_group Befehl verwenden können, und Durchlaufen zum löschen aller meiner log-Gruppen muss ich Weg sein?
Ich habe versucht, mithilfe von json.Lasten und es errored out mit den folgenden…

Traceback (most recent call last):
Datei „CWLogCleaner.py“, line 18, in
file_parsed = json.Belastung(f)
Datei „/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/init.py“, line 339, in Lasten
zurück _default_decoder.decode(s)
Datei „/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py“, Zeile 364, in decode
obj, Ende = self.raw_decode(s, idx=_w(s, 0).end())

Oder bin ich Total über dieses der falsche Weg ist?

TIA

InformationsquelleAutor TheRedSeth | 2017-06-05



2 Replies
  1. 2

    Sofern Sie nicht explizit speichern müssen, die JSON-Antworten auf die Festplatte für einen anderen Zweck, vielleicht könnten Sie einfach ein paar Variante dieser code:

    import boto3
    
    # --------------------------------------------------------------
    # Delete all CloudWatch log streams.
    # --------------------------------------------------------------
    def delete_log_streams():
        next_token = None
        logs = boto3.client('logs')
        log_groups = logs.describe_log_groups()
    
        for log_group in log_groups['logGroups']:
            log_group_name = log_group['logGroupName']
            print("Delete log group:", log_group_name)
    
            while True:
                if next_token:
                    log_streams = logs.describe_log_streams(logGroupName=log_group_name,
                                                            nextToken=next_token)
                else:
                    log_streams = logs.describe_log_streams(logGroupName=log_group_name)
    
                next_token = log_streams.get('nextToken', None)
    
                for stream in log_streams['logStreams']:
                    log_stream_name = stream['logStreamName']
                    print("Delete log stream:", log_stream_name)
                    # delete_log_stream(log_group_name, log_stream_name, logs)
    
                if not next_token or len(log_streams['logStreams']) == 0:
                    break
    • In der Nähe, aber ich bin nicht auf der Suche, um zu löschen ALLE Protokolle…nur diejenigen, die beginnen mit dem Präfix gegeben. Es gibt mir etwas zu arbeiten, wenn. Dank der Kranke nach, was ich am Ende mit, wenn jemand anderes es benutzen möchte.
    • Jup, ich war den Rahmen bilden, vorausgesetzt, dass Sie möchte hinzufügen, die Filterung. Beachten Sie, dass Sie Ihre API-Aufrufe werden kann, rate-begrenzt, so vorbereitet sein, dass – die awscli hat eingebaute exponential backoff, aber Sie können gegebenenfalls zu ergänzen.
  2. 1

    Heres was ich habe, für mich zu arbeiten. Ich bin sicher, dies ist hackey und ich bin keine Entwickler, aber es funktionierte für mich…

    cwlogs = boto3.client('logs')
    
    loglist = cwlogs.describe_log_groups(
        logGroupNamePrefix='ENTER NAME OF YOUR LOG GROUP HERE'
    )
    
    #writes json output to file...
    with open('loglist.json', 'w') as outfile:
        json.dump(loglist, outfile, ensure_ascii=False, indent=4, 
    sort_keys=True)
    
    #Opens file and searches through to find given loggroup name
    with open("loglist.json") as f:
        file_parsed = json.load(f)
    
    for i in file_parsed['logGroups']:
        print i['logGroupName']
    
    for i in file_parsed['logGroups']:
        cwlogs.delete_log_group(
            logGroupName=(i['logGroupName'])
        )

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.