Как сохранить порядок событий потока журнала CloudWatch при передаче их в другую систему? - PullRequest
0 голосов
/ 05 декабря 2018

История

У меня есть задачи ECS, которые запускают док-контейнеры, которые выдают вывод stdout / stderr.Задачи настроены на использование драйвера awslogs для отправки вывода в CloudWatch.В группе журналов CW есть фильтр подписки, подписчик - поток Firehose, который перемещает журналы в корзину S3.Поток имеет лямбду AWS, присоединенную для обработки CW-событий в пакетном режиме.Лямбда анализирует события журнала и отправляет проанализированные данные в другую систему для индексации.Я хочу сохранить порядок проанализированных данных, но не знаю, как этого добиться.

Мой первый подход состоял в том, чтобы включить значения меток времени события CW в анализируемые данные, а затем отсортировать их в целевой системе.Этого оказалось недостаточно, поскольку может быть несколько последовательных событий CW (в одном и том же потоке журналов) с одной и той же временной меткой - значения временной метки CW по умолчанию основаны на миллисекундах.

Во время обработки пакетов событий CW в лямбде их порядок внутри пакета известен, и мой второй подход заключался в обогащении временных меток в проанализированных данных номерами заказов - поэтому события с одной и той же временной меткой имели бы другой порядокномера.Это решение быстро показало свою слабость - может быть несколько экземпляров лямбда-обработки, которые работают параллельно в разных пакетах событий журнала из потока Firehose.Один осколок потока - один экземпляр обработки лямбды.Поэтому невозможно иметь простой счетчик для сохранения порядка событий журнала в нескольких лямбдах, выполняющихся параллельно.

Следующее, что я обнаружил, это то, что идентификаторы событий журнала CW являются уникальными, основанными на числах и увеличивающимися значениями.Я не нашел никакого подтверждения этому факту, так что это всего лишь наблюдение за поведением CW UI в веб-консоли AWS.CW API даже использует идентификаторы в качестве обратного и прямого токенов, поэтому идентификаторы должны быть сопоставимыми.

Вопросы

  • Можно ли использовать идентификаторы для сортировки во внешней системе?Я боюсь, что такая возрастающая природа идентификаторов журналов является лишь внутренней реализацией CW API и может измениться в будущем.
  • Можно ли как-то настроить драйвер awslogs в задачах ECS для включения микросекунд в метки времени CloudWatch (кажется, такой точности должно быть достаточно для моих целей)?Не нашел его в своей документации
...