ロギング設計
実装は、大きく二つあります。
- CloudWatch Logsを活用する方法
- FireLensを活用する方法
CloudWatch Logsを活用
閲覧
「CloudWatch Logsサブスクリプションフィルター」を使うことで、ログ内に特定文字が含まれているログのみを抽出できる。
通知
抽出したログのみをLambdaに連携させることでSNSと連動して障害を通知できる。
また、Chatbotを活用することでSlack通知も可能。
ログのメンテナンス
保存期間を設定できるため、必要に応じて蓄積されたログのメンテナンス処理も自動化できる。
FireLensを活用
FireLensとは「ログルーティングの仕組み」になります。
メリット
CloudWatch Logs以外のAWSサービスやAWS以外のSaaSへログを転送しやすい点。Firehoseと連携してS3、Redshift、OpenSearch Serviceへログを転送が可能。
ログルーティングソフトウェア
以下、2つの中からログルーティングソフトを選択可能。
Fluentd
Fluent Bit
Fluentdと比較してプラグインの数が少ないが、リソース効率がよくAWSはこちらの利用を推奨している。
トレース設計
オブザーバビリティを実現のためには、ログやメトリクスに関しに加えてアプリケーションの内部処理の呼び出し、各サービス間のトランザクション情報等のトレース情報(アプリケーションのバックエンドへのAPIリクエスト情報)を取得します。
X-Ray
アプリケーションのリクエスト情報(トレース情報)などを詳細に追えます。トレース情報の取得をサポートするサービス。サービスマップのダッシュボードも提供されておりシステム全体の可視化も併せて実現可能。
ポイント
サイドカー構成によるX-Rayコンテナの配置
ECSタスク定義の中にアプリケーションコンテナとX-Rayコンテナを同梱します。
また、アプリケーション自体にAWSが提供するX-Ray用のSDKで一部コーディングを実施することでX-Rayに対してトレース情報を送出することができる。
サイドカー構成
「メインのコンテナ」に加えて「補助的な役割のコンテナ」を追加した構成。ここで言っているX-Rayコンテナが「補助的な役割のコンテナ」を指しています。
ECSタスクロールを付与
ECS/FargateコンテナアプリからX-Rayにトレース情報を書き込むにはIAM権限が必要。(ECSタスクロールとして「AWSXRayDaemonWriteAccess」)
また、X-Rayにトレース情報を書き込む主体はECSコンテナエージェントではなく、ECSタスクになります。(なので、「タスク実行ロール」ではなく、「ECSタスクロール」への権限付与となるので間違えないようにしましょう。)
ECSコンテナエージェント
Fargateの各インスタンスのことを指しています。
ECSタスク
コンテナ群になります。ECSタスクがAWSに対する実行権限のことを「ECSタスクロール」と呼びこれに対してX-Rayの権限設定ををする必要があります。
VPCエンドポイントが必要
X-RayはVPC外のAWSパブリックネットワークにサービスエンドポイントが存在します。なので、ECSタスクがプライベートネットワークにデプロイされている場合は、X-Ray用のインターフェース型VPCエンドポイントか、NATゲートウェイによるネットワーク経路を用意する必要がある。
アプリケーション側の考慮
アプリケーション側にXRayのSDKを積極的に追加する必要があります。XRayへ詳細なログを出力する必要がある場合はAWSの設定だけでなく、実装言語によっては少し作り込みが必要になるので考慮が必要になります。
この記事へのコメントはありません。