Slide 1

Slide 1 text

C# ではじめる OpenTelemetry .NET ラボ 2023/12/16 何縫ねの。

Slide 2

Slide 2 text

自己紹介 1 • 所属: NTTコミュニケーションズ イノベーションセンター • 趣味: C#, OSS, ドール, 一眼(α7 IV) • 執心領域 • C# ⇔ TypeScript • SignalR 何縫ねの。 nenoNaninu nenoMake ブログ https://blog.neno.dev その他 https://neno.dev

Slide 3

Slide 3 text

OSS 紹介 2 属性を付与するだけ Tapper • C# の型定義から TypeScript の型定義を生成する .NET Tool/ library • JSON / MessagePack 対応! https://github.com/nenoNaninu/Tapper

Slide 4

Slide 4 text

OSS 紹介 3 • C# の SignalR Client を強く型付けするための Source Generator TypedSignalR.Client Before After (using TypedSignalR.Client) こんな SignalR の Hub と Receiver の interface が あったとして… 脱文字列! 全てが強く型付け! https://github.com/nenoNaninu/TypedSignalR.Client

Slide 5

Slide 5 text

4 • TypeScript の SignalR Client を強く型付けするための .NET Tool / library TypedSignalR.Client.TypeScript Before After (using TypedSignalR.Client.TypeScript) 脱文字列! 全てが強く型付け! TypeScript 用の型を C# から自動生成 MessagePack Hub Protocol 対応! https://github.com/nenoNaninu/TypedSignalR.Client.TypeScript 属性を付与するだけ! OSS 紹介

Slide 6

Slide 6 text

5 • SignalR 使ったアプリを快適に開発するための GUI を自動生成する library • 2 step で利用可能! • http pipeline に middleware の追加 • Hub と Receiver を定義してる interface に属性を付与 • JWT 認証 サポート • パラメータのユーザ定義型サポート • JSON で入力! SignalR 版 SwaggerUI TypedSignalR.Client.DevTools https://github.com/nenoNaninu/TypedSignalR.Client.DevTools OSS 紹介

Slide 7

Slide 7 text

お品書き 6 • OpenTelemetry とは • OpenTelemetry Collector • C#/ASP.NET Core での使い方 • W3C Trace Context • Example (C# + collector + backend) • SignalR + OpenTelemetry

Slide 8

Slide 8 text

OpenTelemetry とは 7

Slide 9

Slide 9 text

OpenTelemetry とは 8 • Observability のためには テレメトリデータが重要 • トレース • メトリクス • ログ • テレメトリに関わる様々な仕様を標準化 + 各言語向けに実装 • 以前は各 OSS (e.g. Jaeger, Prometheus) 依存の仕様あるいは APM ベンダ依存の仕様だった。 • CNCF のプロジェクトの1つ。 OpenTelemetry is an Observability framework and toolkit https://opentelemetry.io/docs/specs/status/ 公式の言 それぞれを Signal という

Slide 10

Slide 10 text

OpenTelemetry とは 9 • 全てのコンポーネントの仕様 • テレメトリデータのプロトコル • テレメトリデータに関する意味的規約 (semantic conventions) • どのようにテレメトリデータの生成するかの API • 仕様に沿った各言語に対する SDK の実装 • 広く使われているライブラリ向けの計装エコシステム • コードを変更する事なくテレメトリデータを生成するための自動計装 • テレメトリデータのプロキシ (OpenTelemetry Collector) • 様々なツール (OpenTelemetry Operator for Kubernetes など) プロジェクトの主要なコンポーネント https://opentelemetry.io/docs/what-is-opentelemetry/

Slide 11

Slide 11 text

OpenTelemetry とは 10 https://opentelemetry.io/docs/specs/otel/overview/ OpenTelemetry における言葉 • API • API packages consist of the cross-cutting public interfaces used for instrumentation. • SDK • The SDK is the implementation of the API provided by the OpenTelemetry project. • Within an application, the SDK is installed and managed by the application owner. • Instrumentation authors MUST NOT directly reference any SDK package of any kind, only the API.

Slide 12

