[アップデート]Amazon Route 53リゾルバーエンドポイントのキャパシティ使用率メトリクスが追加され、エンドポイントのステータスが取得できるようになりました
Amazon Route 53リゾルバーエンドポイントでエンドポイントのステータスが取得できるようになりました
おのやんです。
この度のアップデートにより、Amazon Route 53リゾルバーエンドポイント(以下、リゾルバーエンドポイント)のキャパシティ使用率メトリクスが新たに追加され、エンドポイントのステータスが取得できるようになりました。
これまでだと、Route 53 リゾルバーエンドポイントのメトリクス値を取得して、「エンドポイントの負荷が高くなっているな」「ENIの容量使用率はどれくらいだろう」などと判断する必要がありました。
今回新しく追加されたResolverEndpointCapacityStatus
メトリクスは、次の3つのステータスが設定されています。
- 容量制限内で動作しているか:0(OK)
- 少なくとも1つのENIが容量使用率が50%を超えているか:1(Warning)
- 少なくとも1つのENIが容量使用率が75%を超えているか:2(Critical)
ResolverEndpointCapacityStatus
The capacity status of the Resolver endpoint. The metric indicates the current capacity utilization state where: 0 = OK (Normal operating capacity), 1 = Warning (At least one elastic network interface exceeds 50% capacity utilization), and 2 = Critical (At least one elastic network interface exceeds 75% capacity utilization).
The capacity status is determined by multiple factors including query volume, query latency, DNS protocols, DNS packet size, and connection tracking status.
Valid statistics: Maximum
Units: None
検証
それでは、実際にリゾルバーを作成してメトリクスを取得したいと思います。
多数クエリ実行による負荷試験の手順
検証では、シェルスクリプトを実行して、大量のクエリを投げて容量メトリクスの変化を検知させようとしました。このシェルスクリプトは生成AIに作成させており、検証用ということで本番環境での使用は想定していない点、ご了承ください。
#!/bin/bash
# Route 53 Resolver Capacity Metrics Test
RESOLVER_ENDPOINT_ID="rslvr-in-655010f979cc4f66a"
RESOLVER_IP="X.X.X.X"
echo "Starting DNS load test to trigger capacity metrics..."
echo "Resolver Endpoint ID: $RESOLVER_ENDPOINT_ID"
echo "Target IP: $RESOLVER_IP"
# 10000回のDNSクエリを実行
echo "Sending 10000 DNS queries..."
for i in $(seq 1 10000); do
dig @$RESOLVER_IP test$i.example.com +timeout=1 +tries=1 > /dev/null 2>&1 &
# 100クエリごとに進捗表示
if [ $((i % 100)) -eq 0 ]; then
echo "Sent $i queries..."
fi
# 同時実行数を制限(20並列)
if [ $((i % 20)) -eq 0 ]; then
wait
fi
done
wait
echo "All 10000 queries sent!"
# 少し待ってからメトリクスを確認
echo "Waiting 60 seconds for metrics to appear..."
sleep 60
# キャパシティメトリクスを確認
echo "Checking ResolverEndpointCapacityStatus metrics..."
aws cloudwatch get-metric-statistics \
--namespace AWS/Route53Resolver \
--metric-name ResolverEndpointCapacityStatus \
--dimensions Name=EndpointId,Value=$RESOLVER_ENDPOINT_ID \
--start-time $(date -v-10M -u +%Y-%m-%dT%H:%M:%S) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%S) \
--period 300 \
--statistics Maximum
echo "Test completed!"
参考までに、InboundQueryVolume
メトリクスの値は意図した通りに増加しています。
一方で、ResolverEndpointCapacityStatus
の値は変化なしでした(スクリーンキャプチャのタイミングにより、AWSコンソール画面に少し違いが見られます)
AWS環境にAmazon Route 53リゾルバー インバウンドエンドポイント(以下、インバウンドエンドポイント)を作成します。
Amazon CloudWatch(以下、CloudWatch)メトリクスでは、ResolverEndpointCapacityStatus
が追加されています。作成時はクエリを投げていないので、ステータスは0
のままです。
AWS CLIでも、0.0
のステータスを確認できます。
$ aws cloudwatch get-metric-statistics \
--namespace AWS/Route53Resolver \
--metric-name ResolverEndpointCapacityStatus \
--dimensions Name=EndpointId,Value=$(aws route53resolver list-resolver-endpoints --query 'ResolverEndpoints[0].Id' --output text) \
--start-time $(date -v-1H -u +%Y-%m-%dT%H:%M:%S) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%S) \
--period 300 \
--statistics Maximum
{
"Label": "ResolverEndpointCapacityStatus",
"Datapoints": [
{
"Timestamp": "2025-06-29T01:11:00+00:00",
"Maximum": 0.0,
"Unit": "None"
},
{
"Timestamp": "2025-06-29T01:16:00+00:00",
"Maximum": 0.0,
"Unit": "None"
},
{
"Timestamp": "2025-06-29T01:01:00+00:00",
"Maximum": 0.0,
"Unit": "None"
},
{
"Timestamp": "2025-06-29T01:06:00+00:00",
"Maximum": 0.0,
"Unit": "None"
},
{
"Timestamp": "2025-06-29T00:51:00+00:00",
"Maximum": 0.0,
"Unit": "None"
},
{
"Timestamp": "2025-06-29T00:56:00+00:00",
"Maximum": 0.0,
"Unit": "None"
}
]
}
ResolverEndpointCapacityStatus
メトリクスは、次の複数の要因が組み合わされて算出されます:
- クエリ量(Query Volume)
- クエリ待ち時間(Query Latency)
- DNSプロトコル
- DNSパケットサイズ
- 接続追跡ステータス
本メトリクスが1
(Warning)や2
(Critical)の値を取るときは、これらの要因が複合的に作用して、ENIの使用率が50%・75%を超えていると判断できます。
リゾルバーの全体的なステータス監視に使えそう
「リゾルバーへの負荷が全体的に上がっていないかを今回のメトリクスで監視して、これ以外にも従来のメトリクスを使って特定の値を監視する」というのが、今後取られる構成のひとつになりそうです。リゾルバー自体のステータスを取得できるようになったのは大きいアップデートですね。