Azure

Appliaction InsightsとOpenTelemetry

はじめに

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
.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)
.NET ダウンロード (Linux、macOS、Windows)

Linux、macOS、Windows 用の公式 .NET ダウンロード。 .NET は、さまざまな種類のアプリケーションを構築するための、無料のクロスプラットフォームのオープンソース開発者プラットフ ...

dotnet.microsoft.com

.NET 6.0環境で作業を行います。事前にOSに合わせたセットアップを行います。

Install .NET on Linux distributions - .NET | Microsoft Learn
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に依存することなくオブザーバビリティを実現することに役立つと思います。

まだ、発展途上の機能のため今後の拡張が期待されます。

-Azure
-,