Slide 12 text

OpenTelemetry とは 11 https://opentelemetry.io/docs/specs/otel/overview/ OpenTelemetry における言葉 • API • API packages consist of the cross-cutting public interfaces used for instrumentation. • SDK • The SDK is the implementation of the API provided by the OpenTelemetry project. • Within an application, the SDK is installed and managed by the application owner. • Instrumentation authors MUST NOT directly reference any SDK package of any kind, only the API. NuGet のパッケージと 対応させると分かりやすい

Slide 13

Slide 13 text

OpenTelemetry とは 12 https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.6.0/src/OpenTelemetry.Api/README.md https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.6.0/src/OpenTelemetry/README.md NuGet パッケージとの対応 • API : OpenTelemetry.Api https://www.nuget.org/packages/OpenTelemetry.Api/ • The API only surfaces necessary abstractions to instrument an application/library. • SDK : OpenTelemetry https://www.nuget.org/packages/OpenTelemetry/ • OpenTelemetry SDK is a reference implementation of the OpenTelemetry API. • It implements the Tracing API, the Metrics API, and the Context API. • This SDK also supports ILogger integration.

Slide 14

Slide 14 text

OpenTelemetry とは 13 https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.6.0/src/OpenTelemetry.Api/README.md https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.6.0/src/OpenTelemetry/README.md NuGet パッケージとの対応 • API : OpenTelemetry.Api https://www.nuget.org/packages/OpenTelemetry.Api/ • The API only surfaces necessary abstractions to instrument an application/library. • SDK : OpenTelemetry https://www.nuget.org/packages/OpenTelemetry/ • OpenTelemetry SDK is a reference implementation of the OpenTelemetry API. • It implements the Tracing API, the Metrics API, and the Context API. • This SDK also supports ILogger integration. 要するに Xxx と Xxx.Abstractions で パッケージ分けるよくある構成

Slide 15

Slide 15 text

OpenTelemetry とは 14 https://opentelemetry.io/docs/specs/status/ https://github.com/open-telemetry/opentelemetry-specification/pull/3376 仕様のステータス

Slide 16

Slide 16 text

OpenTelemetry とは 15 https://opentelemetry.io/docs/specs/status/ https://github.com/open-telemetry/opentelemetry-specification/pull/3376 仕様のステータス 2023/4 Logging の Bridge API/SDK の仕様が Experimental から Stable に

Slide 17

Slide 17 text

OpenTelemetry とは 16 https://opentelemetry.io/docs/specs/status/ https://github.com/open-telemetry/opentelemetry-specification/pull/3376 仕様のステータス 2023/4 Logging の Bridge API/SDK の仕様が Experimental から Stable に Bridge API が既存の logger を OpenTelemetry の世界に 統合するための API

Slide 18

Slide 18 text

OpenTelemetry とは 17 https://opentelemetry.io/docs/specs/status/ https://github.com/open-telemetry/opentelemetry-specification/pull/3376 仕様のステータス 2023/4 Logging の Bridge API/SDK の仕様が Experimental から Stable に Bridge API が既存の logger を OpenTelemetry の世界に 統合するための API Microsoft.Extensions.Logging 的には Bridge API が stable になってれば OK

Slide 19

Slide 19 text

OpenTelemetry とは 18 https://opentelemetry.io/docs/instrumentation/#status-and-releases 各言語のサポート状況

Slide 20

Slide 20 text

OpenTelemetry とは 19 https://opentelemetry.io/docs/instrumentation/#status-and-releases 各言語のサポート状況 C# は全て stable !!

Slide 21

Slide 21 text

OpenTelemetry Collector 20

Slide 22

Slide 22 text

OpenTelemetry Collector 21 • 全てのコンポーネントの仕様 • テレメトリデータのプロトコル • テレメトリデータに関する意味的な命名規則 • どのようにテレメトリデータの生成するかの API • 仕様に沿った各言語に対する SDK の実装 • 広く使われているライブラリ向けの計装ライブラリ・エコシステム • コードを変更する事なくテレメトリデータを生成するための自動計装 • テレメトリデータのプロキシ (OpenTelemetry Collector) • 様々なツール (OpenTelemetry Operator for Kubernetes など) プロジェクトの主要なコンポーネント (再掲) https://opentelemetry.io/docs/what-is-opentelemetry/

