web-dev-qa-db-fra.com

supprimer tous les flux de journaux d'un groupe de journaux à l'aide de aws cli

Afin de supprimer un flux de journal d'un groupe de journaux à l'aide de la commande CLI, des noms de flux de journaux individuels sont nécessaires . Existe-t-il un moyen de supprimer tous les flux de journaux appartenant à un groupe de journaux à l'aide d'une seule commande?

14
akhila

Vous pouvez y parvenir en utilisant --query pour cibler les résultats de describe-log-streams. Cela vous permet de parcourir et d’effacer les résultats.

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

Vous pouvez utiliser --query pour cibler tous ou des groupes ou des flux spécifiques.

Supprimer les flux d'un mois spécifique

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

Supprimer tous les groupes de journaux - Attention, cela supprime TOUT!

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

Effacement de groupes de journaux spécifiques

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

Crédit

14
Stephen

Voici Script pour supprimer tous les journaux d'un groupe de journaux à l'aide de python. Il suffit de changer la logGroupName pour qu'elle corresponde à votre 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'])
4
Will Humphreys

Script implémenté avec la commande de la réponse de @ Stephen. Le script affiche un résumé avant la suppression et suit l'avancement de la suppression.

#!/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

Lien Github

4
German Lashevich

Pour supprimer tous les flux de journal associés à un groupe de journaux spécifique, exécutez la commande suivante en remplaçant NAME_OF_LOG_GROUP par votre groupe:

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
2
Caleb Clark

Cela ne peut pas être fait avec une seule commande aws Cli. Nous avons donc réalisé cela à l'aide d'un script dans lequel nous avons d'abord extrait tous les flux de journaux d'un groupe de journaux, puis les avons supprimés en boucle.

2
akhila

--log-nom-groupe n'est pas facultatif dans aws cli, vous pouvez essayer d'utiliser une valeur * pour --log-nom-groupe (dans l'environnement de test)

aws enregistre le groupe de suppression - le nom de groupe du groupe

URL de référence: http://docs.aws.Amazon.com/cli/latest/reference/logs/delete-log-group.html

1
Aty

Une version alternative utilisant Powershell CLI sous Windows, lancez la ligne de commande powershell et utilisez:

$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;

Vous pouvez utiliser le paramètre -Force sur la cmdlet Remove-CWLogStream au cas où vous ne voudriez pas confirmer un par un.

Références https://docs.aws.Amazon.com/powershell/latest/reference/Index.html

0
Rafael Gorski