Skip to content

Instantly share code, notes, and snippets.

@dlanner
Last active May 3, 2019 19:53
Show Gist options
  • Select an option

  • Save dlanner/fa6cea5667de33ca8f5f77414f2cc4ce to your computer and use it in GitHub Desktop.

Select an option

Save dlanner/fa6cea5667de33ca8f5f77414f2cc4ce to your computer and use it in GitHub Desktop.
Scripts to clean CloudWatch logs
#!/bin/bash
aws logs describe-log-groups > log_groups.json
LOG_GROUPS=$(ruby -r json -e 'puts JSON.parse(File.read("./log_groups.json"))["logGroups"].map { |log_group| log_group["logGroupName"] }')
for log_group in $LOG_GROUPS; do
aws logs describe-log-streams --log-group-name ${log_group} > log_streams.json
IS_EMPTY_LOG_GROUP=$(ruby -r json -e 'puts JSON.parse(File.read("./log_streams.json"))["logStreams"].length == 0')
if [ "${IS_EMPTY_LOG_GROUP}" == "true" ]; then
echo "Deleting empty log group ${log_group}"
aws logs delete-log-group --log-group-name ${log_group}
else
echo "Keeping in-use log group ${log_group}"
fi
done
#!/bin/bash
aws logs describe-log-groups > log_groups.json
LOG_GROUPS=$(ruby -r json -e 'puts JSON.parse(File.read("./log_groups.json"))["logGroups"].map { |log_group| log_group["logGroupName"] }')
for log_group in $LOG_GROUPS; do
echo "log_group: ${log_group}"
aws logs describe-log-streams --log-group-name ${log_group} > log_streams.json
LOG_STREAMS_TO_KEEP=$(ruby -r json -e 'puts JSON.parse(File.read("./log_streams.json"))["logStreams"].select { |log_stream| log_stream["lastEventTimestamp"] && log_stream["lastEventTimestamp"] >= (Time.now.to_i - 60*60*24*14)*1000 }.map { |log_stream| log_stream["logStreamName"] }')
NUM_LOG_STREAMS_TO_KEEP=$(echo ${LOG_STREAMS_TO_KEEP} | wc -w)
echo "Number of log streams to keep: ${NUM_LOG_STREAMS_TO_KEEP}"
EMPTY_LOG_STREAMS=$(ruby -r json -e 'puts JSON.parse(File.read("./log_streams.json"))["logStreams"].select { |log_stream| !log_stream["lastEventTimestamp"] || log_stream["lastEventTimestamp"] < (Time.now.to_i - 60*60*24*14)*1000 }.map { |log_stream| log_stream["logStreamName"] }')
NUM_EMPTY_LOG_STREAMS=$(echo ${EMPTY_LOG_STREAMS} | wc -w)
echo "Number of empty log streams to delete: ${NUM_EMPTY_LOG_STREAMS}"
for log_stream in $EMPTY_LOG_STREAMS; do
echo "Deleting empty log stream ${log_stream} in log group ${log_group}"
aws logs delete-log-stream --log-group-name $log_group --log-stream-name $log_stream
done
done
#!/bin/bash
aws logs describe-log-groups > log_groups.json
LOG_GROUPS=$(ruby -r json -e 'puts JSON.parse(File.read("./log_groups.json"))["logGroups"].map { |log_group| log_group["logGroupName"] }')
for log_group in $LOG_GROUPS; do
echo "Setting log retention policy for ${log_group} to 14 days"
aws logs put-retention-policy --log-group-name "${log_group}" --retention-in-days 14
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment