0

Spring Insightのドキュメントには次のように記載されています。

トレースは、実行のスレッドを表します。通常は HTTP リクエストによって開始されますが、バックグラウンド ジョブによって開始することもできます

私のアプリケーション アーキテクチャ スタイルは、バックグラウンドで実行されているキューの 1 つであり、これも計測したいと考えています。ただし、キューに入れられたメッセージによって開始されたこれらの呼び出しを Spring Insight に計測させる方法がわかりません。つまり、メッセージがキューから読み取られた後にトレースを計測したいと考えています。

インサイトがこれらのバックグラウンド ジョブを確実にインストルメント化するにはどうすればよいですか?

4

1 に答える 1

0

最終的に、すべてのコマンド ハンドラーを対象とするアスペクトを作成しました。を拡張しAbstractOperationCollectionAspect、メソッドcollectionPointを実装するときに使用する引数として Handler で渡すアスペクトを実装しますcreateOperation
いえ

public aspect CommandHandlerOperationCollectionAspect extends AbstractOperationCollectionAspect
{

    public pointcut collectionPoint():
            execution(* com.xtrac.common.core.handler.ThreadedHandler.HandlerRunnable.executeActorHandler(com.xtrac.common.core.handler.Handler,java.lang.Object));


    protected Operation createOperation(JoinPoint jp)
    {
        Object[] args = jp.getArgs();
        com.xtrac.common.core.handler.Handler handler = (Handler) args[0];
        Operation operation = new Operation()
                .type(XTRACOperationType.COMMAND_HANDLER)
                .label(handler.getClass().getSimpleName())
                .sourceCodeLocation(getSourceCodeLocation(jp));
        return operation;
    }

    @Override
    public String getPluginName()
    {
        return HandlerPluginRuntimeDescriptor.PLUGIN_NAME;
    }

    @Override
    public boolean isMetricsGenerator()
    {
        return true;
    }
}

AbstractSingleTypeEndpointAnalyzerまた、アナライザーに入力するために も実装しました。

    private HandlerEndPointAnalyzer() {
        super(XTRACOperationType.COMMAND_HANDLER);
    }

    public static final HandlerEndPointAnalyzer getInstance() {
        return INSTANCE;
    }

    @Override
        protected EndPointAnalysis makeEndPoint(Frame handlerFrame, int depth) {
            Operation operation = handlerFrame.getOperation();
    String resourceLabel = operation.getLabel();
    String exampleRequest = EndPointAnalysis.getHttpExampleRequest(handlerFrame);
    return new EndPointAnalysis(EndPointName.valueOf(resourceLabel),
                                resourceLabel,
                                exampleRequest,
                                getOperationScore(operation, depth),
                                operation);
}

必ず記述子として追加してください:

public class HandlerPluginRuntimeDescriptor extends PluginRuntimeDescriptor {
    public static final String PLUGIN_NAME = "handler";
    private static final HandlerPluginRuntimeDescriptor INSTANCE=new HandlerPluginRuntimeDescriptor();
    private static final List<? extends EndPointAnalyzer>   epAnalyzers=
            ArrayUtil.asUnmodifiableList(HandlerEndPointAnalyzer.getInstance());

    private HandlerPluginRuntimeDescriptor() {
        super();
    }

    public static final HandlerPluginRuntimeDescriptor getInstance() {
        return INSTANCE;
    }

    @Override
    public Collection<? extends EndPointAnalyzer> getEndPointAnalyzers() {
        return epAnalyzers;
    }

    @Override
    public String getPluginName() {
        return PLUGIN_NAME;
    }
}

すべてSpring xmlファイルに記載されています:

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:insight="http://www.springframework.org/schema/insight-idk"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/insight-idk http://www.springframework.org/schema/insight-idk/insight-idk-1.0.xsd">

  <insight:plugin name="handler" version="${project.version}" publisher="XTRAC Solutions LLC" />


  <insight:operation-group group="XTRAC Handlers" operation="command_handler_operation" />
  <insight:operation-group group="XTRAC Handlers" operation="event_handler_operation" />
  <insight:operation-group group="XTRAC Classic" operation="xtrac_workflow_operation" />

  <insight:operation-view operation="command_handler_operation"
                          template="com/xtrac/insight/command_handler_operation.ftl" />
  <insight:operation-view operation="event_handler_operation"
                          template="com/xtrac/insight/event_handler_operation.ftl" />
  <insight:operation-view operation="xtrac_workflow_operation"
                          template="com/xtrac/insight/xtrac_workflow_operation.ftl" />

    <bean id="handlerPluginEndPointAnalyzer"
          class="com.xtrac.insight.HandlerEndPointAnalyzer"
          factory-method="getInstance"
          lazy-init="true"
        />
    <bean id="handlerPluginRuntimeDescriptor"
             class="com.xtrac.insight.HandlerPluginRuntimeDescriptor"
             factory-method="getInstance"
             lazy-init="true"
           />

</beans>

いくつかの s とともにftl

MethodOperationCollectionAspectまた、これらのハンドラーで発生する Web サービス呼び出しの一部を収集するも作成しました。これにより、ハンドラー操作中に何が起こっているのか、どのくらいの時間がかかるのかについて多くのことを教えてくれる素敵なディスプレイが設定されます。例えば Web サービス呼び出しが混在する Spring Handler の例

これにより、名前付きハンドラーのベースラインしきい値を設定すると、アプリケーションの状態を監視するためのフレームワークが設定されます

しきい値

アプリケーションが正常かどうかを確認できるため、これは非常に便利です。それ以外の場合、エンドポイントはデフォルトで正常な場合に <200 ミリ秒になります。
健康

于 2014-05-15T13:34:27.153 に答える