コンテンツに移動
Google Cloud

ASP.NET Core アプリの診断機能を提供する Stackdriver ライブラリを GA リリース

2017年9月15日
Google Cloud Japan Team

https://storage.googleapis.com/gweb-cloudblog-publish/images/google-cloud-diagnostics-3.max-400x400.png

アプリケーションの障害を把握するうえで、そのログやエラー、レイテンシを調べることはとても重要ですが、そのような診断機能を正しく実装することは容易ではなく、時間もかかります。

そこで私たちは、ASP.NET Core アプリケーション対応の Stackdriver Diagnostics 統合ライブラリを一般リリース(GA)しました。これを使えば、最小限の労力とコードで、Stackdriver の LoggingError Reporting、および Trace の各機能を ASP.NET Core アプリケーションに組み込むことができます。

GA に至るまでの過程で、私たちはバグをフィックスし、お客様からのフィードバックを反映させ、徹底的なテストを行って、本番ワークロードに耐えられるように改良を行ってきました。

Google.Cloud.Diagnostics.AspNetCore パッケージは NuGet から入手できます。ASP.NET Classic も Google.Cloud.Diagnostics.AspNet パッケージでサポートされます。

この投稿では、このリリースに組み込まれたさまざまな Google Cloud Platform(GCP)コンポーネントと、それを使った ASP.NET Core アプリケーションのトラブルシューティングの方法を紹介します。

Stackdriver Logging

Stackdriver Logging は、GCP と AWS から送られてきたログ データとイベントを格納、分析、監視し、それに基づいてアラートを生成します。Stackdriver へのロギングは、Google.Cloud.Diagnostics.AspNetCore パッケージを使えば簡単です。

このパッケージは、ASP.NET Core の組み込みロギング API を使用します。Stackdriver のプロバイダを追加し、通常どおりロガーを作成して利用すると、Google Cloud ConsoleStackdriver Logging セクションにログが表示されます。ほんの数行のコードを追加するだけで、Stackdriver Logging を初期化してログを送ることができます。

読み込んでいます...

以下は Cloud Console に表示された Stackdriver のログです。

https://storage.googleapis.com/gweb-cloudblog-publish/images/X_G57BdO_EfVEHiMEGnt8_u3KFcyc6BLaod7W1mwU0.max-1000x1000.PNG

上の画面には、Stackdriver に送られた 2 つの異なるログが表示されています。拡張ログは、重大度、タイムスタンプ、ペイロード、その他の有用な情報を示します。

Stackdriver Error Reporting

ミドルウェア フローの冒頭に Stackdriver Error Reporting のミドルウェアを追加すると、すべての未処理例外が Stackdriver Error Reporting に表示されます。例外はグループにまとめられ、Cloud Console の Stackdriver Error Reporting セクションに表示されます。ASP.NET Core アプリケーションに次のコードを追加すると、Stackdriver Error Reporting を初期化できます。

読み込んでいます...

IExceptionLogger インターフェースを使用すれば、キャッチされた例外や処理された例外もレポートできます。

読み込んでいます...

以下は Cloud Console に表示された Stackdriver のエラー レポートです。

https://storage.googleapis.com/gweb-cloudblog-publish/images/mtYCvcpDL-WYb1NO2ttqvGs4O9cbmIheA4noJFNCqEKL.max-900x900.PNG

上の画面は、特定のアプリケーションの特定のバージョンで起きたエラーを時間の経過とともに示しています。エラーの詳細は画面下部に表示されます。

Stackdriver Trace

Stackdriver Trace はすべてのアプリケーションのレイテンシ情報を取得します。たとえば、Stackdriver Trace のインテグレーション ポイントを使用すると、時間がかかりすぎている HTTP リクエストを診断できます。Error Reporting と同様に、Trace もミドルウェア フローにフックされるため、ミドルウェア フローの冒頭に追加する必要があります。初期化方法についても、Error Reporting での方法とよく似ています。

読み込んでいます...

現在の要求に対応するコード セクションを手動でトレースすることもできます。

読み込んでいます...

以下は Cloud Console に表示された複数のサーバーのトレースです。

https://storage.googleapis.com/gweb-cloudblog-publish/images/wBrW9Il-OxoQVLt6iWhxJUjaveyYw8sUubzXkU5aIy.max-1100x1100.PNG

この画面は、HTTP リクエストの各部に費やされた時間を示しています。タイムラインには、フロントエンドとバックエンドの両方に費やされた時間が表示されます。

ASP.NET Core をまだ使っていない場合は?

まだ ASP.NET Core に切り替えていないにもかかわらず Stackdriver の診断ツールを使いたいという方のために、ASP.NET 用の Google.Cloud.Diagnostics.AspNet パッケージも用意されています。このパッケージは、ASP.NET アプリケーションに統合できるシンプルな Stackdriver 診断機能を提供します。

このパッケージを使って ASP.NET アプリケーションに 1 行のコードを追加すると、MVC と Web API に Error ReportingTracing を追加できます。また、ASP.NET はロギング API を持っていませんが、Google.Cloud.Logging.Log4Net パッケージの log4net は Stackdriver Logging と統合されています。

私たちは、ASP.NET および ASP.NET Core アプリケーションを構築、実行する場所として GCP を相応しいものにすることを目標としており、パフォーマンスやエラーのトラブルシューティング機能はそのための重要なパーツです。ぜひ、このライブラリの感想をお知らせください。そして GitHub にフィードバックを残してください。

* この投稿は米国時間 8 月 28 日、Software Engineer である Ian Talarico によって投稿されたもの(投稿はこちら)の抄訳です。

- By Ian Talarico, Software Engineer

投稿先