Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Minimal Observability on Minimal API

Minimal Observability on Minimal API

Alternative Architecture DOJO SP~Decade of Alternative Spirits~
https://www.alterbooth.com/events/2024/1011/

Yuta Matsumura

October 11, 2024
Tweet

More Decks by Yuta Matsumura

Other Decks in Technology

Transcript

  1. #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
  2. #aadojo 話すこと 1. この10年の .NET のうつりかわり 2. ASP.NET Core Minimal

    API 3. Minimal API の実装に含めたいあれこれ 4. .NET におけるオブザーバビリティ © 2024 Yuta Matsumura. 3
  3. #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
  4. #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
  5. #aadojo ASP.NET Core Minimal API • ASP.NET Core 6.0 で登場した機能

    • 依存関係が最小限の Web API を作成 • ルーティングで構成するエンドポイント定義 © 2024 Yuta Matsumura. 12
  6. #aadojo OpenAPI との統合 • .NET 7 から統合されるようになりました • NuGet: Microsoft.AspNetCore.OpenApi

    • NuGet: Swashbuckle.AspNetCore • OpenAPI Specification を ソースコードで書く © 2024 Yuta Matsumura. 16 API のエンドポイント、パラメーター、 レスポンスなどに関する仕様を表す形式
  7. #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
  8. #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
  9. #aadojo ヘルスチェック サーバーに接続できること © 2024 Yuta Matsumura. 26 Req/Res Req/Res

    Connect 依存関係 Monitoring システムが正しくユーザーに機能を提供できていること
  10. #aadojo ヘルスチェック • NuGet: Microsoft.Extensions.Diagnostics.HealthChecks • チェック結果 • Healthy …

    正常状態 • Degraded … チョットアヤシイ (動作はしているが完全な正常ではない状態) • Unhealthy … 異常状態 © 2024 Yuta Matsumura. 27
  11. #aadojo OpenTelemetry • https://opentelemetry.io/ja/ • オブザーバビリティを構成するためのフレームワーク 1. コア API 2.

    インストルメンテーション:メトリック、ログ、分散トレースなどを収集する 3. エクスポーター:Prometheus, Jaeger, OTLP などに接続する • C#, Java, JavaScript, PHP, Python などをサポート © 2024 Yuta Matsumura. 29
  12. #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
  13. #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
  14. #aadojo #aadojo © 2024 Yuta Matsumura. 33 属性 内容 Timestamp

    イベント発生日時 TraceId トレーシングの識別子 SpanId スパン(操作単位)の識別子 TraceFlags W3C トレース コンテキストのトレースフラグ CategoryName ログのカテゴリー Severity 重大度(ログレベル) SeverityText 重大度のテキスト Body ログの本文 Attributes ログの追加情報
  15. #aadojo .NET Aspire • aka.ms/dotnet-aspire • 観測可能で本番環境に適した分散アプリケーションを構築するための クラウド対応スタック • 特徴

    1. オーケストレーション:複数アプリケーションの相互接続を管理 2. コンポーネント:DBや各サービスの統合 3. ツール:ダッシュボードやVisual Studioのテンプレート © 2024 Yuta Matsumura. 35