⛳
AWS Step Functions の実行ログをCSVに出して、実行時間を見える化してみた話
最近 AWS Step Functions の実行ログを分析する機会があり、「直近〇日分のログを CSV に出して、実行時間も見えるようにしたい!」と思って調べてみました。
が、やってみて分かったことがいくつか。
まず前提として知っておきたいこと
✅ Step Functions には CSV ダウンロード機能がない
マネジメントコンソールからも、「CSVでエクスポート」みたいなボタンは存在しません。
実行ログをエクスポートしたい場合は、自分で CLI や SDK を使って取得する必要があります。
✅ CLI/APIでは「実行時間」は取得できない
startDate
と stopDate
は取得できますが、実行時間(duration)は返ってきません。
つまり、自分で stopDate - startDate
を計算する必要があります。
やりたいこと
- 特定の Step Functions の実行履歴を直近60日分取得
- 開始・終了時間を JST(日本時間)に変換
- 実行時間を秒で計算して CSV に
- 最後は Excel で見やすく表示!
やったこと(コマンド)
以下のスクリプトで実現できます。
STATE_MACHINE_ARN="arn:aws:states:ap-northeast-1:1111111111:stateMachine:example-tate-machine"
START_DATE=$(date -d "60 days ago" --utc +%Y-%m-%dT%H:%M:%SZ)
aws stepfunctions list-executions \
--state-machine-arn "$STATE_MACHINE_ARN" \
--status-filter "SUCCEEDED" \
--query "executions[?startDate>='$START_DATE'].[executionArn, status, startDate, stopDate]" \
--output json | jq -r '.[] | @csv' | awk -F, '{
gsub(/"/, "", $0);
if (NR == 1) {
print "executionArn,status,startDate(JST),stopDate(JST),duration_seconds"
} else {
start=$3;
stop=$4;
start_jst = strftime("%Y-%m-%d %H:%M:%S", mktime(gensub(/[-T:Z]/, " ", "g", start)) + 9*3600);
stop_jst = strftime("%Y-%m-%d %H:%M:%S", mktime(gensub(/[-T:Z]/, " ", "g", stop)) + 9*3600);
duration = mktime(gensub(/[-T:Z]/, " ", "g", stop)) - mktime(gensub(/[-T:Z]/, " ", "g", start));
print $1 "," $2 "," start_jst "," stop_jst "," duration
}
}' > executions.csv
Excelで「実行時間」を見やすく表示
CSV を Excel で開いたら、実行時間の秒数をわかりやすい時間形式に変換しましょう。
おすすめの関数はこちら:
=TEXT(F2/86400, "hh:mm:ss.000")
※ F2
は duration_seconds
のセルです
出力イメージ
executionArn | status | startDate(JST) | stopDate(JST) | duration_seconds | duration_formatted |
---|---|---|---|---|---|
arn:〜 | SUCCEEDED | 2025-04-10 10:00:00 | 2025-04-10 10:05:20 | 320 | 00:05:20.000 |
Step Functions の実行時間がひと目で分かると、運用や分析がグッとやりやすくなります。
まとめ
- Step Functions のログは そのままでは CSV 出力できない
- CLI/API では duration(実行時間)は取得できない
- でも
startDate
とstopDate
があれば、自力でCSVにして分析は可能! - CLIでdurationのフォーマットまで出来てれば良いけど、それは後で見直します
CloudWatch Logs まで見に行かなくても、サクッと確認したいときはこの方法が便利です👍
Discussion