Какой регистратор я должен использовать для получения данных в 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 должна его забрать. Если вы хотите установить для файла что-то другое, вы можете следовать инструкциям в этом вопросе, чтобы получить свободный доступ к этому файлу.