急速に開発されているマイクロサービス、DevOps、およびクラウドネイティブテクノロジーにより、開発者はより効率的な方法でアプリケーションを開発、展開、反復処理できるようになりました。 開発者は、アプリケーションの可観測性に対する要求がますます高くなっています。 たとえば、開発者は、さまざまなプログラミング言語、ミドルウェアコンポーネント、および動的Kubernetes環境に基づいて観察方法をカスタマイズする必要があります。 Simple Log ServiceとAlibaba Cloud OpenAnolisは、非侵入型モニタリング機能を共同開発しました。 この機能は、クラウド開発者に、透過的で高性能で非侵入的なカーネル観察機能を提供します。
データ収集
Logtailの非侵入型モニタリング機能は、データ収集用にカーネルスペースとユーザースペースの2つのワークスペースを提供します。
カーネルスペースは、データの抽出と前処理に使用されます。
データ抽出: Kernel Hookモジュールは、KProbe定義に基づいてネットワークデータを傍受します。 接続、受け入れ、書き込みなどのカーネル関数を使用して、データをインターセプトできます。
データ前処理: 前処理モジュールはデータを傍受して破棄し、ユーザーモード設定に基づいてプロトコルを推論します。 特定の要件を満たすデータのみをSendToUserSpaceモジュールに渡すことができます。 他のデータは破棄される。 SendToUserSpaceモジュールは、eBPFマップを使用して、特定の要件を満たすデータをカーネルモードからユーザーモードに送信します。
ユーザースペースは、データの分析、集計、管理に使用されます。
データ分析: プロセスモジュールは、eBPFマップに保存されたネットワークデータを継続的に処理します。 プロセスモジュールは、前処理モジュールによって推論されたプロトコルタイプに基づいて、きめ細かいプロトコル分析を実行する。 たとえば、プロセスモジュールは、MySQLプロトコルのSQL文とHTTPプロトコルのステータスコードを分析します。 相関メタモジュールは、コンテナメタデータをプロセスモジュールによって処理されたデータにバインドします。 これは、カーネルスペースはPIDやFDなどのプロセスメタデータのみを渡しますが、Kubernetesクラスターの観察にはポッドメタデータとコンテナメタデータが必要であり、これらはより有益です。
データ集約: コンテナメタデータがバインドされた後、集約モジュールは重複排除のためにデータを集約します。 たとえば、集計期間中にSQLステートメントが1,000回呼び出された場合、集計モジュールは最終的なデータをXSQL:1000形式で抽象化してアップロードします。
データ管理: eBPFプログラムは、大量のプロセスデータおよび接続データと相互作用します。 eBPFプログラムのeBPFオブジェクトのライフサイクルは、マシンのステータスと一致する必要があります。 プロセスまたは接続が解放されると、接続管理モジュールおよびガベージコレクションモジュールは、プロセスまたは接続によって使用されるeBPFオブジェクトを解放します。

