
Янь Цуй

Распространенной практикой является установление уровня журнала ВНИМАНИЕ для производства из-за объемов перевозок. Это связано с тем, что нужно учитывать разные факторы стоимости:
- Стоимость лесозаготовки : Журналы CloudWatch взимается плата в размере 0,50 дол. США за поглощенный ГБ. По моему опыту, это часто гораздо выше, чем затраты на вызов лямбда
- Стоимость хранения : Журналы CloudWatch взимает 0,03 дол. США по ГБ в месяц, а его политика сохранения по умолчанию есть Никогда не заканчивается! Обычной практикой является отправка ваших журналов в другую службу агрегации журналов и установление политики сохранения на X дней. Смотрите этот пост, чтобы узнать больше.
- Стоимость обработки : если вы обрабатываете журналы с помощью лямбдато вы также должны учитывать стоимость лямбда призывы.
Но это оставляет нас без любой журналы отладки в производстве. Когда проблема возникает в производстве, у вас не будет журналов отладки, которые помогут определить основную причину.
Вместо этого вам придется тратить драгоценное время на развертывание новой версии вашего кода, чтобы включить журнал отладки. Не говоря уже о том, что вы не должны забыть выключить журнал отладки при развертывании исправления.
С микросервисами вам часто приходится делать это для нескольких служб, чтобы получить все необходимые уведомления об отладке.
Все эти увеличить среднее время восстановления (MTTR) во время инцидента. Это не то, что мы хотим.

Это не должно быть таковым.
Существует счастливая золотая середина между отсутствием журналов отладки и наличием всех журналов отладки. Вместо этого мы должны взять образцы журналов отладки с небольшого процента вызовов.

Я демонстрировал, как это сделать в Заготовка леса раздел моего видеокурса Бессерверная готовность к производству. Вам нужны две основные вещи:
- регистратор, который позволяет динамически изменять уровень регистрации, например с помощью переменных среды
- механизм промежуточного программного обеспечения, такой как middy

С лямбда, мне не нужно большинство функций полноценного регистратора, такого как pino. Вместо этого я предпочитаю использовать простой модуль регистратора, подобный этому. Это написано в несколько строк и дает мне основания:
- структурированный журнал с JSON
- возможность ведения журнала на разных уровнях
- возможность динамически управлять уровнем журнала с помощью переменных среды
Использование серединая могу создать промежуточное программное обеспечение для динамического обновления уровня журнала отлаживать. Это делается для настраиваемого процента вызовов. В конце вызова промежуточное программное обеспечение возобновит предыдущий уровень журнала.

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

Это нужно для того, чтобы мы фиксировали ошибку с наибольшим количеством контекста, включая:
Прекрасно иметь журналы отладки для небольшого процента вызовов. Но когда вы имеете дело с микросервисами, вам нужно убедиться, что ваши журналы отладки охватывают всю цепочку вызовов.
Это единственный способ составить полную картину всего происходящего в этой цепочке вызовов. Иначе вы получите фрагменты журналов отладки из многих цепочек вызовов, но никогда не полную картину друга.
Вы можете сделать это, переслав решение о включении журнала отладки в качестве идентификатора корреляции. Следующая функция в цепочке будет уважать это решение и передаст его дальше. Смотрите этот пост для более подробной информации.

Вот и все, еще один профессиональный совет по поводу того, как создать наблюдательность в вашей бессерверной программе. Если вы хотите узнать больше о том, как сделать ва-банк без сервера, посмотрите мое руководство по 10 шагам здесь.
В следующий раз!