удалить все лог-потоки в группе журналов с помощью aws cli
Чтобы удалить поток журнала из группы журналов с помощью команды CLI, необходимы имена отдельных журнальных потоков. Есть ли способ удалить все лог-потоки, принадлежащие группе журналов, используя одну команду?
Ответы
Ответ 1
Вы можете достичь этого, используя --query
для задания результатов --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
кредит
Ответ 2
Вот скрипт для удаления всех журналов в группе журналов с использованием 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'])
Ответ 3
Реализован скрипт с командой из ответа @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
Ответ 4
Это невозможно сделать с помощью одной команды aws Cli. Следовательно, мы достигли этого, используя скрипт, в котором мы сначала загрузили все лог-потоки группы журналов, а затем удалили их в цикле.
Ответ 5
Чтобы удалить все потоки журналов, связанные с определенной группой журналов, выполните следующую команду, заменив 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
Ответ 6
--log-group-name не является необязательным в aws cli, вы можете попробовать использовать значение * для -log-group-name (в тестовой среде)
aws logs delete-log-group --log-group-name my-logs
Ссылка URL: http://docs.aws.amazon.com/cli/latest/reference/logs/delete-log-group.html
Ответ 7
Альтернативная версия, использующая интерфейс командной строки Powershell для Windows, запустите командную строку 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, если вы не хотите подтверждать по одному.
Ссылки https://docs.aws.amazon.com/powershell/latest/reference/Index.html