Slide 1

Slide 1 text

#aadojo Minimal Observability on Minimal API 2024/10/11 AADojo SP Yuta Matsumura

Slide 2

Slide 2 text

#aadojo 松村 優大 (MLBお兄さん) Currently working for © 2024 Yuta Matsumura. 株式会社オルターブース (Chief Technical Architect) Microsoft MVP for Developer Technologies Microsoft Top Partner Engineer Award GitHub 公認トレーナー C#, PHP, Azure, GitHub が好き #fukuten #devblogradio の中の人 https://linktr.ee/tsubakimoto 2

Slide 3

Slide 3 text

#aadojo 話すこと 1. この10年の .NET のうつりかわり 2. ASP.NET Core Minimal API 3. Minimal API の実装に含めたいあれこれ 4. .NET におけるオブザーバビリティ © 2024 Yuta Matsumura. 3

Slide 4

Slide 4 text

#aadojo © 2024 Yuta Matsumura.

Slide 5

Slide 5 text

#aadojo この10年の .NET のうつりかわり © 2024 Yuta Matsumura. 2015 ~ 2024 4.6 1.0 2.0 3.0 5 6 7 8 9 4.7 4.8 .NET Core .NET 10

Slide 6

Slide 6 text

#aadojo この10年の .NET のうつりかわり © 2024 Yuta Matsumura. 2015 ~ 2024 4.6 1.0 2.0 3.0 5 6 7 8 9 4.7 4.8 2024/11 GA ※現在は RC1 11

Slide 7

Slide 7 text

#aadojo ASP.NET Core Minimal API • ASP.NET Core 6.0 で登場した機能 • 依存関係が最小限の Web API を作成 • ルーティングで構成するエンドポイント定義 © 2024 Yuta Matsumura. 12

Slide 8

Slide 8 text

#aadojo #aadojo Program.cs © 2024 Yuta Matsumura. 13

Slide 9

Slide 9 text

#aadojo © 2024 Yuta Matsumura. 14 https://speakerdeck.com/tsubakimoto_s/minimal-api-to-di-noliang-izu-mihe-wase

Slide 10

Slide 10 text

#aadojo Minimal API の実装に含めたいあれこれ © 2024 Yuta Matsumura. 15

Slide 11

Slide 11 text

#aadojo OpenAPI との統合 • .NET 7 から統合されるようになりました • NuGet: Microsoft.AspNetCore.OpenApi • NuGet: Swashbuckle.AspNetCore • OpenAPI Specification を ソースコードで書く © 2024 Yuta Matsumura. 16 API のエンドポイント、パラメーター、 レスポンスなどに関する仕様を表す形式

Slide 12

Slide 12 text

#aadojo エンドポイントのグルーピング 1つのリソースに対して、複数の HTTP メソッドを定義するために グルーピング機能が利用可能 © 2024 Yuta Matsumura. - /users (GET) - /users/{id} (GET) - /users (POST) - /users/{id} (PUT) - /users/{id} (DELETE) - /users |- / (GET) |- /{id} (GET) |- / (POST) |- /{id} (PUT) |- /{id} (DELETE) グルーピング無し グルーピングあり 17

Slide 13

Slide 13 text

#aadojo #aadojo グルーピングの定義 タグの定義 © 2024 Yuta Matsumura. 18

Slide 14

Slide 14 text

#aadojo タグ無し タグあり © 2024 Yuta Matsumura. 19

Slide 15

Slide 15 text

#aadojo API バージョンの適用 • https://example.com/api/v1/… ←こういうやつ • API バージョンを使用する理由 • 公開済みのエンドポイントに対する変更の影響を受けない(与えない) ように、バージョンという形で区別する仕組み • https://github.com/dotnet/aspnet-api-versioning • NuGet: Asp.Versioning.Http • NuGet: Asp.Versioning.Mvc.ApiExplorer © 2024 Yuta Matsumura. 20

Slide 16

Slide 16 text

#aadojo #aadojo © 2024 Yuta Matsumura. 21

Slide 17

Slide 17 text

#aadojo © 2024 Yuta Matsumura. Swagger UIで API バージョンが指定できない 22

Slide 18

Slide 18 text

#aadojo © 2024 Yuta Matsumura. 既定値を決めたい https://github.com/dotnet/aspnet-api-versioning/blob/main/examples/AspNetCore/WebApi/MinimalOpenApiExample/SwaggerDefaultValues.cs 23

Slide 19

Slide 19 text

#aadojo .NET におけるオブザーバビリティ © 2024 Yuta Matsumura. 24

Slide 20

Slide 20 text

#aadojo オブザーバビリティ (Observability / 可観測性) オブザーバビリティとは、システムが実用的な洞察をどの程度出力できるかを決める性質のことを 指します。 オブザーバビリティにより、ユーザーはシステム外部への出力を元にそのシステムの状態 を理解し、(是正)措置を取ることが可能になります。 (引用: glossary.cncf.io) システムの異常を・・・ • 監視できること • 特定できること • 把握できること © 2024 Yuta Matsumura. 25 ヘルスチェック

