Какой регистратор я должен использовать для получения данных в Cloud Logging

Я запускаю задание PySpark с помощью Cloud Dataproc и хочу записывать информацию, используя logging модуль Python. Цель состоит в том, чтобы затем отправить эти журналы в Cloud Logging.

Из этого вопроса я узнал, что могу достичь этого, добавив файл журнала в конфигурацию fluentd, которая находится по адресу /etc/google-fluentd/google-fluentd.conf,

Тем не менее, когда я смотрю на файлы журнала в /var/logЯ не могу найти файлы, содержащие мои журналы. Я попытался использовать регистратор Python по умолчанию и регистратор 'py4j'.

logger = logging.getLogger()
logger = logging.getLogger('py4j')

Может кто-нибудь пролить свет на то, какой регистратор мне следует использовать и какой файл следует добавить в конфигурацию fluentd?

Спасибо

1 ответ

ТЛ; др

Это изначально не поддерживается, но будет поддерживаться в следующей версии Cloud Dataproc. Тем не менее, существует временное решение вручную.

Временное решение

Во-первых, убедитесь, что вы отправляете журналы Python на правильный log4j из контекста spark. Для этого объявите ваш логгер как:

import pyspark
sc = pyspark.SparkContext()
logger = sc._jvm.org.apache.log4j.Logger.getLogger(__name__)

Вторая часть включает обходной путь, который еще не поддерживается изначально. Если вы посмотрите на файл свойств искры под

/etc/spark/conf/log4j.properties

на мастере вашего кластера вы можете увидеть, как log4j настроен для спарка. В настоящее время это выглядит следующим образом:

# Set everything to be logged to the console
log4j.rootCategory=INFO, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c: %m%n

# Settings to quiet third party logs that are too verbose
...

Обратите внимание, что это означает, что журналы log4j отправляются только на консоль. Агент dataproc извлечет эти выходные данные и вернет их как выходные данные драйвера задания. Однако для того, чтобы свободный пользователь мог получить выходные данные и отправить их в Google Cloud Logging, вам понадобится log4j для записи в локальный файл. Поэтому вам нужно будет изменить свойства log4j следующим образом:

# Set everything to be logged to the console and a file
log4j.rootCategory=INFO, console, file
# Set up console appender.
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c: %m%n

# Set up file appender.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/var/log/spark/spark-log4j.log
log4j.appender.file.MaxFileSize=512KB
log4j.appender.file.MaxBackupIndex=3
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c: %m%n

# Settings to quiet third party logs that are too verbose
...

Если вы установите для файла /var/log/spark/spark-log4j.log, как показано выше, конфигурация fluentd по умолчанию в вашем кластере Dataproc должна его забрать. Если вы хотите установить для файла что-то другое, вы можете следовать инструкциям в этом вопросе, чтобы получить свободный доступ к этому файлу.

Другие вопросы по тегам