CloudWatch Logs Insights の新機能「estimate」の推定スキャン量と実測値を比べてみた
はじめに
2026年9月29日、CloudWatch Logs Insights にクエリのスキャン量を実行前に見積もる estimate コマンドが追加されました。
estimate クエリ自体には Logs Insights の料金はかからず、全商用リージョンで利用できます。
この記事では、estimate が返す推定スキャン量と実測値を比べ、クエリ実行前の確認手順として使えるかを確かめます。
コンソールでのスキャン量確認
マネジメントコンソールでは、クエリに estimate を書かなくても、クエリエディタの下部に「Estimated bytes scanned」として推定スキャン量が表示されます。Run を押す前に、時間範囲を変えながらスキャン量を確認できます。
同じクエリで、時間範囲だけを 5分・1時間・12時間と変えました。
5分:

1時間:

12時間:

推定スキャン量は 212.2 KB・3.2 MB・31.6 MB と増えました。
CLI でのスキャン量確認
estimate は start-query の --query-string に渡します。--query-string "estimate" のように estimate だけを渡すと、指定したロググループと時間範囲の全データが対象になります。
aws logs start-query \
--log-group-names \
"/aws/lambda/function-a" \
"/aws/lambda/function-b" \
"/aws/ecs/service-a" \
--start-time $(date -d '30 days ago' +%s) \
--end-time $(date +%s) \
--query-string "estimate"
estimate はクエリの最後のコマンドとして置く必要があります。フィルター付きクエリを見積もるには、末尾に | estimate を付けます。
aws logs start-query \
--log-group-name "LOG_GROUP_NAME" \
--start-time START_TIME \
--end-time END_TIME \
--query-string "fields @timestamp, @message | filter @message like /ERROR/ | estimate"
結果は get-query-results で取得します。推定値は @estimatedBytesScanned フィールドに入ります。以下は1つ目のコマンド(3ロググループ・30日)の結果です。
{
"results": [[{"field": "@estimatedBytesScanned", "value": "85634"}]],
"statistics": {"bytesScanned": 0.0, "logGroupsScanned": 3.0},
"status": "Complete"
}
statistics.bytesScanned は 0.0 で、estimate では実際のスキャンは発生していませんでした。
同じロググループ・期間で、フィルターなしのクエリ(stats count(*) as cnt)を実行すると、実測値は statistics.bytesScanned に入ります。このクエリは全データをスキャンするため、通常どおり Logs Insights の料金がかかります。
{
"results": [[{"field": "cnt", "value": "478"}]],
"statistics": {
"recordsMatched": 478.0,
"recordsScanned": 478.0,
"bytesScanned": 85634.0,
"logGroupsScanned": 3.0
},
"status": "Complete"
}
推定値と実測値は一致しました。
複数パターンでの比較
ロググループと期間を変えた4パターン(上記の例を含む)で比較しました。推定値は --query-string "estimate" 単体の結果、実測値はフィルターなしのクエリ(stats count(*) as cnt)の bytesScanned です。いずれもロググループと期間の全データがスキャン対象です。
| ロググループ(種類) | 期間 | 推定値 (bytes) | 実測値 (bytes) | 差分 |
|---|---|---|---|---|
| Lambda ×2 + ECS ×1(3グループ) | 30日 | 85,634 | 85,634 | 0% |
| EventBridge | 365日 | 3,299,539 | 3,299,539 | 0% |
| CloudWatch Synthetics | 2026-01-01〜2026-07-01 | 18,817,667 | 18,817,667 | 0% |
| ECS | 365日 | 906,347 | 906,347 | 0% |
4パターンすべてで、推定値と実測値はバイト単位で一致しました。
公式ドキュメントでは、estimate の値は概算(approximate)であり、実際にクエリを実行したときのスキャン量と異なる場合があると説明されています。
まとめ
Logs Insights の料金はスキャン量に応じて決まります。実行前にスキャン量を確認できるようになったことで、想定外のスキャンを避けやすくなりました。
これまで、多数のロググループをまたぐクエリや、出力量が時期によって変動するロググループに長期間を指定するクエリでは、スキャン量の事前見積もりが困難でした。コンソールではクエリエディタに推定スキャン量が表示されるため、長い期間を指定するときは Run の前に確認できます。CLI でスキャン量が大きくなりそうなクエリを扱うときは、実行前に estimate でドライランすることをおすすめします。









