2017-06-05 4 views
0

J'ai une assez longue liste de groupes de journaux cloudwatch que j'ai besoin de supprimer .... comme près d'une centaine. Puisque vous devez les supprimer un à la fois, j'ai pensé qu'un petit script python pourrait m'aider, mais maintenant je suis bloqué.Mass supprimer groupes de journaux Cloudwatch en utilisant Boto3 - delete_log_group

voici mon script jusqu'à présent ...

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

Comment puis-je prendre la valeur de « logGroupName » en i et le convertir en une chaîne que la commande delete_log_group peut utiliser et itérer pour supprimer tous mes groupes de journaux, je dois être parti? Je essayé d'utiliser json.loads et Errored avec ce qui suit ...

retraçage (appel le plus récent en dernier): Fichier "CWLogCleaner.py", ligne 18, dans file_parsed = json.loads (f) Fichier "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/ init .py", ligne 339, dans les charges return _default_decoder .decode (s) Fichier "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", ligne 364, en mode de décodage obj, end = self.raw_decode (s, idx = _w (s, 0) .end())Ou est-ce que je vais totalement à propos de cela dans le mauvais sens?

TIA

Répondre

0

Sauf si vous avez besoin spécifiquement pour enregistrer les réponses JSON sur le disque dans un autre but, vous pourriez peut-être tout simplement utiliser une variante de ce 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 
+0

Fermer mais je ne cherche pas à supprimer tous les journaux ... juste ceux qui commencent par le préfixe donné. Cela me donne cependant quelque chose à travailler. Merci Je vais poster ce que je finirai avec si quelqu'un d'autre veut l'utiliser. – TheRedSeth

+0

Ouais, je fournissais le cadre en supposant que vous ajouteriez le filtrage. Notez que vos appels d'API peuvent être limités, alors préparez-vous à y faire face - l'awscli dispose d'un back-end exponentiel intégré, mais vous devrez peut-être le compléter. – jarmod

0

Heres ce que je me suis à travailler pour moi . Je suis sûr que c'est hackey et je ne suis pas développeur, mais cela a fonctionné pour moi ...

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']) 
    )