Slide 23

Slide 23 text

OpenTelemetry Collector 22 • 全てのコンポーネントの仕様 • テレメトリデータのプロトコル • テレメトリデータに関する意味的な命名規則 • どのようにテレメトリデータの生成するかの API • 仕様に沿った各言語に対する SDK の実装 • 広く使われているライブラリ向けの計装ライブラリ・エコシステム • コードを変更する事なくテレメトリデータを生成するための自動計装 • テレメトリデータのプロキシ (OpenTelemetry Collector) • 様々なツール (OpenTelemetry Operator for Kubernetes など) プロジェクトの主要なコンポーネント (再掲) https://opentelemetry.io/docs/what-is-opentelemetry/

Slide 24

Slide 24 text

OpenTelemetry Collector 23 • Application が直接テレメトリデータを各バックエンドに送信 Deployment patterns : Collector なし https://opentelemetry.io/docs/collector/deployment/no-collector/

Slide 25

Slide 25 text

OpenTelemetry Collector 24 • Application が直接テレメトリデータを各バックエンドに送信 Deployment patterns : Collector なし https://opentelemetry.io/docs/collector/deployment/no-collector/ テレメトリデータを取るのに OpenTelemetry SDK を用いる

Slide 26

Slide 26 text

OpenTelemetry Collector 25 • Application が直接テレメトリデータを各バックエンドに送信 Deployment patterns : Collector なし https://opentelemetry.io/docs/collector/deployment/no-collector/ テレメトリデータを取るのに OpenTelemetry SDK を用いる 送信するのに各バックエンド用のプロトコルを用いる。 OpenTelemetry Protocol (OTLP) を用いるとは限らない。

Slide 27

Slide 27 text

OpenTelemetry Collector 26 • Application が直接テレメトリデータを各バックエンドに送信 Deployment patterns : Collector なし テレメトリデータを取るのに OpenTelemetry SDK を用いる 送信するのに各バックエンド用のプロトコルを用いる。 OpenTelemetry Protocol (OTLP) を用いるとは限らない。 https://opentelemetry.io/docs/collector/deployment/no-collector/ App が各バックエンドに 依存してしまう事になってしまう

Slide 28

Slide 28 text

OpenTelemetry Collector 27 • Application が直接テレメトリデータを各バックエンドに送信 Deployment patterns : Collector なし テレメトリデータを取るのに OpenTelemetry SDK を用いる 送信するのに各バックエンド用のプロトコルを用いる。 OpenTelemetry Protocol (OTLP) を用いるとは限らない。 https://opentelemetry.io/docs/collector/deployment/no-collector/ App が各バックエンドに 依存してしまう事になってしまう 使いたい Backend 向け Exporter の (C#)実装が存在しない可能性

Slide 29

Slide 29 text

OpenTelemetry Collector 28 • Application は OpenTelemetry Collector にテレメトリデータを送信 • まさしくテレメトリデータのプロキシ Deployment patterns : Collector あり https://opentelemetry.io/docs/collector/deployment/agent/

Slide 30

Slide 30 text

OpenTelemetry Collector 29 • Application は OpenTelemetry Collector にテレメトリデータを送信 • まさしくテレメトリデータのプロキシ Deployment patterns : Collector あり App から生まれたテレメトリデータは OTLP で送信される https://opentelemetry.io/docs/collector/deployment/agent/

Slide 31

Slide 31 text

OpenTelemetry Collector 30 • Application は OpenTelemetry Collector にテレメトリデータを送信 • まさしくテレメトリデータのプロキシ Deployment patterns : Collector あり 各バックエンド用のプロトコルに https://opentelemetry.io/docs/collector/deployment/agent/ App から生まれたテレメトリデータは OTLP で送信される

Slide 32

Slide 32 text

