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

スライド概要

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

profile-image

Takayoshi Tanaka

@tanaka_733

作者について:

New Relic株式会社、Lead Technical Support Engineer.

スライド一覧
シェア
埋め込む»CMSなどでJSが使えない場合

公開日

2022-04-28 20:31:00

各ページのテキスト

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. おわり