202202 open telemetry .net handson

スライド概要

OpenTelemety .NET ハンズオン資料

profile-image

Takayoshi Tanaka

@tanaka_733

作者について:

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

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

公開日

2022-02-23 17:19:00

各ページのテキスト

1. OpenTelemetry .NET ハンズオン 2022/02/22 #csharptokyo @tanaka_733

2. 講師紹介 @tanaka_733 New Relic K.K. Lead Technical Support Engineer C# Tokyo運営メンバーの一人です 好きな言語はC# コンテナとパブリッククラウドと量子コンピューターが好物 Microsoft MVP for Azure, Development Technologies Microsoft Certified Cloud Solution Architect Expert Certified Kubernetes Administrator/Application Developer (CKA/CKAD) ©2008–21 New Relic, Inc. All rights reserved 2

3. 事前準備の確認 まだの人は聞きながらセットアップしておいてください ◦ https://github.com/tanaka-takayoshi/opentelemetry-dotnet-labのクローン ◦ .NET 6 SDKのインストール ◦ handson1/handson1.sln の起動確認 ◦ connpassのページにあるNew Relicのログイン情報とAPIキーのメモ 提供しているNew Relicアカウントは1週間程度使えますが、 その後無効化します。 継続的に使いたい方は無償のStandard Tierの登録を検討ください。

4. 今日のテーマ OpenTelemetry .NETを試してみよう OpenTelemetryの概要をしる OpenTelemetry .NETの構造をしる

5. Agenda OpenTelemetryとは ◦ OpenTelemetryとは ◦ OpenTelemetryの生まれた背景 OpenTelemetryの構造 ◦ OpenTelemetryが計測するテレメトリーデータ ◦ OpenTelemetryの構成要素 OpenTelemetry .NETで計装するには ◦ ◦ ◦ ◦ 計装とは OpenTelemetry .NETの仕組み 計装の実際 データの送信とコレクター

6. OpenTelemetryとは オ ブザー バビ リティ の新 しい標 準

7. OpenTelemetryとは オブザーバビリティのために テレメトリーデータを生成し管理するための新しい標準 オブザーバビリティ= アプリケーション(サービス)に問題が起きているか、なぜ起きているかを把握できる こと テレメトリーデータ=アプリケーションの状態を把握するためのデータ 新しい標準=OSSで広く使われるCNCFプロジェクト オブザーバビリティについては以前のC# Tokyoでのセッションでまとめました https://www.slideshare.net/tanakata/202109-c

8. OpenTelemetryの生まれた背景 ベンダーサービスが先行し、データモデルが固有化 Vendor X Agent Agentの移行は 手間がかかる Vendor Y Agent Vendor X backend 異なるベンダーには 送信できない Vendor Y backend

9. OpenTelemetryの生まれた背景 ライブラリや利用しているクラウドサービスを別サービスで再利用したい場合、 Agent固有の計測用のコードが移植の妨げに Vendor X Agent API Vendor Y Agent ライブラ リA ライブラ リA サービス P サービス Q

10. OpenTelemetryの特徴 ベンダー ニュートラル 単一のベンダーに 依存しない 普遍性 end to endの実装 将来性 さまざまな言語、 フレームワークに対応 データの生成から、収集、 処理、送信まで対応 進化する標準 活発なOSSプロジェクト

11. OpenTelemetryの構造

12. 計測するテレメトリーデータは3種類 トレース (特に分散トレース) • システムへのリクエス トの一覧のライフサイ クル情報 • 分散トレースは特に複 数のシステムをまたい だライフサイクル • エラーやパフォーマン ス問題が起きた場所を 特定する情報を含む メトリクス ログ • ある状態を表す 集約された統計値 • プロセスから生じた 詳細なデバッグ情報 • CPU利用率、 リクエスト経過時間、 データベースクエリ数 など • Error: XXX happened Trace: YYY invoked など

13. トレース(Trace)はスパン(Span)の集合 Span A Span B Span C Span E Span D サービスA Spanの持つ情報 • TraceID/SpanID • ParentID • Name • Start/End Time • Attributes • Events Span P サービスB

14. トレース(Trace) root Span (必ず1つだけ存在) Span A Caller Span (呼び出しスパン) AのChild Span Span B Span C Span E Span D サービスA Callee Span (呼び出されたス パン) Span P サービスB

15. トレース time Span A Span B C Span D Span E Span P ボトルネック(どこで経過時間がかかっているか)を見つけるためには、 横軸を実時間にしたこのような表現が使われることが多い。 上の図では、SpanP、つぎにSpanDがボトルネックだとわかる

16. Notifica tion サービスの論理的なつながりとトレース Ext Client Purchase API Client API Purchase DB DB Notification Ext User DB User 分散システムにおいては、トレースからどのように呼び出されたか(システムの依存関係) を見つけることもできる。

17. メトリクス ある時点でのサービスに関する測定値から取得した、 あらかじめ集計された時系列データ 例えば… ◦ CPUとメモリの使用率 ◦ リクエスト経過時間 ◦ リクエストサイズ 属性によりメタデータを追加し、ファセット(グルーピング)できるように ◦ URLごとの経過時間どのAPIが最も遅いか ◦ ユーザーごとのアイテム利用数ユーザー属性による利用傾向

18. ログ タイムスタンプ付きのテキストレコード トレースやメトリクスより歴史が長いため従来のログとの共存が課題: ◦ メトリクスやトレースと関連づけるためのコンテキストとなるメタデータが必要 ◦ 歴史的に多くの言語、ツールによる実装が幅広く使われている ◦ メッセージに加えてログレベル、ログメッセージまでも統一したデータモデルがない OpenTelemetryの戦略 ◦ 既存のロギングライブラリやツールを採用しつつ、 ログデータにコンテキスト情報を追加する仕組みを提供する。 例: ASP. NET Core向けのOTel .NET では ILoggerと連携

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

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

21. OpenTelemetryのSDK 異なる言語・フレームワークでの テレメトリーデータの標準化をするため、 APIにより仕様を定めている API仕様を言語ごとに実装しているのがSDK SDKは必要最低限のデータ形式と収集の操作を提供している

22. OpenTelemetry .NETで計装するには

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

24. contrib あるライブラリへの自動計装の提供など、実験的な意味合いがあるライブラリを提供 今回のハンズオンではEntity Framework Coreの計装部分に利用

25. ハンズオンのお題 (OTel .NETの計装) 1. ASP.NET CoreとHTTPClientでの自動計装によるトレースの計装 2. 自動計装されたトレース詳細な情報を追加 3. SQL呼び出しなど一部対応が必要なトレースの自動計装 (例: contribによるEF Coreの計装) 4. ILoggerでのログ出力をOTelで収集 https://github.com/tanaka-takayoshi/opentelemetry-dotnetlab/blob/main/handson1/Handson1.md

26. ハンズオンでやらないお題 メトリクスの収集 サポートされないライブラリにおけるトレースを一から手動計装 より詳細なログの収集 コレクターの計画とセットアップ etc

27. 宣伝 OpenTelemetry .NETについてブログでまとめています https://tech.tanaka733.net/entry/2022/01/opentelemetry-dotnet-01 今後扱う予定のテーマ ◦ より詳細な計装コード ◦ .NET Frameworkでの計装 ◦ GUI(クライアントアプリ)での計装 ◦ ライブラリ開発者向けの計装 ◦ コレクターの設計と展開

28. Thank you.