はじめに
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それぞれ制限が異なることに気を付けてください。
エクスポーターを有効には事前にApplication Insightsを作成しておきます。Application Insight作成にはLog Analyticsも必要となります。
今回は確認は.NETのコンソールアプリで行います。事前に.NET Coreもしくは.NETの開発環境を用意します。
.NET 6.0環境で作業を行います。事前にOSに合わせたセットアップを行います。
コンソールアプリのテンプレートを利用して作成します。
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に依存することなくオブザーバビリティを実現することに役立つと思います。
まだ、発展途上の機能のため今後の拡張が期待されます。


