0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS障害対応は原因より先に「場所」を絞る

0
Posted at

AWSで動くシステムの運用を引き継ぐと、エラーは見えているのに調査先が分からない状況に突き当たります。アプリのログに異常がないのにALBが502を返す。昨日まで動いていたバッチがAccessDeniedで止まる。RDSのCPUは低いのにレスポンスだけが遅い。エラーメッセージで検索しても、断片的な答えしか集まりません。

この記事は要約版です。症状別の確認手順、ALB・RDSの原因パターンごとの対処、監視とアラート設計の具体例は、ブログの完全版にまとめています: AWS運用・トラブル解決ガイド|切り分けの型と監視設計

原因の仮説より先に、到達点を機械的に絞る

対応が長引くチームは、原因の仮説から入って、その仮説に合う証拠だけを探してしまいます。順番を逆にしてください。まず「リクエストがどこまで到達しているか」を絞り込みます。場所が決まれば見るログは1〜2種類に減り、原因候補も数個に収束します。

対応づけは単純です。接続自体が確立しないならDNS、セキュリティグループ、ネットワークACL、ルートテーブルを疑い、VPCフローログのREJECTを探します。接続はできてエラーが返るならALBアクセスログとアプリログ。権限で落ちているならCloudTrailのerrorCodeです。突き合わせのために、ALBが付与するX-Amzn-Trace-Idをアプリのアクセスログにも出力しておくと、ALBの1行とアプリのログ行を一意に紐づけられます。

ALBの502、503、504は原因が別です。502はターゲットに接続できたがレスポンスが不正か途中で切れた状態で、調査範囲はALBとターゲットの間。503は正常なターゲットが1つもない状態。504はターゲットがアイドルタイムアウト以内に応答しなかったケースです。502ではtarget_status_codeが数値か-かで分岐し、-ならALB〜ターゲット間の問題になります。

よく外す判断が2つあります。CPU使用率が低いから性能問題ではないという推定は、I/O待ちやロック待ちの場合に成り立ちません。待ちを見るにはPerformance InsightsのDBLoad内訳が必要です。もう一つは「昨日まで動いていたから設定は変わっていない」という前提で、IAMポリシーやSCP、証明書の有効期限はリポジトリの外側で変わります。CloudTrailやConfigで確認してから仮説にしてください。

タイムアウトの大小関係も再発防止に直結します。アプリのKeep-Aliveタイムアウトを、ALBのアイドルタイムアウトより長く設定します。ALB側60秒に対してアプリ側70秒という形です。短いままだと、ALBが再利用した接続をアプリ側が先に閉じ、アプリのログには何も残らないまま502が出ます。

接続が確立しないときの3ステップ

HTTPより下のレイヤは、次の順で潰さずに確認できます。

# 1. 名前解決は通るか、返るIPは想定どおりか
dig +short api.example.com

# 2. TCPは到達するか(ポートまで指定)
nc -zv api.example.com 443

# 3. TLSハンドシェイクは成立するか、証明書は正しいか
openssl s_client -connect api.example.com:443 -servername api.example.com </dev/null 2>/dev/null | openssl x509 -noout -dates -subject

2で止まるならセキュリティグループ、ネットワークACL、ルートテーブルのいずれかです。VPCフローログにREJECTが記録されていればパケットはENIまで届いています。レコード自体が無ければ、ルーティングで到達していません。

完全版で扱っている内容

  • 症状と疑うレイヤ、最初に見るログを対応づけた早見表と、ALBアクセスログ・VPCフローログ・CloudTrail・CloudWatch Logsの役割分担、時刻のズレを避けるログ突合の注意点
  • ALBの502で見るログ列の順番、ヘルスチェックのシャロー/ディープの分け方、describe-target-healthでの状態理由の確認、デプロイ時のSIGTERMと登録解除の遅延の大小関係
  • RDS/Auroraの接続枯渇の流れとプール設計、pg_stat_activityやpg_stat_statementsでの待機イベントと重いSQLの特定、PostgreSQLのVACUUMとMySQLのUNDO、ロックタイムアウトの既定値の違い、フェイルオーバー後のDNSキャッシュ対策
  • AccessDeniedをCloudTrailから逆算する3つの確認項目、権限評価の通過順序、ネットワーク設定を追う固定手順、パラメータグループのpending-rebootとタイムアウト値の不等式
  • CloudWatchアラームのノイズ削減(M out of N、欠損データの扱い、複合アラーム)、バッチ時間帯だけ通知を止めるコマンド、メトリクスフィルタとLogs Insightsの使い分け
  • 運用スキルを固める順番、検証環境で意図的に障害を再現するシナリオ、障害対応の記録に残す項目

AWS運用・トラブル解決ガイド|切り分けの型と監視設計

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?