Azure Monitor OpenTelemetry構成の変更点と確認ポイント|Application Insights運用者向け解説

Azure Monitorの「Configuring OpenTelemetry in Application Insights – Azure Monitor」は、Application InsightsでOpenTelemetryを使うための設定ガイドです。結論から言うと、確認すべき中心は「接続文字列」「Cloud Role名」「サンプリング」「ログとメトリックの扱い」「Live Metrics」「Microsoft Entra ID認証」「オフラインストレージ」「OTLP併用」「URLクエリ文字列の秘匿」です。
特に本番環境では、OpenTelemetryを有効化するだけでは不十分です。テレメトリの送信先、コスト、障害調査時の粒度、機密情報の混入、複数サービスの見え方まで、設定によって大きく変わります。

Microsoft Learnの日本語版では、該当ページは2026年4月23日が最終更新日として表示されています。本記事では、2026年5月7日時点でAzure Monitor Application InsightsのOpenTelemetry構成を確認する管理者・開発者向けに、実務で見落としやすい変更点と展開時の注意点を整理します。 (Microsoft Learn)

目次

Azure Monitor OpenTelemetry構成でまず押さえるべきこと

Azure Monitor OpenTelemetry構成の目的は、.NET、Java、Node.js、Pythonなどのアプリケーションから、Application Insightsへ一貫したテレメトリを送ることです。公式ドキュメントでは、Azure Monitor OpenTelemetry Distroを使ってApplication InsightsでOpenTelemetryを構成する方法が説明されています。Azure Functionsについては別ドキュメント扱いです。 (Microsoft Learn)

ここで重要なのは、OpenTelemetryは「入れたら終わり」の監視設定ではないという点です。接続文字列だけ設定しても、次のような問題が残ることがあります。

確認不足の項目起きやすい問題
接続文字列の設定場所開発環境や旧リソースへテレメトリが送られる
Cloud Role名Application Mapでサービス名が分かりにくくなる
サンプリング障害調査に必要なトレースやログが想定より少なくなる
Live Metricsリアルタイム監視できると思っていた構成で使えない
オフラインストレージコンテナや一時ディスクでテレメトリ保持に失敗する
URLクエリ文字列SASトークンなどの機密情報が収集される可能性がある
OTLP併用サポート範囲を誤解して二重送信や運用負荷が増える

管理者は「監視データが正しい場所に、適切な量で、安全に送られているか」を確認し、開発者は「コード・環境変数・構成ファイルのどこで何を上書きしているか」を確認する必要があります。

対象になるアプリケーションと関係者

今回のAzure Monitor OpenTelemetry構成は、主にApplication InsightsへOpenTelemetryベースのテレメトリを送るアプリケーションが対象です。公式ドキュメントでは、ASP.NET Core、.NET、Java、Java native、Node.js、Python向けの設定が扱われています。 (Microsoft Learn)

影響を受ける関係者は、次のように分けると分かりやすくなります。

立場確認すべきポイント
Azure管理者Application Insightsリソース、接続文字列、Entra ID認証、コスト管理
SRE・運用担当サンプリング、Live Metrics、アラート、障害調査時のログ粒度
開発者Distro導入、Resource属性、Cloud Role名、言語別SDK設定
セキュリティ担当URLクエリ文字列、SASトークン、認証方式、オフライン保存先
DevOps担当環境変数、CI/CD、ステージング展開、構成ファイルの差分管理

特に複数のアプリケーションを1つのApplication Insightsリソースへ送っている場合、Cloud Role名やResource属性の設計が重要です。名前付けが曖昧だと、Application Map上でどのサービスが遅いのか、どのインスタンスで障害が起きているのかを判断しにくくなります。

接続文字列は「どこで設定しているか」を必ず棚卸しする

Application Insightsでは、接続文字列がテレメトリの送信先を決めます。ASP.NET Coreでは、コード、環境変数、appsettings.jsonで接続文字列を設定でき、複数箇所に設定した場合はコード、環境変数、構成ファイルの順で優先されます。 (Microsoft Learn)

実務では、接続文字列の重複設定が最も分かりにくいトラブルになります。たとえば、コード上では新しいApplication Insightsリソースを指定しているのに、CI/CDの環境変数に古い接続文字列が残っているケースです。逆に、環境変数で本番向けの送信先を指定したつもりでも、コード側で別の値が優先される構成もあります。

確認する順序は次の通りです。

確認場所見るべき内容
アプリケーションコードUseAzureMonitor()やExporter設定で接続文字列を直書きしていないか
環境変数APPLICATIONINSIGHTS_CONNECTION_STRINGが環境ごとに正しいか
構成ファイルappsettings.jsonapplicationinsights.jsonに古い値がないか
CI/CDデプロイ先スロット、コンテナ、App Service設定で上書きされていないか
Key Vault連携参照先のシークレット名やバージョンが正しいか

接続文字列は、基本的には環境変数やシークレット管理で扱うのが安全です。コードに直書きすると、環境差し替えやリソース移行時に事故が起きやすくなります。

Cloud Role名は運用チームが読める名前にする

Azure Monitor OpenTelemetry Distroは、サポートされる環境ではリソースコンテキストを自動検出し、Cloud Role NameとCloud Role Instanceの既定値を提供します。ただし、運用上分かりやすい名前に上書きしたい場面があります。Cloud Role名はApplication Map上のノード名として表示されます。 (Microsoft Learn)

Cloud Role名は、OpenTelemetryのResource属性で設定します。公式情報では、Cloud Role名にはservice.namespaceservice.nameが使われ、Cloud Role Instanceにはservice.instance.idが使われると説明されています。未設定の場合、Cloud Role名はApplication Insightsリソース名、Cloud Role Instanceはマシン名が既定になります。 (Microsoft Learn)

おすすめは、次のような命名規則を事前に決めることです。

用途
サービス名billing-apiorder-workercustomer-web
名前空間prodstgjp-eastcommerce
インスタンスIDPod名、VM名、ホスト名、コンテナIDなど
Cloud Role名commerce.billing-apiprod.order-worker

Cloud Role名を決めるときは、開発チームの都合だけでなく、障害対応時に運用チームが読めるかを基準にしてください。たとえばapp1service-newのような名前は、数か月後に意味が分からなくなりがちです。

サンプリングはコストと調査精度の両方に影響する

サンプリングは、Application Insightsへ取り込むテレメトリ量を減らし、コストを抑えるための重要な設定です。Azure Monitor OpenTelemetry Distroでは、トレースに対して固定率サンプリングとレート制限付きサンプリングを扱えます。公式ドキュメントでは、サンプリングはトレースに適用され、メトリックはサンプリングされないと説明されています。 (Microsoft Learn)

ここで注意したいのは、サンプリングは単なるコスト削減機能ではないということです。設定値を下げすぎると、低頻度のエラーや一部ユーザーだけに発生する遅延が見えにくくなります。一方で、すべてを収集すると、アクセス増加時に取り込み量とコストが膨らむ可能性があります。

固定率サンプリングとレート制限付きサンプリングの使い分け

方式向いている場面注意点
固定率サンプリングリクエスト量が比較的安定しているWebアプリ急なアクセス増加時は取り込み量も増えやすい
レート制限付きサンプリングアクセス量の変動が大きいサービスピーク時に取得できるトレースが限定される
サンプリングなし低トラフィック環境、検証環境、重要な短期調査本番で常時使うとコスト増になりやすい

Javaエージェントでは、サンプリング未設定時にレート制限付きサンプリングで最大およそ1秒あたり5リクエストをキャプチャする既定動作が説明されており、以前の「すべての要求をキャプチャする」既定値を置き換える内容として記載されています。 (Microsoft Learn)

本番展開では、既定値に任せるよりも「なぜその値にするのか」を明示するのが安全です。たとえば、障害調査を重視するAPIでは固定率を高めにし、大量アクセスがある静的なエンドポイントではレート制限を使う、といった設計が考えられます。

ログはトレースサンプリングと連動する点に注意

ログのトレースベースサンプリングを有効にすると、サンプリングされていないトレースに属するログレコードは削除されます。一方で、トレースコンテキストを持たないログは影響を受けません。この機能は既定で有効と説明されています。 (Microsoft Learn)

これは、障害調査で重要です。たとえば「エラーのログは出ているはずなのに、該当リクエストのトレースが見つからない」という状況では、サンプリング設定によってログとトレースの見え方が変わっている可能性があります。

運用前に、次の観点で検証してください。

