SlideShare 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の構成要素
OpenTelemetry .NETで計装するには
◦ 計装とは
◦ OpenTelemetry .NETの仕組み
◦ 計装の実際
◦ データの送信とコレクター
OpenTelemetryとは
オブザーバビリティの新しい標準
OpenTelemetryとは
オブザーバビリティのために
テレメトリーデータを生成し管理するための新しい標準
オブザーバビリティ=
アプリケーション(サービス)に問題が起きているか、なぜ起きているかを把握できる
こと
テレメトリーデータ=アプリケーションの状態を把握するためのデータ
新しい標準=OSSで広く使われるCNCFプロジェクト
オブザーバビリティについては以前のC# Tokyoでのセッションでまとめました
https://www.slideshare.net/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プロジェクト
ベンダー
ニュートラル
単一のベンダーに
依存しない
OpenTelemetryの構造
計測するテレメトリーデータは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

PPTX
C#エンジニアのためのdocker kubernetesハンズオン (再)
PDF
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
PPTX
最近のQ#について
PPTX
C# Tokyo コミュニティについて
PDF
KustomizeとGitHub Actionsを利用したUbieのデプロイの仕組み
PDF
20210129 azure webapplogging
PDF
ゼロから始めるQ#
PDF
Google Container Engine を始めてみよう
C#エンジニアのためのdocker kubernetesハンズオン (再)
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
最近のQ#について
C# Tokyo コミュニティについて
KustomizeとGitHub Actionsを利用したUbieのデプロイの仕組み
20210129 azure webapplogging
ゼロから始めるQ#
Google Container Engine を始めてみよう

What's hot (20)

PDF
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
PDF
NGINX Ingress Controller with WAF for Kubernetes
PDF
~ Build と言えば やっぱり Developer! ~ Microsoft 開発ツール最新アップデート
PDF
NewRelic x Terraform Cloud で Observability as Code
PDF
Certified XXX まわりのはなし Kubernetes Invitational Meetup #2
PPTX
Reactive Workflow Argo Eventsの紹介
PPTX
5分でわかる Capabilities と Privilege + KubeCon Recap
PPTX
TypeScriptでCLIアプリケーション開発
PDF
.NET の過去、現在、そして未来 ~ .NET 最新アップデート
PDF
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた
PDF
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...
PDF
Kubernetesクラスタバージョンアップを支える技術
PDF
20190725 Argo Project Latest News
PDF
Kubernetesセキュリティの歩き方
PPTX
Jenkins X on GKE & Rancher2.0 on ORACLE Cloud
PDF
LIFULLの全社アプリケーション実行基盤 KEEL について
PDF
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
PPTX
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
PDF
ChainerMNをDocker containerで動かす
PDF
DevOps with GitLabで始める簡単DevOps
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
NGINX Ingress Controller with WAF for Kubernetes
~ Build と言えば やっぱり Developer! ~ Microsoft 開発ツール最新アップデート
NewRelic x Terraform Cloud で Observability as Code
Certified XXX まわりのはなし Kubernetes Invitational Meetup #2
Reactive Workflow Argo Eventsの紹介
5分でわかる Capabilities と Privilege + KubeCon Recap
TypeScriptでCLIアプリケーション開発
.NET の過去、現在、そして未来 ~ .NET 最新アップデート
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた
Recap: [Code fresh] Deploying to kubernetes thousands of times per day @kuber...
Kubernetesクラスタバージョンアップを支える技術
20190725 Argo Project Latest News
Kubernetesセキュリティの歩き方
Jenkins X on GKE & Rancher2.0 on ORACLE Cloud
LIFULLの全社アプリケーション実行基盤 KEEL について
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
ChainerMNをDocker containerで動かす
DevOps with GitLabで始める簡単DevOps
Ad

More from Takayoshi Tanaka (20)

PDF
deep dive distributed tracing
PPTX
202109-New_Relic-for-csharp-engineers
PDF
20201127 .NET 5
PPTX
Unity(再)入門
PDF
SRENEXT 2020 [B5] New RelicのSREに学ぶ SREのためのNew Relic活用法
PDF
20191024 Get Start gRPC with ASP.NET
PDF
New Relicで始める、.NET Applications on AWSのObservability
PPTX
20190806 Q# Measurements
PPTX
C#エンジニアのためのdocker kubernetesハンズオン
PDF
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
PDF
Try! Visual Studio 209 git feature
PDF
Q#基礎 ver1.1
PDF
(過去バージョン) Q#基礎 ver1.0
PDF
New features of Azure Cloud Provider in OpenShift Container Platform 3.10
PDF
New features of Azure Cloud Provider at OCP 3.10
PDF
Open shift on azure stack
PPTX
Introduction to SQL Server on RHEL
PPTX
Log in to a Linux VM in Azure using AAD authentication
PDF
kubernetes on Azure 最新情報
PDF
[量子コンピューター勉強会資料] マヨラナ粒子によるスケーラブルな量子コンピューターの設計
deep dive distributed tracing
202109-New_Relic-for-csharp-engineers
20201127 .NET 5
Unity(再)入門
SRENEXT 2020 [B5] New RelicのSREに学ぶ SREのためのNew Relic活用法
20191024 Get Start gRPC with ASP.NET
New Relicで始める、.NET Applications on AWSのObservability
20190806 Q# Measurements
C#エンジニアのためのdocker kubernetesハンズオン
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
Try! Visual Studio 209 git feature
Q#基礎 ver1.1
(過去バージョン) Q#基礎 ver1.0
New features of Azure Cloud Provider in OpenShift Container Platform 3.10
New features of Azure Cloud Provider at OCP 3.10
Open shift on azure stack
Introduction to SQL Server on RHEL
Log in to a Linux VM in Azure using AAD authentication
kubernetes on Azure 最新情報
[量子コンピューター勉強会資料] マヨラナ粒子によるスケーラブルな量子コンピューターの設計
Ad

202202 open telemetry .net handson