インフラストラクチャー相関
このページでは、アプリケーション・モニターとインフラストラクチャー・モニターの世界がどのように統合されるかについて説明します。
詳細については、 「アプリケーション監視 」および「 インフラストラクチャ監視」 を参照してください。
一部のユーザーは主にアプリケーション・モニターを利用しているかもしれませんが、論理層が物理層にどのようにマップされるのかに関する理解を深めることは、役立つことがあり、アプリケーション・レベルで検出され、根本原因がインフラストラクチャー層にある問題をトラブルシューティングする際には必須になります。
Instana UI上で、アプリケーション監視とインフラ監視の間を双方向に移動できるようになります:
インフラストラクチャーの相関は、以下でも重要な役割を果たします。
同様に、 アプリケーション監視と Webサイト監視は統合されており、その詳細についてはこちらで説明しています。
サービスからの移動
最もシンプルな形態のサービスは、単一のプロセスによって実行されます (例えば、Spring Boot アプリケーション)。 ただし、以下のようなさまざまなユース・ケースをサポートするために、複数のプロセスで実行されることも一般的です。
- スループットおよび回復力を向上させる (プロセスが多ければ多いほど、向上する)
- 異なるテナントや構成で作業を分割する
- 通常は異なる環境で、当該サービスの異なる複数のバージョンを実行する
これは通常、サービスから 1 つ以上の基盤となるプロセスおよび関連エンティティー (ホスト、コンテナー、kubernetes ポッドなど) に移動できることを意味します。
1 つのエントリー・ポイントは、「インフラストラクチャー」タブ内の スタックです。これは、インフラストラクチャーのどの部分がサービスの実行を処理するかについてすべてを示します。これには、正常性や、CPU やメモリーの使用量などの重要なメトリックが含まれます。

もう 1 つのエントリー・ポイントは、サービス・ダッシュボードの「インフラストラクチャー」タブです。これにより、スタックとは異なる明細が示され、さらに、ホスト・レベルからプロセス・レベルまでの呼び出しカウント、エラー率、平均待ち時間などのトレース・メトリックが示されます。

前述の2つのウィジェットは、いずれも Kubernetes およびPivotal Cloud Foundry を標準機能として提供しており、 Kubernetes サービスやPCFアプリケーションなどの関連エンティティに直接アクセスすることができます。
Kubernetes で実行されているサービスのスタックの例:

Kubernetes で実行されているサービスの「インフラストラクチャー」タブの例:

呼び出しからの移動
通常、トレースはインフラストラクチャー・エンティティーにリンクされます。 より具体的に言うと、呼び出しは、呼び出しを開始するソースとその呼び出しを処理する宛先という最大 2 つのプロセスにリンクすることができます。 例えば、NodeJS プロセスは、PHP プロセスに対する HTTP 呼び出しを行います。
トレース・ビューでは、任意の呼び出しを選択して 通話詳細を開くことができます。 ソース・セクションと宛先セクションの両方から、インフラストラクチャーのどの部分が関係していたのかを把握できます。
この例では、ソースは PHP プロセスであり、宛先は Spring Boot アプリケーション (Java プロセス) です。

インフラストラクチャーへの相関付けができないことがあります。これは通常、基盤のプロセスが Instana によってモニターされていないことを意味します。
トレースのルート呼び出しでは、常にこれが当てはまります。外部のモニター対象外のクライアントによって初期要求が行われるためです。 この例では、shipping サービスが、Instana でモニターされていないものから呼び出されています。

もう 1 つのケースとして、発信呼び出しが外部のサード・パーティー・サービスをターゲットとする場合があります。 この例では、payment によって外部の www.paypal.com 外部サービスが呼び出されています。

インフラストラクチャーからの移動
インフラストラクチャやプラットフォーム( Kubernetes、 Pivotal Cloud Foundry、および vSphere )のエンティティを確認する際、 Stack を使用すると、そこで実行されているサービスのリストや、そのエンティティが構成要素となっているアプリケーション、および呼び出し回数やエラー数などのメトリクスを取得できます。

アップストリーム/ダウンストリーム は、現在のインフラストラクチャー・エンティティーによってそれぞれ呼び出され、呼び出されるサービスおよびアプリケーションへのアクセスを提供します。

