Log4j создает журналы в нескольких узлах.Хотите создать единый журнал в одном узле - PullRequest
1 голос
/ 28 мая 2019

У меня есть многоузловой кластер Spark cluster. Я создаю журналы, используя 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 /path/LoadData.jar

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

1 Ответ

0 голосов
/ 28 мая 2019

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

  • если вы выполняете в режиме клиента на узле A, журналы будут сохраняться на узле 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
...