Created
September 9, 2020 01:10
-
-
Save random-ua/9cf736ad41d5ec04b5fb42b71f90d5ab to your computer and use it in GitHub Desktop.
DynamoDB stats
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
PREFIX="arn:aws:dynamodb:us-east-1:$(aws sts get-caller-identity --query 'Arn' | awk -F: '{print $5}'):table" | |
tables() { | |
aws dynamodb list-tables --query 'TableNames' --output text | tr '[:space:]' "\n" | |
} | |
get_env() { | |
aws dynamodb list-tags-of-resource --resource-arn $PREFIX/$1 --query 'Tags[?Key==`env`].Value|[0]' --output text | |
} | |
get_metric() { | |
local TABLE=$1 | |
local METRIC=$2 | |
local STAT=$3 | |
local EXTRA_DIM=$4 | |
local TODAY=$(date +%F) | |
#local MONTH_AGO=$(date -j -v -1m +%F) | |
local MONTH_AGO=$(python -c 'from datetime import timedelta,datetime; print( (datetime.now()-timedelta(days=30)).strftime("%F") )') | |
aws cloudwatch get-metric-statistics --namespace AWS/DynamoDB --metric-name $METRIC --statistics $STAT \ | |
--period 2592000 --start-time $MONTH_AGO --end-time $TODAY --dimensions Name=TableName,Value=$TABLE $EXTRA_DIM \ | |
--query "Datapoints[0].$STAT" | |
} | |
for table in $(tables); do | |
env=$(get_env $table) | |
if [[ "$env" == "None" ]]; then | |
echo "Table $table has no env, skipping" >&2 | |
continue | |
fi | |
info=$(aws dynamodb describe-table --table-name $table --query 'Table.[TableSizeBytes,ItemCount]' --output text) | |
size=$(echo $info | awk '{print $1}') | |
items=$(echo $info | awk '{print $2}') | |
max_prov_rcu=$(get_metric $table ProvisionedReadCapacityUnits Maximum) | |
max_cons_rcu=$(get_metric $table ConsumedReadCapacityUnits Maximum) | |
avg_prov_rcu=$(get_metric $table ProvisionedReadCapacityUnits Average) | |
avg_cons_rcu=$(get_metric $table ConsumedReadCapacityUnits Average) | |
max_prov_wcu=$(get_metric $table ProvisionedWriteCapacityUnits Maximum) | |
max_cons_wcu=$(get_metric $table ConsumedWriteCapacityUnits Maximum) | |
avg_prov_wcu=$(get_metric $table ProvisionedWriteCapacityUnits Average) | |
avg_cons_wcu=$(get_metric $table ConsumedWriteCapacityUnits Average) | |
get_lat=$(get_metric $table SuccessfulRequestLatency Average Name=Operation,Value=GetItem) | |
put_lat=$(get_metric $table SuccessfulRequestLatency Average Name=Operation,Value=PutItem) | |
upd_lat=$(get_metric $table SuccessfulRequestLatency Average Name=Operation,Value=UpdateItem) | |
echo "$table,$env,$items,$size,$max_prov_rcu,$max_cons_rcu,$avg_prov_rcu,$avg_cons_rcu,$max_prov_wcu,$max_cons_wcu,$avg_prov_wcu,$avg_cons_wcu,$get_lat,$put_lat,$upd_lat" | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment