2017-06-05 81 views
0

我有一個很長的cloudwatch日誌組列表,我需要刪除....像接近一百。既然你必須一次刪除它們,我認爲一個小小的Python腳本可以幫助我,但現在我卡住了。批量刪除使用Boto3的Cloudwatch日誌組 - delete_log_group

,這裏是我的腳本到目前爲止...

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

如何採取「logGroupName」的值在我和它轉換爲字符串的delete_log_group命令可以使用和遍歷刪除所有的我的日誌組需要消失? 我嘗試使用json.loads,它具有以下...

回溯(最近通話最後一個)出錯了: 文件 「CWLogCleaner.py」 18行,在 file_parsed = json.loads(F ) 文件「/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/ init .py」,第339行,載入中 return _default_decoder .decode(S) 文件 「/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py」,364行,在解碼 obj,end = self.raw_decode(s,idx = _w(s,0).end())

或者我完全去錯誤的方式嗎?

TIA

回答

0

除非你特別需要保存JSON響應到磁盤用於其他目的,或許你可以簡單地使用這個代碼的一些變種:

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

關閉,但我不是希望刪除所有日誌...只是那些與給定前綴開頭。它給了我一些工作。謝謝 我發佈了最終結果,以防其他人想要使用它。 – TheRedSeth

+0

是的,我提供的框架假設你會添加過濾。請注意,您的API調用可能會受到速率限制,因此請準備好處理該問題 - awscli內置了指數回退,但您可能需要對其進行補充。 – jarmod

0

繼承人我得到了什麼工作對我來說。我敢肯定,這是hackey和IM沒有開發者,但它的工作對我來說...

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