Распространение взаимосвязей восходящего и нисходящего потоков вручную в AWS X-Ray

Я создаю систему, которая выглядит примерно так:

                                  /-> Stream to Lambda -> DynamoDB
API Gateway -> AWS Lambda -> DynamoDB
                                  \-> Stream to Lambda -> DynamoDB

Таким образом, вызов API-шлюза вызывает лямбда-выражение, которое сохраняется в DynamoDB. Другие лямбды запускаются этим сохранением DynamoDB, которое выполняет некоторые вычисления и сохраняет новые данные в DynamoDB.

Я добавил трассировку AWS X-Ray, но AWS X-Ray показывает это в виде трех разных деревьев:

  • API-интерфейс для Dynamo
  • 'Клиенты' -> Lamdba -> DynamoDB
  • 'Клиенты' -> Lamdba -> DynamoDB

карта сервиса

На изображении нижняя трассировка запускается API-шлюзом, но первые две запускаются DynamoDB, а затем записываются обратно в него.

Если я передаю идентификатор трассировки вручную через DynamoDB в нисходящие лямбды, есть ли способ сказать рентгеновскому снимку, что нисходящие лямбды передаются из DynamoDB?


person Paul D'Ambra    schedule 15.07.2018    source источник


Ответы (1)


Да, это возможно. По сути, вам просто нужно добавить X-Amzn-Trace-Id-header с вашим постоянным идентификатором трассировки в качестве значения.

Из документации AWS X-Ray (хотя и с немного другим намерением):

Отслеживание безопасности заголовка

Заголовок трассировки может исходить из X-Ray SDK, сервиса AWS или запроса клиента. Ваше приложение может удалять X-Amzn-Trace-Id из входящих запросов, чтобы избежать проблем, вызванных добавлением пользователями идентификаторов трассировки или выборочными решениями в свои запросы.

Как вы добавите заголовок перед инициализацией клиента X-Ray, зависит от языка программирования и X-Ray SDK, который вы используете. Вы также должны принять во внимание, возможно, существующий X-Amzn-Trace-Id-заголовок, если ваша функция Lambda вызывается службами, которые также могут передавать такой заголовок.

person Dunedan    schedule 15.07.2018
comment
Итак, в Lambda 1 я захватываю Root=1-5b4b923f-fd411c0c7bca240fd93caaf3;Parent=19ce7ff41b08e00e;Sampled=1 передаю это через DynamoDB и устанавливаю это в Lambda 2. Lambda 2 даже не показывает, что сейчас он пишет в dyanmodb. - person Paul D'Ambra; 15.07.2018