Spring と X-Ray SDK for Java での AOP の使用 - AWS X-Ray

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

Spring と X-Ray SDK for Java での AOP の使用

このトピックでは、X-RaySDK および Spring Framework を使用して、コアロジックを変更せずにアプリケーションを計測する方法について説明します。これにより、AWS でリモートに実行中のアプリケーションを非侵襲的な方法で計測することができます。

Spring の設定

Maven または Gradle を使用して、AOP でアプリケーションを計測するように Spring を設定できます。

Maven を使用してアプリケーションを構築する場合は、次の依存関係を pom.xml ファイルに追加します。

<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-xray-recorder-sdk-spring</artifactId> <version>2.4.0</version> </dependency>

Gradle の場合は、次の依存関係を build.gradle ファイルに追加します。

compile 'com.amazonaws:aws-xray-recorder-sdk-spring:2.4.0'

トレースフィルタをアプリケーションに追加する

Filter クラスWebConfigに を追加します。コンAWSXRayServletFilterストラクタにセグメント名を文字列として渡します。フィルタのトレースと受信リクエストの計測の詳細については、「」X-Ray SDK for Java を使用して受信リクエストをトレースするを参照してください。

例 src/main/java/myapp/WebConfig.java - Spring

package myapp; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; import javax.servlet.Filter; import com.amazonaws.xray.javax.servlet.AWSXRayServletFilter; @Configuration public class WebConfig { @Bean public Filter TracingFilter() { return new AWSXRayServletFilter("Scorekeep"); } }

コードに注釈を付ける、またはインターフェイスを実装する

クラスには @XRayEnabled の注釈を付ける必要があります。XRayTraced インターフェイスからリクエスト. これは、AOP システムにX-Ray、計測のために影響を受けるクラスの関数をラップするように指示します。

アプリケーションでX-Rayのアクティブ化

アプリケーションでX-Rayトレースを有効にするには、コードで抽象クラスを拡張する必要があります。AbstractXRayInterceptor 次のメソッドをオーバーライドします。

  • generateMetadata— この関数では、現在の関数のトレースにアタッチされたメタデータをカスタマイズできます。デフォルトでは、実行中の関数のクラス名がメタデータに記録されます。追加の情報が必要な場合は、さらにデータを追加できます。

  • xrayEnabledClasses— この関数は空であり、空のままにしておく必要があります。これは、ラップするメソッドをインターセプターに指示するポイントカットのホストとして機能します。@XRayEnabled の注釈が付けられたどのクラスをトレースするか指定して、ポイントカットを定義します。次のステートメントは、@XRayEnabled という注釈が付けられたすべてのコントローラービーンをラップするようにインターセプターに伝えます。

    @Pointcut(“@within(com.amazonaws.xray.spring.aop.XRayEnabled) && bean(*Controller)”)

Example

次のコードは、抽象クラスを示しています AbstractXRayInterceptor.

@Aspect @Component public class XRayInspector extends AbstractXRayInterceptor { @Override protected Map<String, Map<String, Object>> generateMetadata(ProceedingJoinPoint proceedingJoinPoint, Subsegment subsegment) throws Exception { return super.generateMetadata(proceedingJoinPoint, subsegment); } @Override @Pointcut("@within(com.amazonaws.xray.spring.aop.XRayEnabled) && bean(*Controller)") public void xrayEnabledClasses() {} }

次のコードは、 によって計測されるクラスですX-Ray。

@Service @XRayEnabled public class MyServiceImpl implements MyService { private final MyEntityRepository myEntityRepository; @Autowired public MyServiceImpl(MyEntityRepository myEntityRepository) { this.myEntityRepository = myEntityRepository; } @Transactional(readOnly = true) public List<MyEntity> getMyEntities(){ try(Stream<MyEntity> entityStream = this.myEntityRepository.streamAll()){ return entityStream.sorted().collect(Collectors.toList()); } } }

アプリケーションを正しく設定した場合は、コンソールの次のスクリーンショットに示すように、コントローラーからサービス呼び出しまで、アプリケーションの完全なコールスタックが表示されます。


        完全なコールスタック。