Skip to content

Instantly share code, notes, and snippets.

@devtin
Last active August 4, 2022 13:50
Show Gist options
  • Save devtin/851a92a7579a2b90107756bc96350ce2 to your computer and use it in GitHub Desktop.
Save devtin/851a92a7579a2b90107756bc96350ce2 to your computer and use it in GitHub Desktop.
download entire aws cloudwatch log
#!/bin/bash
# THIS SCRIPT DEPENDS ON:
# aws cli: https://aws.amazon.com/cli/
# jq https://stedolan.github.io/jq/ | $ brew install jq
i=0
NEXT_ID=""
GROUP_NAME="/aws/lambda/prod-some-service"
STREAM_NAME="2022/08/03/[\$LATEST]some-id"
while [ true ]
do
if [ "$NEXT_ID" != "" ]; then
$(aws logs get-log-events \
--log-group-name $GROUP_NAME \
--log-stream-name $STREAM_NAME \
--start-from-head \
--next-token $NEXT_ID \
> log-$i.json)
else
$(aws logs get-log-events \
--log-group-name $GROUP_NAME \
--log-stream-name $STREAM_NAME \
--start-from-head \
> log-$i.json)
fi
NEXT_ID=$(cat log-$i.json | jq -r '.nextForwardToken')
EVENTS=$(cat log-$i.json | jq -r '.events | length')
echo "batch #$(( $i + 1)) done!"
echo "next_id: $NEXT_ID\n"
# even when $EVENTS == 0, for some reason aws returns a $NEXT_ID
if [ "$NEXT_ID" == "" ] | [ "$EVENTS" == "0" ]; then
unlink log-$i.json
break
fi
i=$((i + 1))
done
echo "done"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment