Skip to content

sgent-dev/OpenTelemetryExample

Repository files navigation

OpenTelemetry Azure Monitor Example (.NET 10)

ASP.NET Core アプリケーションにおいて、業界標準の分散トレーシング技術である OpenTelemetry を活用し、Azure Monitor (Application Insights) へ効率的かつ最適化されたテレメトリを送信する実装例です。

単なるライブラリの導入にとどまらず、実運用を見据えた「ログのノイズ除去」「パフォーマン最適化」「分散トレーシングのタグ継承」などのカスタム実装を行っています。

🚀 特徴・アピールポイント

  • ハイブリッドな計装 (Instrumentation)
    • MySqlConnector によるデータベース通信の自動計装。
    • ActivitySource を用いた、ビジネスロジック(ユースケース)単位の手動計装。
  • コストと分析効率を最適化するカスタム Processor
    • PollingNoiseFilterProcessor: 変更がなかった不要なポーリング処理や付随するDBアクセスログを動的に破棄し、Azure Monitorのログ料金高騰を防ぎます。
    • HealthCheckFilterProcessor: ヘルスチェックエンドポイント(/health)の無駄なトレースを除外します。
    • BlazorFilterProcessor: Blazor特有の内部通信パスを整理し、分析時のノイズを低減します。
  • 分散トレーシングのタグ自動継承
    • TagInheritanceProcessor: 親アクティビティ(コントローラーなど)で付与した enduser.id などの情報を、子アクティビティ(DB通信など)へ自動的に伝播させ、ユーザーごとの一連の行動追跡を容易にします。
  • ゼロ・アロケーションロジック ([LoggerMessage])
    • C# のソースジェネレーターを活用し、ボクシングやメモリアロケーションを発生させない高速なログ出力を実装しています。

🛠 使用技術

  • C# / .NET 10
  • ASP.NET Core MVC
  • OpenTelemetry .NET
  • Azure.Monitor.OpenTelemetry.AspNetCore
  • MySqlConnector

📂 主要なコンポーネント

  • Program.cs: OpenTelemetryプロバイダーの構成と、各カスタムProcessorの登録。
  • Traces/AppDiagnostics.cs: アプリケーション独自の ActivitySource の定義。
  • Traces/*Processor.cs: トレースの開始/終了時に介入するカスタムフィルター群。
  • Controllers/HomeController.cs: Activity の生成および [LoggerMessage] を用いた計装の実装例。

⚙️ 動かし方 (Getting Started)

このプロジェクトをローカルで実行し、Azure Monitorでログを確認するには以下の設定が必要です。

  1. リポジトリをクローンします。
  2. Azure ポータルで Application Insights のリソースを作成し、「接続文字列 (Connection String)」を取得します。
  3. プロジェクトのルートに appsettings.Development.json を作成(または編集)し、以下の設定を追加します。
{
  "AzureMonitor": {
	"ConnectionString": "YOUR_CONNECTION_STRING_HERE"
  },
  "AppSettings": {
	"LogOutput": true
  }
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors