[レポート] AWSで.NET アプリにオブザーバビリティを実装する #XNT302 #reinvent

2021.12.04

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

セッション概要

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)に一番時間が割かれると話しています。 その問題は、どれくらいの影響範囲で、何に影響していて、何が問題なのかを我々は特定しようとするからです。

issue timeline

オブザーバビリティの紹介

はじめに、公式のオブザーバビリティ・ワークショップ 1 の紹介をしています。
こちらを行うことで、AWS Observability の概要や各サービスを理解することができます。

オブザーバビリティのシグナル

メトリクスやログとは、サーバーのコンポーネントからのシグナルをキャプチャします。
トレースとは、ユーザーのアクションがシステムを通過した際のステップの組み合わせです。

observability signals

シグナルのライフライサクルは、 Instrument -> Capture -> Transport -> Analyze -> Act です。 instrumentation とは、恐らく、シグナルを検知するための機構・仕組み自体を指しています(和訳が難しい...)。 以下では、.NET アプリケーションを例にデモを行います。

signal lifecycle

.NET アプリケーションにオブザーバビリティを実装する方法(lots of demo!)

上記画像の最初の3つのステップを中心に、.NETアプリケショーンを利用してデモを行います。   オブザーバビリティの基礎である Metrics/Trace/Log を学ぶため、CloudWatchメトリクス、X-Rayトレース、CloudWatchログを利用します。

AWS observability choice

実際に、アプリケーションのワークロードを理解し、コンポーネントを観察して問題を特定するまでをイメージするため、シンプルな.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, トレース/ログ用のバックエンド(サービス)、その他のサポートされているバックエンド(サービス)に遠隔測定データを送信することができます。

using embedded metricformat adod collector and prometheus

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)がどのようなものなのか実際に見てイメージすることもできました。まだの方は、こちら の記事も参考に、ぜひチャレンジしてみて下さい。