仕組み
まず何よりも、 アプリケーション監視とインフラ監視は、それぞれ異なる2つのデータパイプラインによって支えられていることを理解することが重要です:
アプリケーション・モニター: データ (トレースおよび calls.md) は Instana トレーサー または サード・パーティー・トレーサーから取得されます。
インフラストラクチャー・モニター: データ (tags および metrics.md) は Instana センサーから取得されます。
これらの 2 つの世界は、インフラストラクチャーのリンクを呼び出すメカニズムにより、シームレスにマージされています。インフラストラクチャーのリンクでは、呼び出しがモニター対象のインフラストラクチャー・エンティティーにリンクされます。 両サイドに共通の ID が検出されると、リンクが行われます。
インスツルメントされたサービス
トレーサーは、着信呼び出しおよび発信呼び出しをキャプチャーするためにプロセスをインスツルメントします。 その後、これらの呼び出しは Instana バックエンドに報告され、そこでこれらの呼び出しのソースと宛先を既知のインフラストラクチャー・エンティティーにリンクしようとします。 ソース・プロセス (または宛先プロセス) がインスツルメントされると、必然的にソース・プロセス (または宛先プロセス) が、それに関するすべてを認識する Instana センサーによってもモニターされることを意味します。 トレーサーとセンサーの両方が同じ場所に配置されているため、両方ともホストとプロセスを認識しています。したがって、インフラストラクチャーのリンクが可能になります。
例えば、Python プロセスは、すべての着信呼び出しと発信呼び出しをキャプチャーする Python トレーサーによってインスツルメントされます。 このとき、このプロセスが実行されているホストで複数のセンサー (ホスト・センサー、プロセス・センサー、python センサー) がアクティブ化されます。 トレーサーとセンサーはどちらも Instana バックエンドにデータを個別に送信しますが、両方にプロセスに対する同じ ID が含まれています。 したがって、着信呼び出しの宛先および発信呼び出しのソースを Python プロセスにリンクすることができます。
OpenTelementry を使用して監視されているサービス
多くの場合、 Instana のネイティブトレーサーではなく、 OpenTelemetry で計測されているサービスに対しても、インフラストラクチャの相関分析を行うことができます。 詳細やベストプラクティスについては、 「 OpenTelemetry のサービスマッピングとインフラストラクチャの相関関係」 を参照してください。
データベース、メッセージング・システム、およびクラウド・サービス
Instana Tracersは、データベース、メッセージングシステム、またはクラウドサービスを監視対象としていません。 ただし、これらの追跡対象外のシステムを呼び出すプロセスには計測機能が実装されているため、送信されるリクエストは適切に呼び出しに紐付けられます。 たとえば、 Java というトレーサーは、 Java プロセスから MySQL データベースへの送信リクエストを記録します。 これらのリクエストは、送信元を Java プロセス、宛先を MySQL データベースとする呼び出しとして解析されます。 このような呼び出しは Instana で確認でき、その宛先は多くの場合、呼び出しを受信するインフラストラクチャ・エンティティに関連付けられています。 このマッピングは、 Instana が送信元のクライアントリクエストのアドレス情報を監視対象のインフラストラクチャと一意に照合できる場合にのみ可能です:
一方、Instana は、Instana センサーの 1 つを介してデータベースまたはメッセージング・システムをモニターするため、プロセス、そのポート、およびホストについて認識しています。 その一方で、Instana は、発信要求を分析します。この要求には、宛先プロセスを推測するのに十分な情報 (通常、接続ストリングなどに含まれているホスト名や IP とポート) が含まれている可能性があります。
例えば、MySQL インスタンスへの発信要求には、接続ストリング jdbc:mysql://10.128.0.6:3306 が含まれているといった具合です。

インフラストラクチャー・モニターで対応する MySQL プロセスが検出されました。このプロセスは、ポート 3306 を公開し、IP 10.128.0.6 を公開するホストで実行されています。

IP とポートの両方が一致するため、以下のように、呼び出しと MySQL インスタンスがリンクされます。

