使用aws cli删除日志组的所有日志流

akh*_*ila 18 amazon-web-services amazon-cloudwatch aws-cli

要使用CLI命令从日志组中删除日志流,需要单独的日志流名称.有没有办法使用单个命令删除属于日志组的所有日志流?

Ste*_*hen 23

你可以通过使用--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

信用


小智 8

要删除与特定日志组关联的所有日志流,请运行以下命令,将 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
Run Code Online (Sandbox Code Playgroud)


Wil*_*eys 7

这是使用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'])
Run Code Online (Sandbox Code Playgroud)


Ger*_*ich 6

用@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
Run Code Online (Sandbox Code Playgroud)

Github链接


Aty*_*Aty 0

--log-group-name 在 aws cli 中不是可选的,您可以尝试使用 * 作为 --log-group-name 值(在测试环境中)

aws 日志 delete-log-group --log-group-name my-logs

参考网址: http://docs.aws.amazon.com/cli/latest/reference/logs/delete-log-group.html