OpenTelemetry .NETの追加コード不要な計装ライブラリの最初のリリースが出たので試してみた

4.4K Views

April 28, 22

スライド概要

2022/04/28 【オンライン】.NET 5 終了目前! C# Tokyo イベント での発表スライドです。

profile-image

New Relic株式会社、Technical Support Manager.

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

OpenTelemetry .NETの 追加コード不要な計装ライブラリの 最初のリリースが出たので試してみた C# To ky o 【 オ ン ライ ン】. NE T 5 終 了 目 前 ! C# To ky o イ ベ ン ト 2 0 2 2 /04/28 @ t a n a ka_7 33

2.

自己紹介: @tanaka_733 ◦ New Relic K.K. テクニカルサポートマネージャー ◦ C# Tokyo運営メンバー ◦ Microsoft MVP for Azure, Development Technologies ◦ Microsoft Certified Cloud Solution Architect Expert ◦ Certified Kubernetes Administrator & Application Developer (CKA/CKAD)

3.

OpenTelemetryとは オブザーバビリティのために テレメトリーデータを生成し管理するための新しい標準 オブザーバビリティ= アプリケーション(サービス)に問題が起きているか、なぜ起き ているかを把握できること テレメトリーデータ=アプリケーションの状態を把握するためのデータ 新しい標準=OSSで広く使われるCNCFプロジェクト (参考)先日のハンズオンの資料 https://www.docswell.com/s/tanaka_733/KE17N5-202202-open-telemetry-net-handson#p2

4.

OpenTelemetryの構成要素 Jaegarなどその他のソース アプリ (Java) OTel SDK 異なる言語でも APIで 標準化され、 言語ごとに SDKで実装 Collector (Agent) Instrumentation アプリ (C#) Collector (Gateway) Grafana, New Relic などのバックエンド 送信するデータの形式を OTLPとして定める OTel SDK Collector (Agent) Instrumentation OpenTelemetry 4 の構成要素

5.

OpenTelemetryのコレクター テレメトリーデータは大まかに以下の3通りの送信方法がある。 1. SDKから直接送信 2. アプリと同じホストのコレクターが送信 3. アプリと同じホストのコレクターとGatewayとなるコレクター を経由して送信 アプリ (C#) ① OTel SDK ② Collector (Agent) Instrumentation ③ Collector (Gateway) Grafana, New Relic などのバックエンド OpenTelemetry 5 の構成要素

6.

OpenTelemetryでの計装 計装…テレメトリーデータの計測コードを実装すること 自動と手動の2通りの方法を提供 自動計装… 最低限の設定コードで計装できる。ASP.NET CoreやHTTPClientといっ た広く使われるフレームワーク、ライブラリに提供 手動計装… SDKの操作を使って、自分で細かく計装する必要あり。自動計装で サポートしていないライブラリやより詳細な計装をする場合に行う。

7.

ハンズオンでやったのは自動計装 自動とはいえ、こんなコードを書く必要がありました

8.

追加コードが不要な計装ライブラリ GitHub - open-telemetry/opentelemetry-dotnet-instrumentation: OpenTelemetry .NET AutoInstrumentation 技術的には.NETのプロファイルAPIを利用しています プロファイリングの概要 - .NET Framework | Microsoft Docs

9.

最初のリリースが出ました! Releases · open-telemetry/opentelemetry-dotnet-instrumentation · GitHub

10.

最初のリリースなので制約もありま す 環境変数をたくさん設定しないといけない ◦ ASP.NET (.NET Framework)もサポートしているけど、 IIS10でないとプロセス単位の環境変数が設定できない データの送信(Export先)はOTLP、Jaeger、Zipkin、Consoleのみサポート ◦ OTLPは認証ヘッダーの追加はできない模様 ◦ 詳しくは次のページで (手元で動作確認する限り)Macでは動作しなかった。Windowsでは確認ずみ。

11.

認証ヘッダーなしで送信可能なのは? ①で認証が不要な場合(そんなバックエンドがあるのかは謎。New Relicは不可) Agent方式のコレクターを経由すれば②や③の方法で可能。 • 手軽に利用できるAgentはOTelプロジェクトが提供しているDockerイメージだが、 grpcのみサポート。 この場合、プロジェクトにgrpcのライブラリを追加する必要あり • Windows環境の場合、手軽にセットアップできるAgentがないのでは…? アプリ (C#) OTel SDK ① ② Collector (Agent) Instrumentation ③ Grafana, New Relic などのバックエンド Collector (Gateway) 11

12.

動作させる手順 READMEとConfig一覧を確認 GitHub - open-telemetry/opentelemetry-dotnet-instrumentation: OpenTelemetry .NET AutoInstrumentation opentelemetry-dotnet-instrumentation/config.md at main · open-telemetry/opentelemetrydotnet-instrumentation · GitHub おおまかには 1. Export先とCollectorを準備 1. 今回は、otel/opentelemetry-collector イメージをローカルで動かして、New Relicに送信 2. ビルド済みのバイナリをダウンロードして適当な場所に展開 3. 環境変数をセットして計測対象のアプリを起動

13.

必要な環境変数

14.

計測できました!

15.

さいごに こまかい設定手順はあとでブログにまとめます

16.

おわり