OpenTelemetry Collector 31 • Application は OpenTelemetry Collector にテレメトリデータを送信 • まさしくテレメトリデータのプロキシ Deployment patterns : Collector あり https://opentelemetry.io/docs/collector/deployment/agent/ App から生まれたテレメトリデータは OTLP で送信される App が依存するのは OpenTelemetry だけ! 各バックエンド用のプロトコルに

Slide 33

Slide 33 text

OpenTelemetry Collector 32 • Application は OpenTelemetry Collector にテレメトリデータを送信 • まさしくテレメトリデータのプロキシ Deployment patterns : Collector あり https://opentelemetry.io/docs/collector/deployment/agent/ App から生まれたテレメトリデータは OTLP で送信される App が依存するのは OpenTelemetry だけ! 各バックエンド用のプロトコルに Collector 向け Exporter の 実装さえあれば 任意の Backend が使える

Slide 34

Slide 34 text

OpenTelemetry Collector 33 • Application は OpenTelemetry Collector にテレメトリデータを送信 • まさしくテレメトリデータのプロキシ Deployment patterns : Collector あり どこにホストするかは 幾つかの選択肢がある https://opentelemetry.io/docs/collector/deployment/agent/ App から生まれたテレメトリデータは OTLP で送信される App が依存するのは OpenTelemetry だけ! 各バックエンド用のプロトコルに Collector 向け Exporter の 実装さえあれば 任意の Backend が使える

Slide 35

Slide 35 text

OpenTelemetry Collector 34 • Receiver • OTLP • Processer • Batch • Filter • Exporter • OTLP • Prometheus • Extensions • HealthCheck Collector は様々なコンポーネントの塊 https://opentelemetry.io/docs/collector/ https://github.com/open-telemetry/opentelemetry-collector https://github.com/open-telemetry/opentelemetry-collector-contrib 他にもコンポーネントはいろいろあるので Repository 覗くと楽しい

Slide 36

Slide 36 text

OpenTelemetry Collector 35 • Collector は様々なコンポーネントの集合体 • コンポーネントによってステータスが異なる • 現状それぞれのコンポーネントの README を見に行く他ない (一覧はない) Collector のステータス https://github.com/open-telemetry/opentelemetry-collector/blob/v0.91.0/exporter/otlpexporter/README.md https://github.com/open-telemetry/opentelemetry-collector/blob/v0.91.0/receiver/otlpreceiver/README.md https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v0.91.0/exporter/prometheusexporter/README.md Logs はまだ beta

Slide 37

Slide 37 text

OpenTelemetry Collector 36 • Docker に config 食わせるのが手っ取り早い • オレオレ processer とか書きたくなったら Go lang で頑張って実装してビルド お手軽な動かし方

Slide 38

Slide 38 text

OpenTelemetry Collector 37 • Docker に config 食わせるのが手っ取り早い • オレオレ processer とか書きたくなったら Go lang で頑張って実装してビルド お手軽な動かし方 Config 書いて

Slide 39

Slide 39 text

OpenTelemetry Collector 38 • Docker に config 食わせるのが手っ取り早い • オレオレ processer とか書きたくなったら Go lang で頑張って実装してビルド お手軽な動かし方 Docker で動かす Config 書いて

Slide 40

Slide 40 text

C#/ASP.NET Core での使い方 39

Slide 41

Slide 41 text

C#/ASP.NET Core での使い方 40 • OpenTelemetry.Extensions.Hosting • OpenTelemetry SDK の Generic Host 統合のパッケージ。 • OpenTelemetry (SDK) に依存している。 • Generic Host 上 で OpenTelemetry 使うならほぼ必須。 • つまり ASP.NET Core で OpenTelemetry 使う上でもほぼ必須。 • OpenTelemetry.Exporter.OpenTelemetryProtocol • テレメトリデータを OTLP でエクスポートするため 最低限必要なパッケージ (SDK + Exporter) https://github.com/open-telemetry/opentelemetry-dotnet

Slide 42

Slide 42 text

