Log4j создает журналы на нескольких узлах. Хотите создать единый журнал в одном узле

У меня есть многоузловой кластер Spark. Я создаю журналы, используя log4j. Журналы создаются, но все узлы в кластере. Они также создаются в каталоге /tmp, а не в каком-либо другом каталоге. Это

spark2-submit --master yarn --deploy-mode cluster --files /path/log4j.properties --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=log4j.properties" --conf "spark.executor.extraJavaOptions =-Dlog4j.configuration=log4j.properties" --class com.dataLoad.Load_WF /путь/LoadData.jar

Как добавить все журналы в один файл журнала вместо нескольких журналов? Как создавать журналы в каталоге, отличном от каталога /tmp в Linux? Пример кода будет очень полезен для понимания. Очень признателен.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
291
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В многоузловом искровом кластере журналы ваших приложений записываются искровым драйвером.

  • если вы выполняете в режиме клиента на узле A, журналы будут сохранены на узле А

  • если вы выполняете в режиме кластера, журналы будут сохранены на узле, где искровой драйвер работает.

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

На главном узле вы должны настроить системный журнал как сервер журналов. Внутри /etc/syslog-ng/ вам нужно отредактировать syslog-ng.conf, чтобы создать места назначения для сохранения файлов централизованного журнала:

пример :

@version: 3.5
@include "scl.conf"
@include "`scl-root`/system/tty10.conf"
    options {
        time-reap(30);
        mark-freq(10);
        keep-hostname(yes);
        };
    source s_local { system(); internal(); };

    source s_network {
        syslog(transport(udp) port(514));
        };

    destination df_local2 {
        file(
            "/var/log/MyClusterLogs/myAppLogs.$YEAR-$MONTH-$DAY.log"
            owner("user")
            group("user")
            perm(0777)
            ); };
    filter f_local2 { facility(local2); };
    log { source(s_network); filter(f_local2); destination(df_local2); };

Затем измените конфигурацию в файле log4j.properties приложения spark, чтобы указать на сервер системного журнала:

log4j.rootCategory=INFO,FILE,SYSLOG
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.syslogHost=<syslog_server_ip>
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.conversionPattern=%d{ISO8601} %-5p [%t] %c{2} %x - %m%n
log4j.appender.SYSLOG.Facility=LOCAL2

Спасибо, что поделились кодом. У меня есть еще одно сомнение. Я использую версию Centos Linux 7, в которой нет syslog-ng. Нужно ли устанавливать его на узел драйвера (главный узел) или на каждый узел в кластере?

Ankit 28.05.2019 15:02

вам нужно установить syslog-ng: yum install syslog-ng. И да, вы должны сделать это на каждом узле

SimbaPK 28.05.2019 15:17

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