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