Instana では、jdbc:mysql://mysql-svc のような Kubernetes サービス名が含まれた接続ストリングもサポートされます。 背後では、すべての名前空間およびクラスターでサービスを一意的に識別するために、サービス名の完全修飾が試行されます。 結果として、宛先が最終プロセスではなく、Kubernetes サービスにリンクされた呼び出しが検出されます。
クラウド・サービスの場合、プロセスはありませんが、考え方は同じです。モニター対象クラウド・サービスが共有する共通の ID と、そのサービスへの発信要求を探します。 これは例えば、AWS ARN などのリソース ID です。
リクエストのアドレス情報を既知のインフラストラクチャデータと照合できるとは限らない。 場合によっては、次の例に示すように、宛先システムに監視用ツールが導入されているにもかかわらず、データベース、メッセージング、またはクラウドサービスにおいて「監視対象外」のインフラストラクチャとして表示されることがあります
一部の監視対象データベース、メッセージングシステム、またはクラウド技術では、トレーサーが呼び出しから宛先インフラを一意に特定するのに十分なアドレス情報を抽出できないため、インフラの相関分析がサポートされていません。 たとえば、 Kafka のようなメッセージング呼び出しを追跡しても、多くの場合、宛先のキュー名やトピック名は特定できても、実際のメッセージングクラスタやサーバーまでは特定できないことがあります。
接続ストリングに指定されたホストや IP が、インフラストラクチャー・モニター側で認識されるホストや IP のいずれとも一致しない場合、呼び出しをインフラストラクチャーにリンクできないこともあります。 通常、これが生じるのは、特定のレベルの間接化が行われていて、リモート・データベース (またはメッセージング・サービスやクラウド・サービス) を呼び出すプロセスが次のようなホスト名を使用している場合です。
- システム
/etc/hostsファイル内のエントリ - DNS CNAME エントリー
- プロキシーまたはロード・バランサーへのポインター
- Consul や Zookeeper などのサービス・ディスカバリー・サービスによって指定された別名
また、クライアントからのアドレス情報が複数のインフラストラクチャ・エンティティと一致する場合、コールをインフラストラクチャに紐付けることはできません。 このような状況は、複数のデータベースインスタンスがクライアントからのアクセス用に同じアドレスを使用する、高可用性データベース環境においてよく発生します。 データベース自体には監視機能が実装されていないため、 Instana では、候補となる宛先のうち、実際にデータベース呼び出しを実行したのがどれであるかを特定できません。
外部サービス
外部サービスは、定義上、Instana によってモニターされないため、インフラストラクチャー・モニター側からも可視ではありません。 これらのサービスについては何も認識されないため、これらのサービスの呼び出しは、既知のインフラストラクチャー・エンティティーにリンクされません。
以下のように、「インフラストラクチャー」タブで、これらの呼び出しを「モニター対象外」として識別できます。

アプリケーションおよびサービスのマッピングにおけるインフラストラクチャの相関関係
アプリケーションおよびサービスのマッピングにおいて、インフラストラクチャの相関関係はどのような役割を果たすのでしょうか?
Instana バックエンドは、トレースおよび呼び出しを分析する際に、まず、それらを既知のインフラストラクチャー・エンティティーにリンクし、host.name、springboot.name、docker.label などのインフラストラクチャー・タグで拡充します。 これらのタグは、 あらかじめ定義されたルールまたはユーザー定義のルールを使用して、これらの呼び出しをサービスに自動的にマッピングするために使用されます。 例えば、Spring Boot プロセスにリンクされた呼び出しは、SpringBoot アプリケーション名から名前を取得するサービスにマップされます。 あるいは、 dockerservice-name というラベルを定義し、それを利用して、 Docker 上で実行されているほとんどのサービスに名前を付けるカスタムサービスマッピングルールを作成することもできます。

アプリケーションのマッピングについても同様で、これらのインフラストラクチャタグを使用してアプリケーションを定義できます。例えば、` kubernetes.namespace tag` を使用する場合:

インフラストラクチャーのリンクができない場合、サービス・マッピングではインフラストラクチャー・タグを利用できないため、代わりに、いわゆるフォールバック・ルールを利用します。フォールバック・ルールは、call.http.host や call.database.schema のような呼び出しタグを使用して定義されます。