プログラムのランタイム環境では、仮想マシンまたはKubernetesノードに無人プロセスまたはローカルネットワーク呼び出しが存在する場合があります。 非侵入型モニタリング機能は、メタデータ収集のための様々なオプションを提供する。 ユーザーモードでは、カーネルモードのメタデータ収集の範囲を調整できます。
オプション | 説明 |
プロトコル処理 | プロトコル解析を有効にできます。 |
解析するプロトコルを指定できます。 | |
接続フィルタリング | Unixドメインソケットのデータを照会できます。 |
対話型プロセスデータを照会できます。 | |
ホストプロセスのフィルタリング | cmdline正規表現を使用して、監視するプロセスを指定できます。 |
cmdline正規表現を使用して、監視しないプロセスを指定できます。 | |
Kubernetesクラスタープロセスのフィルタリング | ポッド名の正規表現を使用して、監視するプロセスを指定できます。 |
ポッド名の正規表現を使用して、監視しないプロセスを指定できます。 | |
Namespace-name正規表現を使用して、監視するプロセスを指定できます。 | |
Namespace-name正規表現を使用して、監視しないプロセスを指定できます。 | |
ラベルの正規表現を使用して、監視するプロセスを指定できます。 | |
ラベルの正規表現を使用して、監視しないプロセスを指定できます。 | |
環境変数の正規表現を使用して、監視するプロセスを指定できます。 | |
環境変数の正規表現を使用して、監視しないプロセスを指定できます。 |
データ分析
非侵入型モニタリング機能は、フルスタックモニタリングのKubernetesモニタリングに統合されています。 このセクションでは、Kubernetesシナリオでの非侵入型モニタリングの分析機能について説明します。
レイヤ4ネットワークトラフィックの分析
クラウドネイティブシナリオでは、多言語サービスとマルチプロトコルサービスの間に複雑なトポロジ関係が存在します。 Kubernetesクラスターで大量のトラフィックを生成するホットスポットサービスを検出できない場合があります。 ただし、非侵入型モニタリング機能を使用してこれらの課題に対処できます。 次の図は、フロントエンドサービスのアップストリームサービスとダウンストリームサービスの間の実際のネットワークトラフィックトポロジを示しています。 トポロジには、直接対話、DNS要求、および外部IPアドレスの呼び出しが表示されます。 レイヤ4のトラフィックプランまたはトラフィックボリュームを分析して、ホットスポットサービスとボトルネックの問題を特定できます。
非侵入型モニタリング機能を使用すると、HTTP、Redis、MySQL、DNS、PostgreSQLなどのさまざまなアプリケーション層プロトコルに基づいてレイヤ4ネットワークトラフィックを分析できます。


レイヤ7ネットワークトラフィックの分析
ほとんどのトラブルシューティングの場合、レイヤー4ネットワークトラフィックを分析するだけでは根本原因を特定できません。 レイヤー7ネットワークトラフィックも分析する必要があります。
たとえば、Spring Cloud RESTfulプロジェクトのクライアントは、HTTPプロトコルを使用してリクエストを送信します。 サーバーは、スレッドプールとBlockingQueueを使用して要求に応答します。 しかしながら、サーバ側の計装ポイントとクライアント側の計装ポイントとが異なるため、サーバによって計算される応答時間 (Time1) とクライアントによって計算される応答時間 (Time2) とが異なる場合がある。 トラフィックが過度に大きい場合、または多数のアップストリーム要求がブロックされる場合、後続の要求はブロックされ、Time1とTime2は大きく異なる可能性があります。 サービスBのみにインストルメンテーションを構成する場合、ボトルネックの問題が存在する場合でも、Time1とTime2は正常範囲内にある可能性があります。 この場合、ボトルネックの問題をタイムリーに発見できない可能性があります。
非侵入型モニタリング機能を使用して問題を解決できます。 サーバーとクライアントからのデータは、Revc、Write、Sendmsgなどのカーネル関数がリクエストを処理する時間に基づいて視覚化されます。 これにより、サービスのステータスを監視できます。

フルスタック監視アプリケーションは、収集された非侵入型監視データを分析し、グラフ内のデータを視覚化します。 たとえば、Simple Log ServiceコンソールでHTTP分析を有効にすると、インストルメンテーションを使用せずに各クライアントとサーバーのステータスをグラフで表示できます。
非侵入型モニタリング機能を使用すると、MySQL、Redis、PostgreSQLのさまざまなミドルウェアコンポーネントをモニタリングすることもできます。 たとえば、MySQLクライアントの呼び出しに基づいてMySQL呼び出しのパフォーマンスを分析できます。
データインポート
フルスタック監視アプリケーションにデータをインポートするときに、非侵入監視機能を有効にできます。 非侵入型モニタリング機能は、Kubernetesデータプレーンのモニタリングデータの収集をサポートします。 詳細については、「非侵入型モニタリング機能を使用したデータの収集」をご参照ください。