ここでいちどおさらいです。
OpenTelemetry .NETの現在地
GitHubのページで確認できる通り、Logs、Metrics、Tracesの3要素ともStableになりました。
が、注意書きにある通り、ILogger
などのログフレームワークから出力されたログを取り込む OpenTelemetryLoggerProvider
はStableですが、これをOTLP (OpenTelemetry Protocol)でエクスポートする部分はまだStableになっていません。また、HttpClientなどの自動計装などもstableなバージョンが出ていないものもあり、使い方によってはStableではないものを使う必要がでてきます。
OpenTelemetry .NETの始め方
まずはドキュメントのGetting Startedを読みましょう。
Consoleアプリケーションを計装してテレメトリーデータをConsole出力するので、データ保存や可視化の機能は試せませんが、コンソール内で完結するので使い方を把握するのに最適です。
ASP.NET Coreで一通り試す
次にLogs、Metrics、Tracesの3種類のデータを収集し、オブザーバビリティバックエンドを利用してデータ保存や可視化の機能まで試したい場合、ASP.NET Coreのアプリで試すのが一番よいと思っています。ここまで取り上げてきた機能を中心に、ASP.NET CoreにMetrics、Logs、Tracesを一通り設定し、OTEL ExporterでエクスポートしているサンプルをGitHubに公開しました。
エクスポート先はotel/opentelemetry-collector
イメージを使ったDockerコンテナを想定していて、New Relic に送信するサンプルコマンドも上げています。オブザーバビリティバックエンド側で収集したデータを可視化できます。一例をあげてみます。
Tracesをもとにしたリクエスト数や1トランザクションあたりの平均所要時間のグラフ。
同じくTracesを基にした分散トレーシング。
Microsoft.Extensions.Loggingを使ったログ出力を、ログ処理部分のコード変更なしにOTELで収集できるロギング。
また、このロギングではTraceを識別するidが自動で付与されるため、トランザクションごとに出力されたログや例外処理時のログをすぐに特定できます。
ASP.NET CoreのRuntime Metricsを連携したMetrics。
さてこのコードの中で以前のブログで説明した部分が変わっている部分があります。Spanに例外状態を設定する部分です。
以前のブログでは、以下のコードではSpanの状態が例外ステータスにならなかったのが、今回検証したところ修正されていました。
activity?.SetStatus(ActivityStatusCode.Error, "error happened.");
このようにこのコードだけでSpanが例外状態となります。
さて、次回からは別のライブラリやフレームワークを使うときにどこまでOpenTelemetry .NETで計測できるか試してみたいと思います。