CloudWatch
必要に応じて事前に指定
export AWS_PROFILE=dev
export AWS_REGION=ap-northeast-1
CloudWatch Logs
ロググループ一覧
# 一覧取得
aws logs describe-log-groups
ログストリーム一覧
# 確認したいlogGroupNameを指定
log_group_name="/aws/lambda/my-function"
# 取得
aws logs describe-log-streams \
--log-group-name $log_group_name
InsightsをCLIで実行
最小構成
# 確認したいlogGroupNameを指定
log_group_name="/aws/lambda/my-function"
# カラマデの指定(UNIXエポック秒) 直近24時間例
start_time=$(date -d "1 day ago" +%s)
end_time=$(date +%s)
# クエリを作成
query='
fields @timestamp, @message
| sort @timestamp asc
| limit 100
'
# クエリの実行
query_id=$(aws logs start-query \
--start-time $start_time \
--end-time $end_time \
--log-group-name $log_group_name \
--query-string "$query" \
--query 'queryId' --output text)
# クエリの取得(json)
aws logs get-query-results --query-id $query_id
# クエリの取得(jqでtsv形式に変換しファイルへ)
jq_filter='.results[]| (map({(.field): .value}) | add)| [.["@timestamp"], .["@message"]]| @tsv'
aws logs get-query-results --query-id $query_id | jq -r "$jq_filter" > ${log_group_name//\//_}_$(date -d "@$start_time" "+%Y%m%d-%H%M%S")_$(date -d "@$end_time" "+%Y%m%d-%H%M%S")_$query_id.tsv
# クエリの取得(jqでcsv形式に変換しファイルへ)
jq_filter='.results[]| (map({(.field): .value}) | add)| [.["@timestamp"], .["@message"]]| @csv'
aws logs get-query-results --query-id $query_id | jq -r "$jq_filter" > ${log_group_name//\//_}_$(date -d "@$start_time" "+%Y%m%d-%H%M%S")_$(date -d "@$end_time" "+%Y%m%d-%H%M%S")_$query_id.csv
時間指定サンプル
# 特定の日付(例:2025-01-01 00:00〜)
start_time=$(date -d "2025-01-01 00:00" +%s)
end_time=$(date -d "2025-01-01 23:59:59" +%s)
# 直近10分
start_time=$(date -d "10 minutes ago" +%s)
end_time=$(date +%s)
# 直近1時間
start_time=$(date -d "1 hour ago" +%s)
end_time=$(date +%s)
# 直近1日
start_time=$(date -d "1 day ago" +%s)
end_time=$(date +%s)
# 今日の 00:00:00 から現在まで
start_time=$(date -d "yesterday 00:00" +%s)
end_time=$(date -d "yesterday 23:59:59" +%s)
# 昨日の 00:00:00 〜 23:59:59
start_time=$(date -d "yesterday 00:00" +%s)
end_time=$(date -d "yesterday 23:59:59" +%s)
クエリサンプル
# ERRORを含むログ
query="
fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp asc
| limit 1000
"