[レポート] AWSで.NET アプリにオブザーバビリティを実装する #XNT302 #reinvent
セッション概要
AWS re:Invent 2021で行われた「Implementing observability for .NET apps on AWS」セッションのレポートです。
DESCRIPTION
Are you confident you can quickly identify service problems and resolve performance issues at scale? Isolating and remediating performance problems in the cloud, particularly with modern, distributed, microservice architectures is challenging. In this session, see how to implement observability for your .NET applications using logs, metrics, and traces that unlock your ability to build better systems and increase operational efficiency. Learn AWS best practices for implementing observability with services including Amazon CloudWatch, AWS X-Ray, and AWS Distro for OpenTelemetry.
SPEAKERS
- Greg Eppel
- Imaya Kumar Jagannathan
SESSION ID
XNT302
SESSION LEVEL
300-Advanced
レポート&ハイライト
アジェンダ
- なぜオブザーバビリティが重要なのか
- オブザーバビリティの紹介
- .NET アプリケーションにオブザーバビリティを実装する方法(lots of demo!)
なぜオブザーバビリティが重要なのか
オブザーバビリティとは、そのシステムで何が起こっているのか観測/可視化し、どれだけ理解できるかを示すものです。
メトリクス、ログ、トレースを取得/把握し、システムやアプリケーションで起こっている問題を検知し、調査、修正を可能にします。
問題が起きた際のタイムライン
一般的に問題が検出された後、その問題を見分けること(Identify)に一番時間が割かれると話しています。 その問題は、どれくらいの影響範囲で、何に影響していて、何が問題なのかを我々は特定しようとするからです。
オブザーバビリティの紹介
はじめに、公式のオブザーバビリティ・ワークショップ 1 の紹介をしています。
こちらを行うことで、AWS Observability の概要や各サービスを理解することができます。
オブザーバビリティのシグナル
メトリクスやログとは、サーバーのコンポーネントからのシグナルをキャプチャします。
トレースとは、ユーザーのアクションがシステムを通過した際のステップの組み合わせです。
シグナルのライフライサクルは、 Instrument -> Capture -> Transport -> Analyze -> Act
です。
instrumentation とは、恐らく、シグナルを検知するための機構・仕組み自体を指しています(和訳が難しい...)。
以下では、.NET アプリケーションを例にデモを行います。
.NET アプリケーションにオブザーバビリティを実装する方法(lots of demo!)
上記画像の最初の3つのステップを中心に、.NETアプリケショーンを利用してデモを行います。 オブザーバビリティの基礎である Metrics/Trace/Log を学ぶため、CloudWatchメトリクス、X-Rayトレース、CloudWatchログを利用します。
実際に、アプリケーションのワークロードを理解し、コンポーネントを観察して問題を特定するまでをイメージするため、シンプルな.NETで作られたWebアプリケーション(Webサーバー&SQLサーバー)に対して、CloudWatch Application Insights を使い、IIS のログ、Application のログ、WindowsSystem のイベントログ、.NET CLR Exception/Memory メトリクス, ASP.NET App Request in App Queue メトリクス などなどの見方や検索方法を説明しています。
Logsのデモ
その後、Application Insight と同等以上のことがしたい場合の Log の収集方法として、AWS.Logger Nuget Package を使い、CloudWatchにログを飛ばすデモと紹介が行われています。
Metricsのデモ
Dynamo,APIG,Lambda を利用した.NETアプリケーションよりメトリクスを収集するために、Cloud Watch Agent や AWS Distro for OpenTelemetry Collector を使用して, Cloud Watch と Amazon Managed Service for Prometheus にログを投げるデモを行なっています。
OpenTelemetry は、アプリケーション監視用の分散トレースとメトリクスを収集するための API、ライブラリ、およびエージェントを提供しているオープンソースで、アプリケーションを計測し、相関メトリクスとトレースを複数の AWS およびパートナーのモニタリングソリューションに送信できます。
AWS Distro for OpenTelemetry Collector は、AWS CloudWatch Metrics, トレース/ログ用のバックエンド(サービス)、その他のサポートされているバックエンド(サービス)に遠隔測定データを送信することができます。
Tracesのデモ
上記の環境の続きで、X-Ray SDK for .NETやOpenTelemetry SDK for .NETを使ってトレースを収集するデモを行なっています。 HTTPクライアントコール、APIGatewayやDynamo DBの呼び出しも追跡しています。
感想
最近の複雑化したアーキテクトのシステムやアプリケーション(Polyglotなアプリケーション/マイクロサービス/サーバーレス/コンテナ化など)に対して、どのようにオブザーバビリティやモニタリングの仕組みを取り入れ、ミニマムで始め、問題を検知/調査すれば良いのかを学ぶことができました。オブザーバビリティ自体の概念や考え方、具体的なコードやAWSの操作、見るべき項目を示して下さっていることで、実装イメージをつけることもできました。 セッション動画では、上記の詳細部分を深掘りしています。具体的なデモやコードが見たい方は、ぜひ動画をご視聴下さい。
セッションで紹介されている、One Observability Workshop 1 もやってみることで、多くのツールを学ぶ良い機会になり、本セッションのデモでは、Workshopでは試せなかったサービス(Amazon Managed Service for Prometheus, Amazon Managed Grafana, AWS Distro for OpenTelemetry)がどのようなものなのか実際に見てイメージすることもできました。まだの方は、こちら の記事も参考に、ぜひチャレンジしてみて下さい。