星期六, 2月 18, 2023

AWS Athena 使用者查詢次數小記

AWS Athena 使用者查詢次數小記


OS: openSUSE Leap 15.4


使用雲端服務, 當出帳的時候觀察帳單金額與服務用量也是很重要的事情

今天紀錄使用 aws cli 來快速查詢 Athena 使用者的查詢次數


場景: 因應 Athena 每月查詢費用可能有浮動, 所以用 aws cli 來快速統計使用者查詢次數, 來快速判斷是否跟查詢有關


說明: 當 Athena 的費用有變動的時候大多是查詢資料量造成費用的變動, 這個時候使用單位大概會有兩個疑問

  • 我的使用量與費用的對比

    • 這個可以藉由 Billing console 來進行查詢

  • 誰(使用者)進行查詢導致費用的變動



如果想要了解相關資訊, 可能會藉由下列兩個指令來進行了解

  • aws cloudtrail lookup-events

    •  query 是由哪個帳號所執行和該筆查詢的 query execution id

  • aws athena get-query-execution

    • 取得 DataScannedInBytes 的資訊


使用 aws cli 所得到的都是單一筆的結果, 如果要統計到個別使用的結果, 可能要透過撰寫程式或是 script 來進行彙總.


於是有下列 script 結合 aws cli  與 jq 來簡單統計指定區間內 Athena 使用者的查詢次數

  • 想法: 使用區間先列出使用者查詢次數, 如果符合查詢次數與費用的比例, 應該就不用進一步去統計 DataScannedInByte 的資訊


以下為初步的 script


# 使用 aws cli 指令查詢指定日期的 Athena 使用者查詢次數

# 情境: 當 Athena 費用有變動的時候, 快速用次數來判斷費用變動因素

# Edit by Max 2023/2/18


# AWS  提供參考

# 要有 jq 指令


echo ""

echo "This script will print athena query times - order username and date between"

echo "使用 aws cli 指令列出指定日期的 Athena 使用者查詢次數"

echo ""



# 設定使用帳戶

echo ""

echo "設定使用帳戶"

read -e -p "Please enter account name: " -i "default" account_name

echo ""


# 設定 Region

echo ""

echo "設定 Region"

read -e -p "Please enter region name: " -i "ap-northeast-1" region_name

echo ""


# 設定查詢起始日期

echo ""

echo "設定查詢起始日期"

read -e -p "Please enter query start date: " -i "2023-01-01" start_date

echo ""


# 設定查詢結束日期

echo ""

echo "設定查詢結束日期"

read -e -p "Please enter query end date: " -i "2023-01-31" end_date

echo ""


# 列出這段時間有查詢的使用者

echo ""

echo "建立查詢的使用者清單"

aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=StartQueryExecution --profile $account_name --region $region_name --start-time $start_date --end-time $end_date | grep Username | sort | uniq | cut -d '"' -f 4 > /tmp/athena_user

echo ""


# 列出

for i in $( cat /tmp/athena_user )

do

echo "使用者 $i 在這段時間的使用次數為:"

aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=StartQueryExecution --start-time $start_date --end-time $end_date  --profile $account_name --region $region_name | jq "[.[][] | select(.Username == \"$i\" )] | length"

echo ""

done



輸出結果參考


# sh  aws_athena_user_queryCount.sh


This script will print athena query times - order username and date between

使用 aws cli 指令列出指定日期的 Athena 使用者查詢次數


設定使用帳戶

Please enter account name: defaut



設定 Region

Please enter region name: ap-northeast-1



設定查詢起始日期

Please enter query start date: 2023-01-01



設定查詢結束日期

Please enter query end date: 2023-01-31



建立查詢的使用者清單


使用者 sakana 在這段時間的使用次數為:

1170



另外現行的 AWS 機制, 暫時好像沒有如果 Scan Data 大於多少資料量即發出告警, 希望之後能夠有相關功能 ( 許願 )


這樣下次要進行查詢就方便多了


~ enjoy it



Reference

沒有留言: