はじめに
Application Insightsにアプリケーションのテレメトリを送信する手段の一つとしてOpenTelemetryがあります。今回はOpenTelemetryを利用して実際にApplication Insghtsにテレメトリを収集します。
概要
OpenTelemetryがApplication Insghtsに送信するテレメトリは「分散トレース」のみで、完全なオブザーバビリティを実現しようとする場合には「分散トレース」に加え「メトリック」「ログ」があると良いですが、Azure Monitor OpenTelemetry エクスポーターは「分散トレース」のみ含まれています。
インストルメント化(アプリケーションのテレメトリのキャプチャ)には2つの手法があります。
- 手動インストルメンテーション(.NET、Python、JavaScript)
- 自動インストルメンテーション(Java 3.X)
今後、Azure Monitorは手動インストルメンテーションに焦点を絞っていくようです。
テレメトリの送信には2つの朱里があります。
- 直接エクスポーター
- エージェント経由
Azure Monitorは直接エクスポーターのみサポートしています(2022/04/22)
非公式でありながら一部のOpenTelemetry ユーザーではOpenTelemetry-Collectorをエージェントの代わりに利用して使われているケースもあるみたいです。
エクスポーターを有効にする
.NET、Node.js、Python アプリケーション用の Azure Monitor OpenTelemetry エクスポーターはプレビュー機能です。将来、変更や削除もあり得ますのでご注意ください。
プレビューでは様々な制限を受けることを確認してください。.NET、Node.js、Pythonそれぞれ制限が異なることに気を付けてください。
-
.NET、Java、Node.js、Python アプリケーション用の Azure Monitor OpenTelemetry を有効にする - Azure Monitor | Microsoft Learn
この記事では、OpenTelemetry を使用してアプリケーションで Azure Monitor を有効にする方法について説明します。
docs.microsoft.com
エクスポーターを有効には事前にApplication Insightsを作成しておきます。Application Insight作成にはLog Analyticsも必要となります。
今回は確認は.NETのコンソールアプリで行います。事前に.NET Coreもしくは.NETの開発環境を用意します。
-
.NET ダウンロード (Linux、macOS、Windows)
Linux、macOS、Windows 用の公式 .NET ダウンロード。 .NET は、さまざまな種類のアプリケーションを構築するための、無料のクロスプラットフォームのオープンソース開発者プラットフ ...
dotnet.microsoft.com
.NET 6.0環境で作業を行います。事前にOSに合わせたセットアップを行います。
-
Install .NET on Linux distributions - .NET | Microsoft Learn
Learn about how .NET is available on Linux. .NET can be installed through a package manager, a snap ...
docs.microsoft.com
コンソールアプリのテンプレートを利用して作成します。
dotnet new console -n app
Azure.Monitor.OpenTelemetry.Exporterをインストールします。
dotnet add package --prerelease Azure.Monitor.OpenTelemetry.Exporter
Program.csを編集します。また、Application Insightsの接続文字列を確認します。
Program.cs
内の<Your Connection String>
を接続文字列を設定します。
using System.Diagnostics; using Azure.Monitor.OpenTelemetry.Exporter; using OpenTelemetry; using OpenTelemetry.Trace; public class Program { private static readonly ActivitySource MyActivitySource = new ActivitySource( "OTel.AzureMonitor.Demo"); public static void Main() { using var tracerProvider = Sdk.CreateTracerProviderBuilder() .AddSource("OTel.AzureMonitor.Demo") .AddAzureMonitorTraceExporter(o => { o.ConnectionString = "<Your Connection String>"; }) .Build(); using (var activity = MyActivitySource.StartActivity("TestActivity")) { activity?.SetTag("CustomTag1", "Value1"); activity?.SetTag("CustomTag2", "Value2"); } System.Console.WriteLine("Press Enter key to exit."); System.Console.ReadLine(); } }
テレメトリが送信されているのでアプリケーションマップが表示されます。
テレメトリデータも表示できます
詳細も確認できます。
まとめ
OpenTelemetryを利用してテレメトリをAzure Monitorへ送信することが出来ます。
複数の言語にわたる開発が行われている場合には、それぞれのSDKに依存することなくオブザーバビリティを実現することに役立つと思います。
まだ、発展途上の機能のため今後の拡張が期待されます。