2017-01-07 6 views
-1

私は、エンドポイントでさまざまなサービスを使用するSpring MVC Webアプリケーションを持っています。たとえば、1つのエンドポイントは次の構造を持ちます。Javaメソッドを追跡するためのツールはありますか?

public void endpointA() { 
    // ... 
    // call methodA 
    // ... 
    // call methodB and methodC in parallel using RxJava 
    // ... 
    // call methodD 
    // ... 
} 

メソッドは、外部サービスまたはデータベース操作を呼び出すことがあります。私は、そのような呼び出しのタイミングを測定し、各サービスの開始時と終了時に(ChromeのDev Toolsのような)情報を使ってエンドポイント呼び出しのタイムラインを持つという考えを持っています。それぞれのトラッキングメソッドは、ネストされたメソッドを呼び出すことができます。

私はZipkinの経験がありますが、それは分散型の場合とエンドポイントコール全体を追跡するためのものです(私が知っているように)。ここでモノリスアプリケーションがあり、私が望む方法を追跡する能力が必要です。追跡されるコードには最小限の変更が必要です。たとえば、私は、追跡されたクラスにいくつかのメンバを作成したり、追跡されたメソッドにパラメータを渡したりしたくありません。

一般に、このツールは、Javaアプリケーションがパフォーマンス測定でワークフローを追跡するために使用できます。私は、System.currentTimeMillis()の値を希望するメソッドの前後に標準的なログを使用してログファイルを分析することを考えていましたが、多くの同一コードを持ち、メソッド呼び出し階層のトラッキングを解決しません。直接追跡するのではなく、追跡されていない方法を使用します。

この目的のためのツールはありますか?私は自転車を発明したくありません。

+0

アスペクト指向プログラミングの古典的なケースのように聞こえる。 Springと最も統合されたソリューションを見てみましょう。https://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html – hotzst

+0

@hotzst、はい、わかりますAOPが役立つかもしれませんが、いくつかのモジュールにコードがあり、追跡したいコードがSpringのサポートなしでモジュールに配置されています。もちろん、Springでモジュール内にラッパークラスを作成することはできますが、おそらく既にそのための解決策があります。 –

+0

Springに依存しないAspectJのようなフレームワークもあります。 – hotzst

答えて

0

一般的には、より典型的なエージェント/プロファイラのアプローチに興味があると思います。

あなたはzipkinについて言及していますので、春の雲のsleuthはmake "local spans"になり、RxJavaを含む特定のintegrated librariesを代わって行います。

これが役に立ちます。

関連する問題