OpenTelemetry トレースとメトリクス
OpenTelemetry は、トレース、メトリクス、ログを簡単にエクスポートできるアプリケーションを作成できるように設計された API、SDK、ツールのセットです。 OpenTelemetry API は、分散トレースとメトリクス計測用の単一の API セットを提供し、データを自動的に収集して、選択したバックエンドに送信します。
IntelliJ IDEA に実装されている OpenTelemetry 統計には、トレースとメトリクスが含まれます。 トレーサーはアクティビティを表すスパンを作成します。 メトリクスにはカウンターとゲージが含まれます。 詳細については、 OpenTelemetry ドキュメント(英語)を参照してください。
idea.properties ファイルを使用して OpenTelemetry を有効にすることができます。
IDE のメインメニューから、 ヘルプ | カスタムプロパティの編集 を選択します。
開いたファイルに次のコードを追加します。
idea.diagnostic.opentelemetry.otlp=true
スパン
スパンはトレースを含む単一の操作を表します。 スパンはエンドポイントに送信され、Jaeger UI で視覚化できます。 Jaeger は Docker で起動できます。 Jaeger UI の設定(英語)方法については、リンクをクリックしてください。
スパンの設定
Jaeger で Docker コンテナーを起動します。
Jaeger をダウンロードするには、次の バイナリ(英語)を使用します。
Jaeger コンテナーを起動するには、ターミナルで次のコードを実行します。
docker run -d --name jaeger \ -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \ -e COLLECTOR_OTLP_ENABLED=true \ -p 6831:6831/udp \ -p 6832:6832/udp \ -p 5778:5778 \ -p 16686:16686 \ -p 4317:4317 \ -p 4318:4318 \ -p 14250:14250 \ -p 14268:14268 \ -p 14269:14269 \ -p 9411:9411 \ jaegertracing/all-in-one:1.38Jaeger UI のスパンを表示するには、 localhost:16686 にアクセスしてください。
トレースエンドポイントは次のプロパティで定義できます。
idea.diagnostic.opentelemetry.otlpフラグが true の場合、その値はデフォルトに設定されます: http://127.0.0.1:4318/
OpenTelemetry メトリクス
OpenTelemetry メトリクスは、ログフォルダーに保存されます。 正しい場所については、 ドキュメントを参照してください。
open-telemetry-metrics.csv
メトリクスレポートパスは idea.diagnostic.opentelemetry.metrics.file で定義できます。
open-telemetry-connection-metrics.gz
このファイルは、IntelliJ IDEA バージョン 2023.2 以降で使用できます。
open-telemetry-lux-metrics.gz
リモート開発のフラグ OpenTelemetry スパンとメトリクス
rdct.diagnostic.otlp
これはバックエンド側でのみ有効になります。
バックエンドスパンはバックエンド側で蓄積され、フロントエンド側に送信されます。 バックエンドとフロントエンドの両方のすべてのスパンは、フロントエンドから定義されたエンドポイントに送信されます。
rdct.connection.metrics.enabled
これは両側で有効にする必要があります。
これは、IntelliJ IDEA バージョン 2023.2 以降で利用可能です。
lux.metrics.enabled
リモート開発指標
これらのメトリクスは 1 秒ごとに 1 回記録されます。
それらには次のものが含まれます。
rdct.FramedByteChannel.sentFrames.projectName: TLS 経由で送信されたフレームの数 (バックエンドとフロントエンド)rdct.CountingByteChannel.readBytesRate.projectName: TLS 経由で受信したバイト数 (バックエンドとフロントエンド側)rdct.CountingByteChannel.writeBytesRate.projectName: TLS 経由で送信されたバイト数 (バックエンドとフロントエンド)rdct.FramedByteChannel.receivedFrames.projectName: TLS 経由で受信したフレームの数 (バックエンドとフロントエンド)rdct.ThinClientRdPortServerSocketWrapper.sentBytes.projectName: ポート転送チャネルを介して、薄いフロントエンドプロセス内のユーザーアプリケーション(ブラウザーなど)から送信されたバイトrdct.ThinClientRdPortServerSocketWrapper.receivedBytes.projectName: ポート転送チャネルを介してシンフロントエンドプロセスでユーザーアプリケーション(ブラウザーなど)から受信したバイト
FramedByteChannel は、フロントエンドとバックエンド間の TLS 経由のバイトメッセージチャネルです。 バイトはフレームに蓄積され、チャネルを介して送受信されます。
rdct.FramedByteChannel.receivedFramesLenRate.projectName: TLS 経由で受信したフレームの長さ (バックエンドとフロントエンドの両方)rdct.FramedByteChannel.sentFramesLenRate.projectName: TLS 経由で送信されるフレームの長さ (バックエンドとフロントエンドの両方)rdct.TransportWrapperImpl.connectionState.projectName: 接続状態の序数: 0 -> 「未接続」、1 -> 「接続済み」、2 -> 「閉鎖」、3 -> 「拒否」、4 -> 「障害」 (バックエンドとフロントエンドの両方)rdct.ThinClientDiagnosticsService.pingDirect: シンクライアントの ping 値 (フロントエンド)rdct.ThinClientDiagnosticsService.pingUI: フロントエンド UI スレッドの ping 値 (フロントエンド)
ThinClientDiagnosticsService は、フロントエンドとバックエンドの接続情報を収集する、プロジェクトごとのフロントエンド側診断サービスです。 ping メトリクスは、バックエンドプロセスによって処理されるプロトコル要求です。 pingDirect はバックグラウンドスレッドで処理され、pingUI は EDT で処理されます。 ping が 1 つもない場合は、ネットワークに問題がある (おそらくチャネルが何らかのデータで詰まっている) か、プロセスがフリーズしていると考えられます。 pingDirect はあるが pingUI がない場合は、バックエンドで UI がハングしていると考えられます。 バックエンドからの応答がすぐに受信されない場合は、ping プロパティに -1 値が設定されます。 rdct.ThinClientDiagnosticsService.connectionState: フロントエンドの接続状態の序数: 0 -> WireNotConnected、1 -> NoPings、2 -> NoUiThreadPing、3 -> Connected (フロントエンド)
接続の問題を報告する
接続で問題が発生した場合は、次のワークフローを使用してデータを収集し、問題をさらに調査してください。
データを収集する
IDE のメインメニューから、 ヘルプ | カスタムプロパティの編集 を選択します。
idea.propertiesファイルに次のプロパティを追加します。rdct.connection.metrics.enabledこのプロパティはバックエンドとフロントエンドの両方で有効にする必要があります。
接続メトリクスは 1 秒間隔で報告されます。
接続の問題が再現されたら、フロントエンドとバックエンドの両方の ログフォルダーに書き込まれる生成されたメトリクスファイルを収集します。 これらのファイルは
*.gz解像度を持ち、ファイル名は次のようになります。open-telemetry-connection-metrics.2023-03-29-15-48-40.gzログフォルダーからすべてのメトリクスファイルを含むアーカイブを作成し、対応する YouTrack プロジェクト(英語)で作成された問題に添付します。