web-dev-qa-db-ja.com

aws cliを使用してロググループのすべてのログストリームを削除する

CLIコマンドを使用してロググループからログストリームを削除するには、個々のログストリーム名が必要です。単一のコマンドを使用して、ロググループに属するすべてのログストリームを削除する方法はありますか?

18
akhila

これは、_--query_を使用して_describe-log-streams_の結果をターゲットにすることで実現できます。これにより、ループして結果を削除できます。

_aws logs describe-log-streams --log-group-name $LOG_GROUP_NAME --query 'logStreams[*].logStreamName' --output table | awk '{print $2}' | grep -v ^$ | while read x; do aws logs delete-log-stream --log-group-name $LOG_GROUP_NAME --log-stream-name $x; done_

_--query_を使用して、すべてまたは特定のグループまたはストリームをターゲットにできます。

特定の月からストリームを削除する

aws logs describe-log-streams --log-group-name $LOG_GROUP --query 'logStreams[?starts_with(logStreamName,`2017/07`)].logStreamName' --output table | awk '{print $2}' | grep -v ^$ | while read x; do aws logs delete-log-stream --log-group-name $LOG_GROUP --log-stream-name $x; done

すべてのロググループを削除-警告、すべてを削除します!

_aws logs describe-log-groups --query 'logGroups[*].logGroupName' --output table | awk '{print $2}' | grep -v ^$ | while read x; do aws logs delete-log-group --log-group-name $x; done_

特定のロググループの消去

aws logs describe-log-groups --query 'logGroups[?starts_with(logGroupName,`$LOG_GROUP_NAME`)].logGroupName' --output table | awk '{print $2}' | grep -v ^$ | while read x; do aws logs delete-log-group --log-group-name $x; done

クレジット

21
Stephen

Pythonを使用してロググループ内のすべてのログを削除するスクリプトを次に示します。 logGroupNameをlogGroupに一致するように変更するだけです。

import boto3

client = boto3.client('logs')

response = client.describe_log_streams(
    logGroupName='/aws/batch/job'
)


def delete_stream(stream):
    delete_response = client.delete_log_stream(
        logGroupName='/aws/batch/job',
        logStreamName=stream['logStreamName']
    )

    print(delete_response)


results = map(lambda x: delete_stream(x), response['logStreams'])
7
Will Humphreys

@Stephenの回答からのコマンドでスクリプトを実装しました。このスクリプトは、削除前に要約を表示し、削除の進行状況を追跡します。

#!/usr/bin/env bash

LOG_GROUP_NAME=${1:?log group name is not set}

echo Getting stream names...
LOG_STREAMS=$(
    aws logs describe-log-streams \
        --log-group-name ${LOG_GROUP_NAME} \
        --query 'logStreams[*].logStreamName' \
        --output table |
        awk '{print $2}' |
        grep -v ^$ |
        grep -v DescribeLogStreams
)

echo These streams will be deleted:
printf "${LOG_STREAMS}\n"
echo Total $(wc -l <<<"${LOG_STREAMS}") streams
echo

while true; do
    read -p "Prceed? " yn
    case $yn in
    [Yy]*) break ;;
    [Nn]*) exit ;;
    *) echo "Please answer yes or no." ;;
    esac
done

for name in ${LOG_STREAMS}; do
    printf "Delete stream ${name}... "
    aws logs delete-log-stream --log-group-name ${LOG_GROUP_NAME} --log-stream-name ${name} && echo OK || echo Fail
done

Githubリンク

6

特定のロググループに関連付けられているすべてのログストリームを削除するには、次のコマンドを実行して、NAME_OF_LOG_GROUPをグループに置き換えます。

aws logs describe-log-streams --log-group-name NAME_OF_LOG_GROUP --output text | awk '{print $7}' | while read x; 
do aws logs delete-log-stream --log-group-name NAME_OF_LOG_GROUP --log-stream-name $x
done
4
Caleb Clark

これは、単一のaws Cliコマンドを使用して行うことはできません。したがって、最初にロググループのすべてのログストリームを取得してからループで削除するスクリプトを使用して、これを実現しました。

2
akhila

--log-group-nameはaws cliではオプションではありません。--log-group-name値に*を使用してみてください(テスト環境で)

aWSログdelete-log-group --log-group-name my-logs

参照URL: http://docs.aws.Amazon.com/cli/latest/reference/logs/delete-log-group.html

1
Aty

WindowsでPowershell CLIを使用する代替バージョンで、powershellコマンドラインを起動して使用します。

$LOG_GROUP_NAME="cloud-watch-group-name";
$LOG_STREAM_NAMEP="cloud-watch-log-stream-name";

Set-DefaultAWSRegion -Region us-your-regions;
Set-AWSCredential -AccessKey ACCESSKEYEXAMPLE -SecretKey sEcReTKey/EXamPLE/xxxddddEXAMPLEKEY -StoreAs MyProfileName

Get-CWLLogStream -loggroupname $LOG_GROUP_NAME -logstreamnameprefix $LOG_GROUP_NAMEP | Remove-CWLLogStream -LogGroupName $LOG_GROUP_NAME;

-Forceパラメーターを使用することができますRemove-CWLogStreamコマンドレット1つずつ確認する必要はありません。

参照 https://docs.aws.Amazon.com/powershell/latest/reference/Index.html

0
Rafael Gorski