C#/ASP.NET Core での使い方 41 • OpenTelemetry.Instrumentation.AspNetCore • ASP.NET Core / Grpc.AspNetCore の inbound に対する計装 • OpenTelemetry.Instrumentation.Http • HttpClient と HttpWebRequest の outbound に対する計装 • OpenTelemetry.Instrumentation.GrpcNetClient • Grpc.Net.Client の outbound に対する計装 最低限必要なパッケージ (Instrumentation) https://github.com/open-telemetry/opentelemetry-dotnet

Slide 43

Slide 43 text

C#/ASP.NET Core での使い方 42 • Npgsql.OpenTelemetry • MySql.Data.OpenTelemetry (GPL-2.0) • OpenTelemetry.Instrumentation.SqlClient • OpenTelemetry.Instrumentation.EntityFrameworkCore • OpenTelemetry.Instrumentation.StackExchangeRedis • OpenTelemetry.Instrumentation.ElasticsearchClient • AspNetCore.SignalR.OpenTelemetry 便利なパッケージ [1] https://github.com/npgsql/npgsql [2] https://github.com/mysql-net/MySqlConnector/blob/2.3.1/docs/content/diagnostics/tracing.md [3] https://github.com/open-telemetry/opentelemetry-dotnet-contrib [4] https://github.com/nenoNaninu/AspNetCore.SignalR.OpenTelemetry

Slide 44

Slide 44 text

C#/ASP.NET Core での使い方 43 • Npgsql.OpenTelemetry • MySql.Data.OpenTelemetry (GPL-2.0) • OpenTelemetry.Instrumentation.SqlClient • OpenTelemetry.Instrumentation.EntityFrameworkCore • OpenTelemetry.Instrumentation.StackExchangeRedis • OpenTelemetry.Instrumentation.ElasticsearchClient • AspNetCore.SignalR.OpenTelemetry 便利なパッケージ [1] https://github.com/npgsql/npgsql [2] https://github.com/mysql-net/MySqlConnector/blob/2.3.1/docs/content/diagnostics/tracing.md [3] https://github.com/open-telemetry/opentelemetry-dotnet-contrib [4] https://github.com/nenoNaninu/AspNetCore.SignalR.OpenTelemetry MySqlConnector (MIT) は パッケージは無いが Tracing は可能[2]

Slide 45

Slide 45 text

C#/ASP.NET Core での使い方 44 • Npgsql.OpenTelemetry • MySql.Data.OpenTelemetry (GPL-2.0) • OpenTelemetry.Instrumentation.SqlClient • OpenTelemetry.Instrumentation.EntityFrameworkCore • OpenTelemetry.Instrumentation.StackExchangeRedis • OpenTelemetry.Instrumentation.ElasticsearchClient • AspNetCore.SignalR.OpenTelemetry 便利なパッケージ [1] https://github.com/npgsql/npgsql [2] https://github.com/mysql-net/MySqlConnector/blob/2.3.1/docs/content/diagnostics/tracing.md [3] https://github.com/open-telemetry/opentelemetry-dotnet-contrib [4] https://github.com/nenoNaninu/AspNetCore.SignalR.OpenTelemetry opentelemetry-dotnet-contrib を 覗くと楽しい MySqlConnector (MIT) は パッケージは無いが Tracing は可能[2]

Slide 46

Slide 46 text

C#/ASP.NET Core での使い方 45 Logging の構成 [1] https://opentelemetry.io/docs/specs/otel/resource/sdk/ [2] https://opentelemetry.io/docs/specs/otel/common/#attribute

Slide 47

Slide 47 text

C#/ASP.NET Core での使い方 46 Logging の構成 A Resource is an immutable representation of the entity producing telemetry as Attributes. [1] [1] https://opentelemetry.io/docs/specs/otel/resource/sdk/ [2] https://opentelemetry.io/docs/specs/otel/common/#attribute

Slide 48

Slide 48 text

C#/ASP.NET Core での使い方 47 Logging の構成 A Resource is an immutable representation of the entity producing telemetry as Attributes. [1] [1] https://opentelemetry.io/docs/specs/otel/resource/sdk/ [2] https://opentelemetry.io/docs/specs/otel/common/#attribute An Attribute is a key-value pair [2]

