狠狠撸

狠狠撸Share a Scribd company logo
OpenTelemetry .NET
ハンズオン
2022/02/22 #csharptokyo
@tanaka_733
?2008–21 New Relic, Inc. All rights reserved
講師紹介
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)
事前準備の確認
まだの人は聞きながらセットアップしておいてください
? https://github.com/tanaka-takayoshi/opentelemetry-dotnet-labのクローン
? .NET 6 SDKのインストール
? handson1/handson1.sln の起動確認
? connpassのページにあるNew Relicのログイン情報とAPIキーのメモ
提供しているNew Relicアカウントは1週間程度使えますが、
その後無効化します。
継続的に使いたい方は無償のStandard Tierの登録を検討ください。
今日のテーマ
OpenTelemetry .NETを試してみよう
OpenTelemetryの概要をしる
OpenTelemetry .NETの構造をしる
Agenda
OpenTelemetryとは
? OpenTelemetryとは
? OpenTelemetryの生まれた背景
翱辫别苍罢别濒别尘别迟谤测の构造
? OpenTelemetryが計測するテレメトリーデータ
? OpenTelemetryの構成要素
OpenTelemetry .NETで計装するには
? 計装とは
? OpenTelemetry .NETの仕組み
? 計装の実際
? データの送信とコレクター
OpenTelemetryとは
オブザーバビリティの新しい標準
OpenTelemetryとは
オブザーバビリティのために
テレメトリーデータを生成し管理するための新しい標準
オブザーバビリティ=
アプリケーション(サービス)に問題が起きているか、なぜ起きているかを把握できる
こと
テレメトリーデータ=アプリケーションの状態を把握するためのデータ
新しい標準=OSSで広く使われるCNCFプロジェクト
オブザーバビリティについては以前のC# Tokyoでのセッションでまとめました
/tanakata/202109-c
OpenTelemetryの生まれた背景
ベンダーサービスが先行し、データモデルが固有化
Vendor X Agent
Vendor Y Agent
Vendor X backend
Vendor Y
backend
Agentの移行は
手間がかかる
異なるベンダーには
送信できない
OpenTelemetryの生まれた背景
ライブラリや利用しているクラウドサービスを別サービスで再利用したい場合、
Agent固有の計測用のコードが移植の妨げに
サービス Q
サービス P
ライブラ
リA
Vendor X
Agent
ライブラ
リA
Vendor Y
Agent
API
OpenTelemetryの特徴
end to endの実装
データの生成から、収集、
処理、送信まで対応
普遍性
さまざまな言語、
フレームワークに対応
将来性
進化する標準
活発なOSSプロジェクト
ベンダー
ニュートラル
単一のベンダーに
依存しない
翱辫别苍罢别濒别尘别迟谤测の构造
計測するテレメトリーデータは3種類
? ある状態を表す
集約された統計値
? CPU利用率、
リクエスト経過時間、
データベースクエリ数
など
? プロセスから生じた
詳細なデバッグ情報
? Error: XXX happened
Trace: YYY invoked
など
メトリクス ログ
? システムへのリクエス
トの一覧のライフサイ
クル情報
? 分散トレースは特に複
数のシステムをまたい
だライフサイクル
? エラーやパフォーマン
ス問題が起きた場所を
特定する情報を含む
トレース
(特に分散トレース)
トレース(Trace)はスパン(Span)の集合
Span A
Span B
Span C Span D
Span E
Span P
サービスA サービスB
Spanの持つ情報
? TraceID/SpanID
? ParentID
? Name
? Start/End Time
? Attributes
? Events
トレース(Trace)
Span A
Span B
Span C Span D
Span E
Span P
サービスA サービスB
root Span
(必ず1つだけ存在)
AのChild
Span
Caller Span
(呼び出しスパン)
Callee Span
(呼び出されたス
パン)
トレース
time
Span A
Span B
C Span D
Span E
Span P
ボトルネック(どこで経過時間がかかっているか)を見つけるためには、
横軸を実時間にしたこのような表現が使われることが多い。
上の図では、SpanP、つぎにSpanDがボトルネックだとわかる
サービスの論理的なつながりとトレース
Client
Notification
Purchase
DB
API
User
DB Ext
Client
API
User
Purchase
DB
Notifica
tion
Ext
分散システムにおいては、トレースからどのように呼び出されたか(システムの依存関係)
を見つけることもできる。
メトリクス
ある時点でのサービスに関する測定値から取得した、
あらかじめ集計された時系列データ
例えば…
? CPUとメモリの使用率
? リクエスト経過時間
? リクエストサイズ
属性によりメタデータを追加し、ファセット(グルーピング)できるように
? URLごとの経過時間?どのAPIが最も遅いか
? ユーザーごとのアイテム利用数?ユーザー属性による利用傾向
ログ
タイムスタンプ付きのテキストレコード
トレースやメトリクスより歴史が長いため従来のログとの共存が課題:
? メトリクスやトレースと関連づけるためのコンテキストとなるメタデータが必要
? 歴史的に多くの言語、ツールによる実装が幅広く使われている
? メッセージに加えてログレベル、ログメッセージまでも統一したデータモデルがない
OpenTelemetryの戦略
? 既存のロギングライブラリやツールを採用しつつ、
ログデータにコンテキスト情報を追加する仕組みを提供する。
?例: ASP. NET Core向けのOTel .NET では ILoggerと連携
OpenTelemetryの構成要素
Instrumentation
19
Collector
(Gateway)
Grafana,
New Relic
などのバックエンド
アプリ (C#)
OTel SDK
Collector
(Agent)
Jaegarなど
その他のソース
Instrumentation
アプリ (Java)
OTel SDK
Collector
(Agent)
OpenTelemetry
の構成要素
異なる言語でも
APIで
標準化され、
言語ごとに
SDKで実装
送信するデータの形式を
OTLPとして定める
OpenTelemetryのコレクター
Instrumentation
20
Collector
(Gateway)
Grafana,
New Relic
などのバックエンド
アプリ (C#)
OTel SDK
Collector
(Agent)
OpenTelemetry
の構成要素
テレメトリーデータは大まかに以下の3通りの送信方法がある。
1. SDKから直接送信 (今日のハンズオンでやります)
2. アプリと同じホストのコレクターが送信
3. アプリと同じホストのコレクターとGatewayとなるコレクター
を経由して送信
①
②
③
OpenTelemetryのSDK
異なる言語?フレームワークでの
テレメトリーデータの標準化をするため、
APIにより仕様を定めている
API仕様を言語ごとに実装しているのがSDK
SDKは必要最低限のデータ形式と収集の操作を提供している
OpenTelemetry .NETで計装するには
OpenTelemetryでの計装
計装…テレメトリーデータの計測コードを実装すること
自動と手動の2通りの方法を提供
自動計装…
最低限の設定コードで計装できる。ASP.NET CoreやHTTPClientといっ
た広く使われるフレームワーク、ライブラリに提供
手動計装…
SDKの操作を使って、自分で細かく計装する必要あり。自動計装で
サポートしていないライブラリやより詳細な計装をする場合に行う。
contrib
あるライブラリへの自動計装の提供など、実験的な意味合いがあるライブラリを提供
今回のハンズオンではEntity Framework Coreの計装部分に利用
ハンズオンのお題 (OTel .NETの計装)
1. ASP.NET CoreとHTTPClientでの自動計装によるトレースの計装
2. 自動計装されたトレース詳細な情報を追加
3. SQL呼び出しなど一部対応が必要なトレースの自動計装
(例: contribによるEF Coreの計装)
4. ILoggerでのログ出力をOTelで収集
https://github.com/tanaka-takayoshi/opentelemetry-dotnet-
lab/blob/main/handson1/Handson1.md
ハンズオンでやらないお題
メトリクスの収集
サポートされないライブラリにおけるトレースを一から手動計装
より詳細なログの収集
コレクターの計画とセットアップ
etc
宣伝
OpenTelemetry .NETについてブログでまとめています
https://tech.tanaka733.net/entry/2022/01/opentelemetry-dotnet-01
今後扱う予定のテーマ
? より詳細な計装コード
? .NET Frameworkでの計装
? GUI(クライアントアプリ)での計装
? ライブラリ開発者向けの計装
? コレクターの設計と展開
Thank you.

More Related Content

202202 open telemetry .net handson