Slide 21

Slide 21 text

#aadojo ヘルスチェック サーバーに接続できること © 2024 Yuta Matsumura. 26 Req/Res Req/Res Connect 依存関係 Monitoring システムが正しくユーザーに機能を提供できていること

Slide 22

Slide 22 text

#aadojo ヘルスチェック • NuGet: Microsoft.Extensions.Diagnostics.HealthChecks • チェック結果 • Healthy … 正常状態 • Degraded … チョットアヤシイ (動作はしているが完全な正常ではない状態) • Unhealthy … 異常状態 © 2024 Yuta Matsumura. 27

Slide 23

Slide 23 text

#aadojo #aadojo © 2024 Yuta Matsumura. 28

Slide 24

Slide 24 text

#aadojo OpenTelemetry • https://opentelemetry.io/ja/ • オブザーバビリティを構成するためのフレームワーク 1. コア API 2. インストルメンテーション:メトリック、ログ、分散トレースなどを収集する 3. エクスポーター:Prometheus, Jaeger, OTLP などに接続する • C#, Java, JavaScript, PHP, Python などをサポート © 2024 Yuta Matsumura. 29

Slide 25

Slide 25 text

#aadojo .NET で OpenTelemetry © 2024 Yuta Matsumura. 30 ログ: Microsoft.Extensions.Logging.ILogger メトリック: System.Diagnostics.Metrics.Meter トレース: System.Diagnostics.Activity https://learn.microsoft.com/ja-jp/dotnet/core/diagnostics/observability-with-otel

Slide 26

Slide 26 text

#aadojo OpenTelemetry パッケージ パッケージ名 説明 OpenTelemetry コア OTEL 機能を提供するメイン ライブラリ OpenTelemetry.Instrumentation.AspNetCore ASP.NET Core と Kestrel のインストルメンテーション OpenTelemetry.Instrumentation.GrpcNetClient 送信 gRPC 呼び出しを追跡するための gRPC クライアントの インストルメンテーション OpenTelemetry.Instrumentation.Http 送信 HTTP 呼び出しを追跡するための HttpClient およ び HttpWebRequest のインストルメンテーション OpenTelemetry.Instrumentation.SqlClient データベース操作をトレースするために使用される SqlClient の インストルメンテーション OpenTelemetry.Exporter.Console コンソールのエクスポーターで、一般的にどのテレメトリがエクス ポートされているかを診断するために使用されます OpenTelemetry.Exporter.OpenTelemetryProtocol OTLP プロトコルを使用したエクスポーター OpenTelemetry.Exporter.Prometheus.AspNetCore ASP.NET Core エンドポイントを使用して実装された Prometheus のエクスポーター OpenTelemetry.Exporter.Zipkin Zipkin トレースのエクスポーター © 2024 Yuta Matsumura. 31

Slide 27

Slide 27 text

#aadojo #aadojo の構成 ログを標準出力にエクスポートする構成 © 2024 Yuta Matsumura. 32

Slide 28

Slide 28 text

#aadojo #aadojo © 2024 Yuta Matsumura. 33 属性 内容 Timestamp イベント発生日時 TraceId トレーシングの識別子 SpanId スパン(操作単位)の識別子 TraceFlags W3C トレース コンテキストのトレースフラグ CategoryName ログのカテゴリー Severity 重大度(ログレベル) SeverityText 重大度のテキスト Body ログの本文 Attributes ログの追加情報

Slide 29

Slide 29 text

#aadojo © 2024 Yuta Matsumura. 34

Slide 30

Slide 30 text

#aadojo .NET Aspire • aka.ms/dotnet-aspire • 観測可能で本番環境に適した分散アプリケーションを構築するための クラウド対応スタック • 特徴 1. オーケストレーション:複数アプリケーションの相互接続を管理 2. コンポーネント:DBや各サービスの統合 3. ツール:ダッシュボードやVisual Studioのテンプレート © 2024 Yuta Matsumura. 35

Slide 31

Slide 31 text

#aadojo © 2024 Yuta Matsumura. アプリケーション (Minimal API) AppHost ServiceDefaults 参照 参照 36

Slide 32

Slide 32 text

#aadojo .NET Aspire でのオブザーバビリティ • 自動構成されたダッシュボード • ヘルスチェックエンドポイントの提供 • OpenTelemetry の統合 © 2024 Yuta Matsumura. 37 /health /alive … 実行状態

Slide 33

Slide 33 text

#aadojo © 2024 Yuta Matsumura. 38 OpenTelemetry 環境変数の自動構成

Slide 34

Slide 34 text

#aadojo © 2024 Yuta Matsumura. https://jat.connpass.com/event/318392/ 告知 告知

Slide 35

Slide 35 text

#aadojo ご清聴ありがとうございました © 2024 Yuta Matsumura. 40