Журналы создаются из сценариев Glue Python и передаются в CloudWatch. Недавно я начал публиковать структурированные журналы JSON с помощью AWS EMF и заметил, что журналы повреждаются. Некоторые записи журнала, размер которых превышает 1024 байта, разбиваются на несколько записей журнала CloudWatch, тогда как иногда более мелкие записи журнала группируются в одну запись журнала CloudWatch. Это, очевидно, нарушает сообщения JSON и сбивает с толку другие запросы анализа журнала.
Проблема, похоже, началась, когда много сообщений журнала было отправлено в быстрой последовательности. Я видел запись журнала с большой полезной нагрузкой JSON размером около 6000 бит, которая не была разделена в начале журнала, прежде чем все превратилось в куски по 1024 байта, когда много строк печаталось в быстрой последовательности.
Задания представляют собой задания Spark 3.3, написанные на Python 3.9 и выполняемые на Glue 4.0. Затронутые журналы создаются сценарием Python, а не журналами Spark.
Я провел некоторое тестирование и написал сценарий, который ничего не делает, кроме инициализации Glue и последующего вывода сообщений журнала. используя функцию печати Python, средство ведения журнала Python или средство ведения журнала, полученное при вызове getLogger() в GlueContext, и я пришел к выводу, что либо агент CloudWatch, в котором выполняется Python, настроен неправильно, либо существует некоторый промежуточный процесс между запущенным скриптом и агентом CloudWatch.
Сценарий, который я использовал для тестирования, следующий: https://gist.github.com/mhvelplund/961c ... 23a353870b< /p>
Запуск скрипта с включенным непрерывным журналированием и использованием логгера Glue (
Код: Выделить всё
--TYPE=glueВыполнение с помощью средства ведения журнала Python (
Код: Выделить всё
--TYPE=logКод: Выделить всё
--TYPE=print
Вставка небольшой задержки всего в 100 мс (
Код: Выделить всё
--DELAY=100
К сожалению, использование логгера Glue не является хорошим решением, поскольку в моих реальных сценариях есть устаревший код, который использует логгеры Python и операторы необработанной печати, и я меняю их. это будет болезненно.
Кто-нибудь раньше сталкивался с этой проблемой с CloudWatch или Glue, и если да, то как вы ее решили, не исправляя sys.stdout?
Подробнее здесь: https://stackoverflow.com/questions/786 ... -corrupted