Slide 49

Slide 49 text

C#/ASP.NET Core での使い方 48 Logging の構成 OTEL_EXPORTER_OTLP_ENDPOINT を 環境変数に設定しておけば 読み込んでくれる A Resource is an immutable representation of the entity producing telemetry as Attributes. [1] [1] https://opentelemetry.io/docs/specs/otel/resource/sdk/ [2] https://opentelemetry.io/docs/specs/otel/common/#attribute An Attribute is a key-value pair [2]

Slide 50

Slide 50 text

C#/ASP.NET Core での使い方 49 Metrics/Tracing の構成

Slide 51

Slide 51 text

C#/ASP.NET Core での使い方 50 Metrics/Tracing の構成 Logging と同様に resource について構成

Slide 52

Slide 52 text

C#/ASP.NET Core での使い方 51 Metrics/Tracing の構成 追加したパッケージに合わせて 拡張メソッドで構成 Logging と同様に resource について構成

Slide 53

Slide 53 text

C#/ASP.NET Core での使い方 52 Metrics/Tracing の構成 追加したパッケージに合わせて 拡張メソッドで構成 Logging と同様に resource について構成 OTEL_EXPORTER_OTLP_ENDPOINT を 環境変数に設定しておけば 読み込んでくれる

Slide 54

Slide 54 text

C#/ASP.NET Core での使い方 53 C# のアプリケーションに OpenTelemetry を導入する事自体は簡単! 独自の計装をする場合も そこまで難しくない

Slide 55

Slide 55 text

Example 54

Slide 56

Slide 56 text

…の前に W3C Trace Context 55

Slide 57

Slide 57 text

W3C Trace Context 56 Span 1 Span 3 Span 5 Span 2 Span 4 Service A Service B Service C Trace HTTP W3C Trace Context

Slide 58

Slide 58 text

W3C Trace Context 57 Span 1 Span 3 Span 5 Span 2 Span 4 Service A Service B Service C Trace HTTP W3C Trace Context W3C Trace Context のより詳細は以下のブログで。 【C#】ASP.NET Core と W3C Trace Context とお手軽ロギング。 https://blog.neno.dev/entry/2023/07/04/181843

Slide 59

Slide 59 text

Example 58

Slide 60

Slide 60 text

• Example を用意しました https://github.com/nenoNaninu/opentelemetry-dotnet-example Example 59 C# + collector + backend で動かしてみよう WebApi OpenTelemetry Collector Prometheus Tempo Loki Grafana OTLP gRPC Service PostgreSQL Redis Request Telemetry

Slide 61

Slide 61 text

• Example を用意しました https://github.com/nenoNaninu/opentelemetry-dotnet-example Example 60 C# + collector + backend で動かしてみよう WebApi OpenTelemetry Collector Prometheus Tempo Loki Grafana OTLP gRPC Service PostgreSQL Redis Request Telemetry お馴染みのテンプレに 少し手を加えただけ トレースを それっぽくするためだけ

Slide 62

Slide 62 text

Example 61 Grafana でみてみる :メトリクス編 https://github.com/dotnet/aspire/tree/main/src/Grafana/dashboards • Prometheus を素朴に見ると… Grafana 上でメトリクスをみるための dashboard の設定が Aspire の中に存在するので拝借する 2つの dashboard の 設定があります

Slide 63

Slide 63 text

Example 62 Grafana でみてみる :メトリクス編 https://github.com/dotnet/aspire/tree/main/src/Grafana アプリケーション全体としての メトリクス

Slide 64

Slide 64 text

Example 63 Grafana でみてみる :メトリクス編 https://github.com/dotnet/aspire/tree/main/src/Grafana エンドポイント単位の メトリクス

Slide 65

Slide 65 text

Example 64 Grafana でみてみる :メトリクス編 https://github.com/dotnet/aspire/tree/main/src/Grafana エンドポイント単位の メトリクス エンドポイントを選択

Slide 66

Slide 66 text

Example 65 Grafana でみてみる : トレース編

Slide 67

Slide 67 text

