Spring および Java 用 X-Ray SDK 付き AOP - AWS X-Ray

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

Spring および Java 用 X-Ray SDK 付き AOP

このトピックでは、X-Ray SDK および 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.9.0</version> </dependency>

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

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

トレースフィルタをアプリケーション

の追加Filter側にWebConfigクラス. セグメント名を AWSXRayServletFilterコンストラクタを文字列として文字列として使用します。フィルタのトレースおよび受信リクエストの計測については、X-Ray SDK for Java SDK による受信リクエストのトレース

例 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インターフェイスからリクエスト. これにより、X-Ray の計測のため、影響を受けた関数をラップするように AOP システムに伝えます。

アプリケーションでの 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()); } } }

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


        完全なコールスタック。