Отслеживание сообщения в нескольких очередях AWS SQS

У меня есть около трех функций AWS Lambda в следующей форме:

  • Лямбда-функция 1: читает из очереди SQS и помещает сообщение в очередь SQS (форматы входящих и исходящих сообщений различаются)
  • Лямбда-функция 2: читает сообщение из лямбда-функции 1 и помещает сообщение в очередь SQS (форматы входящих и исходящих сообщений различаются)
  • Лямбда-функция 3: читает сообщение из лямбда-функции 3 и обновляет хранилище.

Участвуют 3 очереди, и формат (структура) сообщений в каждой очереди отличается, однако у них есть один uniqueId, который одинаков и может использоваться для связи друг с другом. Так много вопросов, есть ли в SQS или каком-либо другом инструменте способ отслеживать сообщения, я специально смотрю на такие вещи, как:

  • Время, когда сообщение было помещено в очередь
  • Время, когда сообщение было принято лямбда-функцией для обработки.

Моя проблема в том, что 3 функции Lambda по отдельности выполняются в течение нескольких миллисекунд, но время, необходимое для сквозного выполнения, слишком велико, я подозреваю, что сообщения слишком долго находятся в пути.

Я открыт для любых других идей по оптимизации.


person pandith padaya    schedule 07.03.2020    source источник
comment
Я думаю, что sqs и рентгеновский снимок могут оказаться полезным. Вероятно, придется добавить annotations к рентгеновским сегментам с вашим uniqueId, чтобы вы могли позже отфильтровать нужные сообщения.   -  person Marcin    schedule 07.03.2020
comment
Спасибо, я это видел, но это означает, что мне нужно изменить свой код прямо сейчас, чтобы включить эти дополнительные заголовки?   -  person pandith padaya    schedule 07.03.2020
comment
да. У меня в голове нет всей картины этого, но это первое, что я бы подумал. В качестве альтернативы вы можете просто добавить время для каждого сообщения в каждой лямбде и вручную проверить, сколько времени проходит от первой до последней лямбда.   -  person Marcin    schedule 07.03.2020
comment
И как долго это слишком долго? Возможно, для этого есть другая причина, например вы задерживаете свои сообщения или используете очереди задержки?   -  person Marcin    schedule 07.03.2020


Ответы (1)


AWS Step Functions специально разработан для передачи информации между функциями Lambda и управления всем процессом.

Однако вам нужно будет изменить способ написания ваших функций, чтобы использовать пошаговые функции.

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

См .: AWS Lambda и AWS X-Ray - AWS X -Рэй

Или просто начните вручную проверять файлы журналов. Журнал показывает, сколько времени требуется для выполнения каждой функции, поэтому вы должны иметь возможность определить, было ли затрачено время внутри конкретной лямбда-функции, или это время было потрачено между функции, ожидая их запуска.

person John Rotenstein    schedule 07.03.2020
comment
На самом деле меня больше беспокоит время, необходимое для перемещения сообщений между очередями. К сожалению, документация AWS не дает на этот счет хорошего примера. Нужно ли мне включать дополнительный атрибут MessageAttribute в само сообщение? - person pandith padaya; 08.03.2020