Example 66 Grafana でみてみる : トレース編 いろいろ条件いれて 検索

Slide 68

Slide 68 text

Example 67 Grafana でみてみる : トレース編 いろいろ条件いれて 検索 Trace ID をクリック

Slide 69

Slide 69 text

Example 68 Grafana でみてみる : トレース編

Slide 70

Slide 70 text

Example 69 Grafana でみてみる : トレース編 ウォーターフォールチャートが 現われる

Slide 71

Slide 71 text

Example 70 Grafana でみてみる : トレース編 ウォーターフォールチャートが 現われる 各スパンを クリックすると

Slide 72

Slide 72 text

Example 71 Grafana でみてみる : トレース編

Slide 73

Slide 73 text

Example 72 Grafana でみてみる : トレース編 各スパンのより 詳細な情報

Slide 74

Slide 74 text

Example 73 Grafana でみてみる : トレース編 各スパンのより 詳細な情報 このあたりを クリックすると…

Slide 75

Slide 75 text

Example 74 Grafana でみてみる : トレース編

Slide 76

Slide 76 text

Example 75 Grafana でみてみる : トレース編 トレースに紐づいた ログを抽出

Slide 77

Slide 77 text

Example 76 Grafana でみてみる : トレース編 トレースに紐づいた ログを抽出 設定次第では スパンで絞り込む事も

Slide 78

Slide 78 text

SignalR + OpenTelemetry 77

Slide 79

Slide 79 text

SignalR + OpenTelemetry 78 SignalR をトレースするぞ! • 適当な Hub を用意して、いざトレース…!

Slide 80

Slide 80 text

SignalR + OpenTelemetry 79 SignalR をトレースするぞ! • Hub のメソッド単位でスパンが切られていない… • 各メソッドの振る舞いが全く分からない • どのメソッドが重たいのかとかも分からない

Slide 81

Slide 81 text

SignalR + OpenTelemetry 80 SignalR をトレースするぞ! • Hub のメソッド単位でスパンが切られていない… • 各メソッドの振る舞いが全く分からない • どのメソッドが重たいのかとかも分からない どうにかせねば…

Slide 82

Slide 82 text

SignalR + OpenTelemetry 81 AspNetCore.SignalR.OpenTelemetry https://github.com/nenoNaninu/AspNetCore.SignalR.OpenTelemetry • トレースのための計装 • 最低限のログ • 接続時 • Transport 層の情報も出力(WebSocket 等) • メソッド呼び出し時 • HubName.MethodName の素朴なログ • メソッド呼び出し毎にログのスコープを追加 • HubName, MethodName, InvocationId を 振っているのでログの検索性が向上 • Duration • 切断時 • 切断時に例外が発生していれば例外もログに出力 2023/11/30 リリース 出来立てほやほや Inspired by HttpLogging ログのスコープについて: 【C#】明日から使える ASP.NET Core ロギング術! https://blog.neno.dev/entry/2023/07/23/202823

Slide 83

Slide 83 text

SignalR + OpenTelemetry 82 AspNetCore.SignalR.OpenTelemetry • 使い方 1. AddSignalR の後に AddHubInstrumentation を追加 2. AddSignalRInstrumentation を WithTracing 内で利用 https://github.com/nenoNaninu/AspNetCore.SignalR.OpenTelemetry

Slide 84

Slide 84 text

SignalR + OpenTelemetry 83 気を取り直して SignalR をトレースするぞ! スパンがメソッド呼び出し毎に 切られるように https://github.com/nenoNaninu/AspNetCore.SignalR.OpenTelemetry

Slide 85

Slide 85 text

SignalR + OpenTelemetry 84 折角なのでもうちょいそれらしいトレースを.. https://github.com/nenoNaninu/AspNetCore.SignalR.OpenTelemetry

Slide 86

Slide 86 text

SignalR + OpenTelemetry 85 折角なのでもうちょいそれらしいトレースを.. https://github.com/nenoNaninu/AspNetCore.SignalR.OpenTelemetry

Slide 87

Slide 87 text

まとめ 86 C# は OpenTelemetry Ready!