Amazon DevOps Guru で NAT Gatewayの異常負荷を検出してみた

Amazon DevOps Guru で NAT Gatewayの異常負荷を検出してみた

DevOps Guruの機械学習を利用した監視対象としてNAT Gatewayを設定。NAT Gatewayの過負荷利用を再現して、監視の挙動を確認してみました。
Clock Icon2023.03.07 15:00

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon DevOps Guru、通常から逸脱した動作を機械学習 (ML) を利用して検出することが可能なサービスです。

今回、DevOps Guru監視対象のリソースとして NAT Gatewayを設定。 同時接続数上限を超えるNAT Gatewayの負荷がDevOps Guruのインサイトとして異常検出できる事と、 NAT Gatewayの増強を試す機会がありましたので、紹介させていただきます。

検証環境

構成概要図

VPC

VPCウィザードを利用、1つのAZに NATゲートウェイを配置したVPCを作成しました。

NAT Gateway

Amazon DevOps Guru の監視対象とする NAT Gateway にタグを追加しました。

  • タグエディタを利用、リソースタイプとして「AWS::EC2::NatGateway」を指定して、リソースを検索

  • 監視対象とするリソースを指定

  • タグ追加

以下設定としました。

  • タグキー: devops-guru-cm-202303
  • タグ値: test-vpc-1

DevOps Guru の監視対象とするタグのキーは「DevOps-Guru-」に前方一致する必要があります。

複数のVPCが存在するアカウントの場合、タグ値をVPCの判別ができる内容とすることで、 DevOps Guruの検出結果が判別しやすくなります。

DevOps Guru

特定のNAT Gatewayのみを監視対象とするため、分析するリソースの選択は「タグ」を指定します。

  • タグキー: devops-guru-cm-202303
  • タグ値: test-vpc-1

先に設定したタグキー、タグ値で設定しました。

分析されたリソースとして、監視対象となる NAT Gatewayが反映されました。

ALB

固定レスポンス応答を戻すALBを、NAT Gatewayとは異なるVPC (デフォルトVPC) に設置しました。

EC2

キープアライブ時間を延長するオプション指定したcurlコマンドを、NAT Gatewayに負荷をかけるアプリケーションとして利用しました。

別VPCのALBに対し、NAT Gateway経由で接続するスクリプトを用意しました。

time for i in `seq 0 10000` ; do 
 ( curl --keepalive-time 60 -s xxxx-xxxx.us-west-2.elb.amazonaws.com > /dev/null &)
done

NAT Gatewayを利用するプライベートサブネットに複数のEC2インスタンスを起動。 NAT ゲートウェイの最大 55,000 件の同時接続上限を超える通信を再現させました。

結果

事後的インサイト

DevOps Guru の事後的インサイトとして、 「NATGateway ErrorPortAllocation Anomalous」が検出されました。

集約されたメトリクス

インサイトの詳細画面では、「集約されたメトリクス」として 異常値が検出されたメトリクスと検出時間が確認できました。

  • AWS/NATGateway:ActiveConnectionCount
  • AWS/NATGateway:ErrorPortAllocation
  • AWS/NATGateway:IdleTimeoutCount

グラフ化された異常

「グラフ化された異常」として、異常値を示したグラフが確認できました。

継続して稼働している環境であれば、グラフの表示期間を変更する事により、過去の再発状況を把握することが可能です。

対処

NAT Gateway 性能増強

セカンダリIPの関連付けの追加による、NAT Gatewayの性能増強を試みました。

セカンダリIPの設定後、同等の負荷テストを実施して、NAT Gateway の「ConnectionEstablishedCount」が倍増した事を確認できました。

今回、NAT GatewayはシングルAZ配置のままセカンダリIPを追加する事で性能向上を図りましたが、 NAT GatewayをシングルAZ配置で利用しているシステムは、AZ障害で大きな影響を受ける可能性があるため、 まずNAT GatewayのマルチAZ配置をご検討ください。

また、NAT Gatewayの多用は通信コストの増加要因となる場合があります。

適切なキープアライブ利用や、コネクションプールの活用などアプリケーションの改修、 AWSのエンドポイントとの通信が多いワークロードの場合、VPCエンドポイントの活用などもあわせてご検討ください。

まとめ

NAT Gateway 性能のボトルネックがサービス影響に直結するシステムでは、 CloudWatch を使用した監視アラーム設定が可能ですが、多数のアラーム管理が課題となったり、 負荷変動が大きなワークロードではしきい値の設定が難しい場合があります。

Amazon CloudWatch による NAT ゲートウェイのモニタリング

今回の作成直後の NAT Gateway に対し性能限界を超えた負荷をかけた検証を試みましたが、 長期稼働中の NAT Gateway を監視対象とした DevOpsGuru のインサイトでは、「ErrorPortAllocation」が発生しない段階で、「ActiveConnectionCount」「IdelTimeoutCount」の異常変化を捉えた事もありました。

DevOps Guruを利用した NAT Gatewayの監視、簡単な設定で 1時間あたり0.0042 ドル、月額約3ドルで利用可能です。 NAT Gatewayの過負荷や、異常な利用を検出する手段の一つとして、ぜひお試しください。

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.