Amazon Aurora DSQL がサポートした CloudWatch Database Insights を試してみた

Amazon Aurora DSQL がサポートした CloudWatch Database Insights を試してみた

Amazon Aurora DSQL が Amazon CloudWatch Database Insights に対応しました。DSQL Active Session History(DASH)により、GUI・CloudWatch メトリクス API・PromQL API の3つの手段でデータベースの状態を確認できます。実際に稼働している DSQL クラスターで、それぞれの取得方法と得られるデータを確認しました。
2026.08.25

はじめに

2026年8月20日、Amazon Aurora DSQL が Amazon CloudWatch Database Insights をサポートするアップデートの発表がありました。

https://aws.amazon.com/about-aws/whats-new/2026/08/aurora-dsql-cloudwatch-database-insights/

DSQL Active Session History(DASH)はデータベースの負荷情報を1分間隔で自動収集し、コンソールからは追加料金なしで参照できます。

本記事では、稼働中の Aurora DSQL クラスターを対象に、Database Insights のコンソール表示、CloudWatch 標準メトリクスの取得、PromQL API 経由の DASH データ取得を確認しました。

検証内容

コンソール表示

CloudWatch のコンソールでは、左ナビゲーションの Infrastructure Monitoring 配下に Database Insights の項目がありました。Aurora DSQL クラスターを作成するだけで、ここから DASH のデータにアクセスできます。

CloudWatchコンソールのDatabase Insightsへの導線

Database Instance Dashboard を開くと、上部に Database load チャートが表示されます。Average active sessions の内訳は Waits または SQL Text で切り替えられ、グラフは Bar と Line を選べます。

Database Instance DashboardのDB LoadチャートとTop SQL一覧

下部の DB Load Analysis には Top SQL と Top waits のタブがあります。Top SQL タブでは、SQL 文ごとの AAS が Load by waits (AAS) として表示され、あわせて SQL statements の一覧も表示されました。SQL 文を選択すると、下部の SQL text にクエリ全文と Query ID が表示されます。Engine 欄の表示は Aurora DSQL でした。

Database Telemetry タブには、10種のメトリクスウィジェットが並んでいます。

Database TelemetryタブのCloudWatchメトリクス一覧

ウィジェット メトリクス 単位
Transactions TotalTransactions, ReadOnlyTransactions Count
Query timeouts QueryTimeouts Count
OCC conflicts OccConflicts Count
Commit latency CommitLatency Milliseconds
I/O throughput BytesRead, BytesWritten Bytes
Compute time ComputeTime Milliseconds
Cluster storage size ClusterStorageSize Bytes
DPU usage ReadDPU, WriteDPU, ComputeDPU, TotalDPU, MultiRegionWriteDPU Units
Established connections ResourceCount Count
Connection attempts CallCount(DbConnectAdmin / DbConnect 別) Count

標準メトリクス取得

コンソールの Database Telemetry に並んでいたメトリクスを、CloudWatch のメトリクス API から取得できるか確認しました。

aws cloudwatch list-metrics --namespace AWS/AuroraDSQL --region us-east-1
{
    "Metrics": [
        {
            "Namespace": "AWS/AuroraDSQL",
            "MetricName": "OccConflicts",
            "Dimensions": [{"Name": "ClusterId", "Value": "<cluster-id>"}]
        },
        {
            "Namespace": "AWS/AuroraDSQL",
            "MetricName": "ClusterStorageSize",
            "Dimensions": [{"Name": "ClusterId", "Value": "<cluster-id>"}]
        },
        {
            "Namespace": "AWS/AuroraDSQL",
            "MetricName": "ComputeTime",
            "Dimensions": [{"Name": "ClusterId", "Value": "<cluster-id>"}]
        },
        {
            "Namespace": "AWS/AuroraDSQL",
            "MetricName": "TotalTransactions",
            "Dimensions": [{"Name": "ClusterId", "Value": "<cluster-id>"}]
        },
        {
            "Namespace": "AWS/AuroraDSQL",
            "MetricName": "ComputeDPU",
            "Dimensions": [{"Name": "ClusterId", "Value": "<cluster-id>"}]
        },
        {
            "Namespace": "AWS/AuroraDSQL",
            "MetricName": "ReadDPU",
            "Dimensions": [{"Name": "ClusterId", "Value": "<cluster-id>"}]
        },
        {
            "Namespace": "AWS/AuroraDSQL",
            "MetricName": "WriteDPU",
            "Dimensions": [{"Name": "ClusterId", "Value": "<cluster-id>"}]
        },
        {
            "Namespace": "AWS/AuroraDSQL",
            "MetricName": "ReadOnlyTransactions",
            "Dimensions": [{"Name": "ClusterId", "Value": "<cluster-id>"}]
        },
        {
            "Namespace": "AWS/AuroraDSQL",
            "MetricName": "BytesWritten",
            "Dimensions": [{"Name": "ClusterId", "Value": "<cluster-id>"}]
        },
        {
            "Namespace": "AWS/AuroraDSQL",
            "MetricName": "BytesRead",
            "Dimensions": [{"Name": "ClusterId", "Value": "<cluster-id>"}]
        },
        {
            "Namespace": "AWS/AuroraDSQL",
            "MetricName": "TotalDPU",
            "Dimensions": [{"Name": "ClusterId", "Value": "<cluster-id>"}]
        },
        {
            "Namespace": "AWS/AuroraDSQL",
            "MetricName": "CommitLatency",
            "Dimensions": [{"Name": "ClusterId", "Value": "<cluster-id>"}]
        }
    ]
}

返ってきたのは12種のメトリクスで、ディメンションは ClusterId だけでした。コンソールの Database Telemetry に並んでいた QueryTimeouts、MultiRegionWriteDPU、ResourceCount、CallCount は、この一覧には現れていません。直近2週間にデータポイントがないメトリクスは一覧に含まれない仕様です。QueryTimeouts は一度も発生していないため、一覧に出ないのは想定どおりです。

日次のデータ投入処理が動いていた時間帯を指定して、DPU 消費を5分間隔で取得しました。

aws cloudwatch get-metric-statistics \
  --namespace AWS/AuroraDSQL \
  --metric-name TotalDPU \
  --dimensions Name=ClusterId,Value=<cluster-id> \
  --start-time 2026-08-23T07:00:00Z \
  --end-time 2026-08-23T11:00:00Z \
  --period 300 \
  --statistics Sum Maximum \
  --region us-east-1

出力から、値が確認できた時間帯のデータポイントを抜粋します。

{
    "Label": "TotalDPU",
    "Datapoints": [
        {
            "Timestamp": "2026-08-23T18:40:00+09:00",
            "Sum": 286.66901874707025,
            "Maximum": 40.81532766992188,
            "Unit": "None"
        },
        {
            "Timestamp": "2026-08-23T19:20:00+09:00",
            "Sum": 257.6313710976563,
            "Maximum": 18.65125854589844,
            "Unit": "None"
        },
        {
            "Timestamp": "2026-08-23T19:15:00+09:00",
            "Sum": 113.22324524414063,
            "Maximum": 71.276387875,
            "Unit": "None"
        }
    ]
}

DASH ではなく標準メトリクスであれば、AWS CLI から取得できます。トランザクション数も同じ時間帯で取得しています。

aws cloudwatch get-metric-statistics \
  --namespace AWS/AuroraDSQL \
  --metric-name TotalTransactions \
  --dimensions Name=ClusterId,Value=<cluster-id> \
  --start-time 2026-08-23T07:00:00Z \
  --end-time 2026-08-23T11:00:00Z \
  --period 300 \
  --statistics Sum Average \
  --region us-east-1
{
    "Label": "TotalTransactions",
    "Datapoints": [
        {
            "Timestamp": "2026-08-23T18:40:00+09:00",
            "Average": 1.0,
            "Sum": 727.0,
            "Unit": "None"
        },
        {
            "Timestamp": "2026-08-23T19:20:00+09:00",
            "Average": 1.0,
            "Sum": 717.0,
            "Unit": "None"
        }
    ]
}

DPU が増えていた2つの時間帯は、いずれも5分間で700件台のトランザクションが処理されていました。コミットのレイテンシーも取得しています。

CommitLatency の取得コマンドと出力
aws cloudwatch get-metric-statistics \
  --namespace AWS/AuroraDSQL \
  --metric-name CommitLatency \
  --dimensions Name=ClusterId,Value=<cluster-id> \
  --start-time 2026-08-23T07:00:00Z \
  --end-time 2026-08-23T11:00:00Z \
  --period 300 \
  --statistics Average Maximum \
  --region us-east-1
{
    "Label": "CommitLatency",
    "Datapoints": [
        {
            "Timestamp": "2026-08-23T19:15:00+09:00",
            "Average": 8.602227272727273,
            "Maximum": 189.249,
            "Unit": "Milliseconds"
        },
        {
            "Timestamp": "2026-08-23T17:20:00+09:00",
            "Average": 8.161930232558138,
            "Maximum": 104.103,
            "Unit": "Milliseconds"
        }
    ]
}

単位は Milliseconds で、19:15 JST の最大値が 189.2ms、17:20 JST の最大値が 104.1ms でした。

PromQL APIでの取得

DB Load やウェイトイベントの内訳にあたる DASH 本体のデータは、標準メトリクスとは経路が違います。db.active_sessions.avg は PromQL からのみアクセスでき、問い合わせに使う QueryMetrics API には対応する CLI サブコマンドがありません。AWS CLI 2.36.29 では、サブコマンドとして受け付けられませんでした。

aws: [ERROR]: An error occurred (ParamValidation): argument operation: Found invalid choice 'query-metrics'

QueryMetrics は Prometheus 互換の REST エンドポイント(https://monitoring.<region>.amazonaws.com/api/v1/query および /api/v1/query_range)として提供されています。Signature Version 4 で署名した HTTP リクエストを直接送る必要があります。公式ドキュメントの PromQL querying のページにも、monitoring をサービス名として Signature Version 4 で署名することが明記されています。

そこで、SigV4 署名を代行して HTTP リクエストを送るサードパーティ製の OSS ツール awscurl の 0.33 を pip install awscurl で導入し、ウェイトイベント別の AAS を取得しました。

awscurl --service monitoring --region us-east-1 \
    -X POST 'https://monitoring.us-east-1.amazonaws.com/api/v1/query_range' \
    -H 'Content-Type: application/x-www-form-urlencoded' \
    -d 'query=avg by ("db.wait.event") ({"db.active_sessions.avg", "@resource.aws.auroradsql.cluster_id"="<cluster-id>"})&start=2026-08-23T09:00:00Z&end=2026-08-23T11:00:00Z&step=1m'
{
  "status": "success",
  "data": {
    "resultType": "matrix",
    "result": [
      {
        "metric": {"db.wait.event": "Commit"},
        "values": [[1787478060.0, "0.06666666666666667"], [1787478120.0, "0.06666666666666667"]]
      },
      {
        "metric": {"db.wait.event": "OnCpu"},
        "values": [[1787478000.0, "0.016666666666666666"], [1787478060.0, "0.016666666666666666"]]
      },
      {
        "metric": {"db.wait.event": "SequentialScanRead"},
        "values": [[1787478000.0, "0.016666666666666666"], [1787478060.0, "0.016666666666666666"]]
      }
    ]
  }
}

PromQL クエリをリクエストボディに入れて POST しました。取得できたウェイトイベントは6種でした。ClientRead、Commit、OnCpu、ScatteredBatchRead、SequentialScanRead、UniqueConstraintCheck です。

レスポンスは、通常の CloudWatch の GetMetricData が返す MetricDataResults 配列とは異なり、status と data を持つ構造です。Prometheus のクエリ API と同じ形式です。

続いて、SQL 単位の内訳を取得しました。正規化済みの SQL 文をラベルにしてグループ化し、AAS の上位5件に絞った結果です。

awscurl --service monitoring --region us-east-1 \
    -X POST 'https://monitoring.us-east-1.amazonaws.com/api/v1/query_range' \
    -H 'Content-Type: application/x-www-form-urlencoded' \
    -d 'query=topk(5, avg by ("db.query.normalized_text") ({"db.active_sessions.avg", "@resource.aws.auroradsql.cluster_id"="<cluster-id>"}))&start=2026-08-23T09:00:00Z&end=2026-08-23T11:00:00Z&step=1m'
{
  "status": "success",
  "data": {
    "resultType": "matrix",
    "result": [
      {
        "metric": {"db.query.normalized_text": "BEGIN"},
        "values": [[1787478060.0, "0.03333333333333333"], [1787480340.0, "0.05"]]
      },
      {
        "metric": {"db.query.normalized_text": "COMMIT"},
        "values": [[1787478060.0, "0.06666666666666667"], [1787480340.0, "0.06666666666666667"]]
      },
      {
        "metric": {"db.query.normalized_text": "DELETE FROM public.sample_activity"},
        "values": [[1787480340.0, "0.016666666666666666"]]
      }
    ]
  }
}

BEGIN、COMMIT、DELETE FROM ...、INSERT INTO ... といった正規化済みの SQL 文ごとに AAS が返りました。コンソールの Top SQL タブと同じ種類の情報を、API からも取得できました。

PromQL API の呼び出しに必要な IAM 権限
To execute PromQL queries, you need both cloudwatch:GetMetricData and cloudwatch:ListMetrics permissions.

出典: Query your metrics with PromQL - Amazon CloudWatch

有効化とコスト

ここまでの検証では、クラスター側の設定は変更していません。公式ドキュメントも、セットアップが不要であることを明記しています。

https://docs.aws.amazon.com/aurora-dsql/latest/userguide/dsql-db-insights.html

You don't need to set up DASH. It is automatically enabled for every Aurora DSQL cluster, and per-minute aggregated data is available through Amazon CloudWatch Database Insights and through Prometheus Query Language (PromQL) queries run against CloudWatch OTel metrics at no additional cost.

料金については、CloudWatch の料金ページに記載があります。

https://aws.amazon.com/cloudwatch/pricing/

Upto 15 months of per-minute standard database metrics are included at no additional cost.
Querying OpenTelemetry metrics via the PromQL API is charged at $0.01 per million samples scanned. A sample is one data point for one metric series at one timestamp. Queries executed through the CloudWatch console, including dashboards, are free of charge.

15か月分の標準メトリクスは追加料金なしで保持されます。クエリの実行についても、コンソール経由は無料ですが、PromQL API を経由したクエリはスキャンしたサンプル数に応じて課金されます。

まとめ

DSQL がサポートした Database Insights は、Aurora(RDS)の Database Insights(旧:Performance Insights)と同様に、DBの稼働状態を把握するのに有効です。

DASH は追加設定なしで有効です。コンソールから負荷を確認する分には追加費用もかからないため、Aurora DSQL を使っている方は一度 Database Insights を開いてみてください。

今回確認したのは、日次のデータ投入が動いている平時の負荷です。負荷試験のような過負荷はかけていません。DSQL を使ったワークロードで負荷試験を行う機会があれば、その結果は別記事で紹介したいと思います。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事