検証項目確認方法
エラー時のトレースが残るかステージングで意図的に例外を発生させる
ログとトレースが紐づくかTrace ID、Span IDで検索する
サンプリング後もアラートが機能するかメトリックベースのアラートと併用する
低頻度エラーを拾えるかサンプリング率を下げた状態で再現テストする

アラートは、サンプリングの影響を受けにくいメトリックを中心に設計すると安定します。詳細調査はトレース、継続監視はメトリックという役割分担を意識すると、運用しやすくなります。

Live Metricsは既定有効だが、構成ごとの制限を確認する

Live Metricsは、アプリケーションのアクティビティやパフォーマンスをリアルタイムに把握するための機能です。公式ドキュメントでは、Live Metricsは既定で有効とされ、Distro構成時に無効化できると説明されています。一方で、Azure Monitor .NET Exporterでは利用できず、GraalVMネイティブアプリケーションでも利用できないと記載されています。 (Microsoft Learn)

この違いは、運用設計に直結します。たとえば、ASP.NET CoreのWebアプリではLive Metricsを使える想定でも、同じ.NET系のworkerサービスでExporterを使っている場合は期待通りに使えない可能性があります。

Live Metricsを使う場合は、次の点を確認してください。

確認項目理由
DistroかExporterかLive Metricsの利用可否が変わる
言語・ランタイムGraalVM nativeなど制限がある
本番で有効にするかリアルタイム監視の必要性とポリシーを確認する
プレビュー条件公式ページではAzureプレビュー利用規約への案内がある

「使えると思っていたが本番で見えない」という事態を避けるため、ステージング環境でAzureポータルのLive Metrics画面まで確認してから展開しましょう。

Microsoft Entra ID認証はセキュリティ要件が高い環境で優先する

Azure Monitorへのより安全な接続を作るには、Microsoft Entra ID認証の利用を検討します。公式ドキュメントでは、この認証方法により、承認されていないテレメトリがサブスクリプションに取り込まれるのを防げると説明されています。 (Microsoft Learn)

接続文字列だけに依存すると、値が漏えいした場合に不正なテレメトリ送信のリスクが残ります。特に、金融、医療、公共系、社内の厳格なセキュリティ基準がある環境では、Entra ID認証の適用可否を早めに確認してください。

ただし、すべての構成で同じように使えるわけではありません。公式情報では、GraalVM NativeアプリケーションではMicrosoft Entra ID認証を利用できないと記載されています。 (Microsoft Learn)

オフラインストレージと自動再試行はコンテナ環境で特に注意する

Azure MonitorのOpenTelemetryベースの機能は、Application Insightsへ接続できないときにテレメトリをキャッシュし、最大48時間の再送を試みます。高負荷時には、許容時間や最大ファイルサイズを超えることでテレメトリが削除される場合があり、必要に応じて古いイベントより最近のイベントが優先されます。 (Microsoft Learn)

この機能は便利ですが、コンテナや一時ディスクを使う環境では注意が必要です。たとえば、Podが再起動されると一時ディスク上のキャッシュが失われる場合があります。保存先ディレクトリに書き込み権限がないと、再送以前にキャッシュ自体ができないこともあります。

展開前に、次の点を確認してください。

環境注意点
App Service一時領域と永続領域の違いを確認する
AKS・コンテナ再起動時にキャッシュが消える前提で設計する
Linux VM/tmp/var/tmpの容量・権限を確認する
Windows VM%LOCALAPPDATA%%TEMP%の権限を確認する
高トラフィック環境48時間以内でも容量制限で古いイベントが落ちる可能性を考慮する

オフラインストレージは「必ず全データを守る仕組み」ではありません。一時的なネットワーク断への耐性を上げる仕組みとして扱い、重要な監査ログや業務ログは別途適切な保管先を設計してください。

OTLP Exporter併用はサポート範囲を誤解しない

Azure Monitor ExporterとOTLP Exporterを併用すると、テレメトリをAzure Monitorと別のOpenTelemetry Collectorなどへ送る構成を検討できます。ただし、公式ドキュメントではOTLP Exporterは便宜上示されているものであり、MicrosoftはOTLP Exporterや下流のコンポーネント、サードパーティ体験を正式サポートしないと説明しています。 (Microsoft Learn)

また、Application Insights JavaエージェントはOTLPをサポートしていないとされ、Azure Monitor Exporterと一緒にOTLP Exporterを有効にして2か所へ送信することはできないという記載もあります。 (Microsoft Learn)

OTLP併用を検討する場合は、次のように判断してください。

判断基準方針
Azure Monitorだけで監視が完結するOTLP併用は不要
既存のOpenTelemetry Collector基盤があるサポート範囲を確認して限定的に検証
サードパーティAPMへも送信したい障害時の責任分界点を明確にする
Javaエージェントを使っているOTLP併用前提にしない
本番で二重送信するコスト、重複、遅延、個人情報の送信先を確認する

二重送信は便利に見えますが、トラブル時に「どちらのバックエンドが正しいのか」を判断しにくくなることがあります。まずAzure Monitor側で必要な可視化を満たし、不足分だけOTLP併用を検討するのが現実的です。

URLクエリ文字列はSASトークン混入を前提に対策する

URLクエリ文字列には、アクセストークン、検索条件、ユーザー識別子、SASトークンなど、収集したくない情報が含まれることがあります。公式ドキュメントでは、Azure StorageをSASトークンで呼び出す場合、クエリ文字列の収集をオフにすることが推奨されています。 (Microsoft Learn)

特に.NETでは、DistroパッケージとExporter利用時で既定動作が異なる点に注意が必要です。Azure.Monitor.OpenTelemetry.AspNetCore DistroではASP.NET CoreとHttpClientのInstrumentationが含まれ、クエリ文字列の編集が既定でオフとされています。一方、Azure.Monitor.OpenTelemetry.Exporterを使う場合はInstrumentationライブラリを手動で含める必要があり、それらではクエリ文字列の編集が既定で有効と説明されています。 (Microsoft Learn)

実務では、次のように整理すると安全です。

状況推奨対応
SASトークン付きURLを扱うクエリ文字列を収集しない設定を優先
URLに個人情報が入る可能性があるアプリ側でURL設計も見直す
DistroとExporterが混在既定値の違いを環境ごとに確認
Node.jsで独自処理が必要Span Processorでマスク処理を検討
監査が必要収集対象とマスク方針を文書化する

「後から消せばよい」ではなく、最初から収集しない設計が基本です。Application Insightsに送られた後のデータ削除は、調査・手続き・影響確認に時間がかかります。

メトリックのエクスポート間隔は60秒を基準に考える

メトリックのエクスポート間隔は、OTEL_METRIC_EXPORT_INTERVALで構成できます。公式ドキュメントでは既定値が60,000ミリ秒、つまり60秒とされ、Azure Monitor MetricsとAzure Monitor Workspaceはカスタムメトリックを固定の60秒間隔で取り込むと説明されています。より短い間隔で送信したメトリックは60秒ごとに処理され、Log Analyticsでは短い間隔がコスト増につながる可能性があります。 (Microsoft Learn)

そのため、理由なくエクスポート間隔を短くするのは避けましょう。短くすればリアルタイム性が上がるとは限らず、むしろコストやノイズが増えることがあります。

判断基準は次の通りです。

目的設定方針
一般的なアプリ監視既定の60秒を基準にする
短時間の負荷試験一時的に短縮し、終了後に戻す
コスト最適化Log Analytics側の取り込み量も確認する
アラート設計メトリック間隔と評価期間をセットで調整する

管理者が確認すべき設定チェックリスト

Azure管理者やSREは、アプリケーションコードよりも「どの環境で、どのリソースへ、どれだけ送っているか」を重視して確認します。

チェック項目確認内容
Application Insightsリソース本番・検証・開発でリソースが分離されているか
接続文字列環境変数やシークレットに古い値が残っていないか
Entra ID認証セキュリティ要件を満たす構成になっているか
サンプリングコストと障害調査のバランスが取れているか
Live Metrics本番で使う必要があるか、対象構成で使えるか
オフラインストレージ保存先の権限、容量、永続性に問題がないか
データ保持Application InsightsやLog Analyticsの保持期間と合っているか
アラートサンプリングの影響を受けにくいメトリック中心になっているか

特にコスト管理では、サンプリングだけに頼らないことが重要です。高頻度ログ、不要なカスタムイベント、短すぎるメトリック間隔、重複送信も取り込み量を増やします。

開発者が確認すべき設定チェックリスト

開発者は、アプリケーション内でOpenTelemetry設定がどのように組み込まれているかを確認します。

チェック項目確認内容
Distro導入対象言語に合ったAzure Monitor OpenTelemetry Distroを使っているか
Resource属性service.nameservice.namespaceservice.instance.idを設定しているか
初期化位置アプリ起動時にOpenTelemetry設定が確実に読み込まれるか
環境変数ローカル、ステージング、本番で値が混ざっていないか
例外・ログエラー時にトレース、ログ、メトリックが確認できるか
クエリ文字列URLに機密情報が含まれない、またはマスクされるか
サンプリング開発環境と本番環境で設定差分を把握しているか

OpenTelemetry構成は、アプリケーションの起動直後に読み込まれることが多いため、設定変更後は単にデプロイするだけでなく、プロセス再起動やコンテナ再作成が必要になる場合があります。環境変数を変更したのに挙動が変わらない場合は、まず反映タイミングを確認してください。

移行・展開時のおすすめ手順

既存のApplication Insights SDKや旧設定からAzure Monitor OpenTelemetry構成へ移行する場合は、いきなり全環境で切り替えないことが重要です。次の順序で進めると、送信先の誤りやコスト急増を避けやすくなります。

手順作業内容成功の確認ポイント
既存設定の棚卸しSDK、接続文字列、環境変数、構成ファイルを確認どこで何を設定しているか一覧化できている
検証環境でDistro導入対象言語に合わせてOpenTelemetryを有効化Application Insightsにテレメトリが流れる
Cloud Role名を設定サービス単位でResource属性を設定Application Mapで識別しやすい名前になる
サンプリングを明示固定率またはレート制限を決める想定した件数・粒度で収集される
セキュリティ確認Entra ID認証、URLクエリ文字列、保存先を確認機密情報が混入していない
本番前比較旧構成と新構成のメトリック・ログ量を比較エラー率、応答時間、依存関係が見える
段階展開一部サービスまたは一部インスタンスから展開コスト・アラート・Live Metricsに異常がない
本番反映全体展開後にダッシュボードとアラートを調整運用担当が必要な情報を追える

移行時のポイントは、「データが出ているか」だけでなく「必要なデータが、必要な名前で、必要な量だけ出ているか」を確認することです。

よくある失敗と対策

Azure Monitor OpenTelemetry構成で起きやすい失敗は、技術的な不具合よりも設定の思い込みに起因することが多いです。

失敗例原因対策
テレメトリが別リソースに送られる接続文字列の優先順位を誤解しているコード、環境変数、構成ファイルを同時に確認する
Application Mapが分かりにくいCloud Role名を未設定にしているservice.nameservice.namespaceを決める
ログが少なく見えるトレースベースのログサンプリングを理解していないサンプリング設定とログの紐づきを検証する
コストが急増するサンプリング未設定、ログ過多、短すぎるメトリック間隔取り込み量と設定値を定期的に確認する
Live Metricsが使えないDistroとExporterの違いを見落としている対象ランタイムとパッケージを確認する
SASトークンが記録されるURLクエリ文字列の収集を許可しているクエリ文字列の収集停止やマスクを設定する
一時障害後にデータが欠けるオフラインストレージの容量・権限・永続性が不足保存先と再送条件を事前にテストする
OTLP併用で運用が複雑化するサポート範囲と責任分界点が曖昧Azure Monitor単独で足りない理由を明確にする

次に取るべき行動

Azure MonitorのOpenTelemetry構成では、まず接続文字列とCloud Role名を確認し、その後にサンプリング、ログ、メトリック、セキュリティ設定を見直すのが効果的です。特に本番環境では、既定値に任せず、環境ごとの設定値を明文化してください。

最初に行うべき作業は、次の3つです。

  1. APPLICATIONINSIGHTS_CONNECTION_STRINGと構成ファイルの設定場所をすべて洗い出す
  2. service.nameservice.namespaceservice.instance.idの命名規則を決める
  3. サンプリング設定とログの見え方をステージング環境で検証する

この3点を押さえるだけでも、送信先の誤り、Application Mapの混乱、コスト増、障害調査時の情報不足を大きく減らせます。Azure Monitor OpenTelemetryは、単なる監視ツールの導入ではなく、アプリケーション運用の見える化を設計するための設定です。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次