Шаблон пружинного отдыха с рентгеновским снимком aws

Я хотел бы отслеживать вызовы между микросервисами Spring, развернутыми как aws lambdas, с помощью aws-ray.

Настройка выглядит следующим образом:

  1. Микросервис A с конечной точкой api, развернутый как aws lambda

  2. Микросервис B с конечной точкой api, развернутый как лямбда-выражение aws, вызывающий микросервис A через https

Оба микросервиса включают зависимости aws для xray:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-xray-recorder-sdk-bom</artifactId>
            <version>1.2.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-xray-recorder-sdk-core</artifactId>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-xray-recorder-sdk-apache-http</artifactId>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-xray-recorder-sdk-aws-sdk</artifactId>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-xray-recorder-sdk-aws-sdk-instrumentor</artifactId>
    </dependency>
</dependencies>

Для обоих микросервисов трассировка была включена через файл модели бессерверного приложения sam.yaml:

Resources:
  FunctionA:
    Type: AWS::Serverless::Function
    Properties:
      Handler: example.HandlerA::handleRequest
      Runtime: java8
      CodeUri: target/foo.jar
      MemorySize: 512
      Tracing: Active
      Policies:
        - AWSLambdaBasicExecutionRole
        - AWSXrayWriteOnlyAccess 
      Timeout: 20
      Events:
        GetResource:
          Type: Api
          Properties:
            Path: /{proxy+}
            Method: any

Хотя я могу видеть трассировки отдельных вызовов служб A и B в рентгеновском веб-интерфейсе, вызов B через A не отображается как составная трасса.

Любые идеи? Возможно, мне нужно создать экземпляр фильтра сервлета. Просто включения зависимостей будет недостаточно, верно?


person user152468    schedule 15.01.2018    source источник


Ответы (1)


В настоящее время Amazon API Gateway не распространяет заголовки x-amzn-trace-id. .

Похоже, что ваши функции AWS Lambda могут быть развернуты за конечными точками API Gateway. Из-за этого ограничения интеграции API Gateway с AWS X-Ray проследить эту операцию как одну непрерывную трассировку сегодня невозможно.

Один из подходов к отслеживанию этой операции в единой непрерывной трассировке заключается в том, что микросервис B вызывает микросервис A напрямую с помощью API AWS Lambda Invoke. Этот API учитывает заголовок x-amzn-trace-id (который будет автоматически добавлен в запрос Invoke, поскольку вы включили артефакт aws-xray-recorder-sdk-aws-sdk-instrumentor в свой проект).

person James Bowman    schedule 15.01.2018
comment
Вот это да. Это облом. Спасибо за ссылку. Да, похоже, что сервис B должен вызвать A через лямбда-вызов, чтобы получить составную трассировку. - person user152468; 16.01.2018