Логирование в Zeppelin
В процессе работы Zeppelin Server генерирует текстовые лог-файлы, которые могут быть полезными для анализа причин различных ошибок, возникающих при работе с интерпретаторами, заметками и так далее. Под капотом Zeppelin использует фреймворк Log4j для ведения логов. Для конфигурации процессов логирования в Zeppelin используйте настройки Custom log4j.properties в ADCM. Более подробная информация об этих настройках доступна в разделе Настройка логирования с помощью ADCM.
Расположение и формат лог-файлов
По умолчанию лог-файлы расположены в директории /var/log/zeppelin на хосте, где установлен компонент Zeppelin Server. Чтобы увидеть логи, выполните следующее:
-
Присоединитесь к хосту с Zeppelin Server (по SSH либо другим способом) и выполните команду:
$ ls -la /var/log/zeppelin
Результат выглядит следующим образом:
total 1768 drwxr-xr-x. 2 zeppelin zeppelin 4096 Dec 8 10:22 . drwxr-xr-x. 19 root root 4096 Dec 8 06:10 .. -rw-r--r--. 1 root root 555 Dec 7 06:54 install-interpreter.log -rw-r--r--. 1 root root 1665 Dec 6 16:13 install-interpreter.log.2021-12-06 -rw-r--r--. 1 zeppelin zeppelin 2656 Dec 8 10:30 zeppelin-interpreter-jdbc-zeppelin-bds-adh-2.ru-central1.internal.log -rw-r--r--. 1 zeppelin zeppelin 5918 Dec 6 12:24 zeppelin-interpreter-jdbc-zeppelin-bds-adh-2.ru-central1.internal.log.2021-12-06 -rw-r--r--. 1 zeppelin zeppelin 82200 Dec 7 18:15 zeppelin-interpreter-jdbc-zeppelin-bds-adh-2.ru-central1.internal.log.2021-12-07 -rw-r--r--. 1 zeppelin zeppelin 2376 Dec 7 17:27 zeppelin-interpreter-phoenix2-zeppelin-bds-adh-2.ru-central1.internal.log -rw-r--r--. 1 zeppelin zeppelin 4638 Dec 8 10:31 zeppelin-interpreter-phoenix-zeppelin-bds-adh-2.ru-central1.internal.log -rw-r--r--. 1 zeppelin zeppelin 112258 Dec 6 16:11 zeppelin-interpreter-phoenix-zeppelin-bds-adh-2.ru-central1.internal.log.2021-12-06 -rw-r--r--. 1 zeppelin zeppelin 17404 Dec 7 17:27 zeppelin-interpreter-phoenix-zeppelin-bds-adh-2.ru-central1.internal.log.2021-12-07 -rw-r--r--. 1 zeppelin zeppelin 3951 Dec 7 18:15 zeppelin-interpreter-python-zeppelin-bds-adh-2.ru-central1.internal.log -rw-r--r--. 1 zeppelin zeppelin 4134 Dec 6 16:01 zeppelin-interpreter-sh-zeppelin-bds-adh-2.ru-central1.internal.log -rw-r--r--. 1 zeppelin zeppelin 61835 Dec 8 12:09 zeppelin-zeppelin-bds-adh-2.ru-central1.internal.log -rw-r--r--. 1 zeppelin zeppelin 722037 Dec 6 16:30 zeppelin-zeppelin-bds-adh-2.ru-central1.internal.log.2021-12-06 -rw-r--r--. 1 zeppelin zeppelin 662981 Dec 7 18:15 zeppelin-zeppelin-bds-adh-2.ru-central1.internal.log.2021-12-07 -rw-r--r--. 1 zeppelin zeppelin 78400 Dec 8 06:11 zeppelin-zeppelin-bds-adh-2.ru-central1.internal.out
ПРИМЕЧАНИЕЛоги хранятся в локальной файловой системе, а не в HDFS. -
Чтобы увидеть содержимое конкретного лог-файла, выполните следующее:
$ tail /var/log/zeppelin/<log_file_name>.log
Вывод имеет следующий вид:
INFO [2021-12-08 10:31:02,382] ({pool-2-thread-4} RemoteInterpreterManagedProcess.java[start]:115) - Thrift server for callback will start. Port: 38183 INFO [2021-12-08 10:31:02,882] ({pool-2-thread-4} RemoteInterpreterManagedProcess.java[start]:190) - Run interpreter process [/usr/lib/zeppelin/bin/interpreter.sh, -d, /usr/lib/zeppelin/interpreter/jdbc, -c, 10.92.6.9, -p, 38183, -r, :, -l, /usr/lib/zeppelin/local-repo/phoenix, -g, phoenix] INFO [2021-12-08 10:31:04,138] ({pool-11-thread-1} RemoteInterpreterManagedProcess.java[callback]:123) - RemoteInterpreterServer Registered: CallbackInfo(host:10.92.6.9, port:34481) INFO [2021-12-08 10:31:04,140] ({pool-2-thread-4} RemoteInterpreter.java[call]:168) - Create RemoteInterpreter org.apache.zeppelin.jdbc.JDBCInterpreter INFO [2021-12-08 10:31:04,239] ({pool-2-thread-4} RemoteInterpreter.java[call]:142) - Open RemoteInterpreter org.apache.zeppelin.jdbc.JDBCInterpreter INFO [2021-12-08 10:31:04,240] ({pool-2-thread-4} RemoteInterpreter.java[pushAngularObjectRegistryToRemote]:436) - Push local angular object registry from ZeppelinServer to remote interpreter group phoenix:shared_process INFO [2021-12-08 10:31:04,830] ({pool-2-thread-4} NotebookServer.java[afterStatusChange]:2314) - Job 20211207-082338_940138511 is finished successfully, status: FINISHED INFO [2021-12-08 10:31:04,836] ({pool-2-thread-4} VFSNotebookRepo.java[save]:196) - Saving note:2GS5T8MS7 INFO [2021-12-08 10:31:04,838] ({pool-2-thread-4} SchedulerFactory.java[jobFinished]:120) - Job 20211207-082338_940138511 finished by scheduler org.apache.zeppelin.interpreter.remote.RemoteInterpreter-phoenix:shared_process-shared_session INFO [2021-12-08 12:09:00,355] ({qtp837764579-66} NotebookServer.java[onClose]:372) - Closed connection to 10.92.2.6 : 54643. (1001) null
Типы логов Zeppelin
Существует несколько типов лог-файлов, генерируемых Zeppelin. Их описания приведены ниже.
Имя лог-файла | Атрибуты | Описание |
---|---|---|
zeppelin-zeppelin-<host_name>.log |
|
Содержит информацию о базовых операциях с соединением, задачами, заметками, такими как открытие, закрытие, сохранение и другие |
zeppelin-zeppelin-<host_name>.out |
|
Содержит вывод выполненных операций, например ошибки, возвращаемые в веб-интерфейсе |
zeppelin-interpreter-<interpreter_name>-zeppelin-<host_name>.log |
|
Содержит информацию об указанном интерпретаторе |
install-interpreter.log |
— |
Содержит данные об установке новых интерпретаторов |
Настройка логирования в ADCM
С использованием Log4j настройка процессов логирования в Zeppelin сводится к модификации конфигурационных параметров в файле log4j.properties. Этот файл находится в директории /etc/zeppelin/conf на хосте, где установлен компонент Zeppelin Server, и Zeppelin считывает его при старте. Однако, чтобы не редактировать данный файл вручную на каждом хосте, ADCM предоставляет удобные настройки для изменения конфигураций Log4j на всех хостах кластера ADH. Для этого:
-
В ADCM перейдите на страницу Clusters → <your_cluster_name> → Services → Zeppelin → Primary Configuration и включите опцию Show advanced.
-
Выберите Custom log4j.properties для редактирования конфигурации Log4j. Конфигурация Log4j, указанная через ADCM UI, перезапишет содержимое файла /etc/zeppelin/conf/log4j.properties при рестарте сервиса Zeppelin. Подробная информация о конфигурационных свойствах Log4j доступна в документации Log4j.
-
Сохраните конфигурацию сервиса Zeppelin.
-
Перезапустите сервис Zeppelin.
Стандартная конфигурация log4j.properties
Ниже приведен файл log4j.properties, используемый Zeppelin по умолчанию. Основные параметры подсвечены комментариями, чтобы помочь вам начать работу с конфигурацией Log4j.
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
log4j.rootLogger = INFO, dailyfile (1)
log4j.appender.stdout = org.apache.log4j.ConsoleAppender (2)
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%d] ({%t} %F[%M]:%L) - %m%n (5)
log4j.appender.dailyfile.DatePattern=.yyyy-MM-dd
log4j.appender.dailyfile.Threshold = INFO
log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender (3)
log4j.appender.dailyfile.File = ${zeppelin.log.file} (4)
log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyfile.layout.ConversionPattern=%5p [%d] ({%t} %F[%M]:%L) - %m%n (5)
1 | Установка базового уровня логирования.
События с меньшим уровнем не попадают в лог.
Например, при использовании DEBUG генерируются более детальные и объемные логи, а при уровне ERROR Zeppelin будет записывать в лог только ошибки и более критичные события. |
2 | Использование ConsoleAppender, который выводит события логов в STDOUT. |
3 | Использование DailyRollingFileAppender, который записывает события в файл, ротируемый ежедневно. |
4 | Путь к лог-файлу.
По умолчанию переменная ${zeppelin.log.file} указывает на директорию /var/log/zeppelin. |
5 | Шаблон для преобразования объекта события в строку.
Шаблон по умолчанию имеет следующую структуру:
[Уровень] [Дата] ([Поток] [Имя файла][Метод][Строка]) [Сообщение] |
Настройка логирования через REST API
Сервис Zeppelin предоставляет REST API, с помощью которого вы можете взаимодействовать с Zeppelin, включая настройку логирования. Запрос к REST-эндпойнту для изменения уровня логирования выглядит следующим образом:
PUT http://<zeppelin-host>:<zeppelin-port>/api/log/level/<LOG_LEVEL>
Где:
-
<zeppelin-host>
— адрес хоста, на котором установлен компонент Zeppelin Server. -
<zeppelin-port>
— номер порта, который используется для Zeppelin REST API. Номер порта можно изменить с помощью свойстваzeppelin.server.port
в ADCM. Порт по умолчанию:8180
. -
<LOG_LEVEL>
— желаемый уровень логирования. Допустимые уровни:ALL
,TRACE
,DEBUG
,INFO
,WARN
,ERROR
,FATAL
иOFF
.
Пример:
$ curl -X PUT http://localhost:8180/api/log/level/WARN
Ответ от сервера:
{"status":"OK"}
Типовые задачи
Ниже описаны типовые кейсы, которые могут возникнуть при настройке логирования Zeppelin с помощью Log4j.
Чтобы изменить корневой уровень логирования (по умолчанию INFO
), используйте свойство log4j.rootLogger=<LEVEL>,<APPENDER>
.
Вы можете указать корневой уровень, который будет наследоваться другими логерами Log4j, либо установить необходимый уровень для конкретного логера, например log4j.logger.org.apache.zeppelin.interpreter=<OTHER_LEVEL>
.
По умолчанию логи Zeppelin хранятся в директории /var/log/zeppelin.
Чтобы изменить стандартную директорию, используйте свойство log4j.appender.<appender-name>.File
, где <appender-name>
— это имя аппендера Log4j, привязанного к корневому логеру.
В следующем примере используется кастомный логер (Logger), который записывает логи в отдельную директорию.
Также пример показывает генерацию лог-событий в коде интерпретатора.
-
Добавьте следующие конфигурационные свойства в раздел Custom log4j.properties в ADCM. Основные свойства выделены комментариями.
# ... # New logger definition: log4j.logger.MyCustomLogger=DEBUG, mycustomappender (1) log4j.appender.mycustomappender=org.apache.log4j.RollingFileAppender (2) log4j.appender.mycustomappender.File = /var/log/zeppelin/customlogger/test.log (3) log4j.appender.mycustomappender.rollingPolicy.FileNamePattern=/var/log/zeppelin/customlogger/test.%i.log (4) log4j.appender.mycustomappender.layout=org.apache.log4j.PatternLayout log4j.appender.mycustomappender.layout.conversionPattern=[%p] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{10} - %m %n log4j.appender.mycustomappender.MaxFileSize=10MB (5) log4j.appender.mycustomappender.MaxBackupIndex=10 (6) {% endraw %}
1 Объявление нового логера и аппендера. 2 Использование RollingFileAppender, который ротирует файлы логов при достижении определенного размера. 3 Путь к лог-файлу, генерируемому пользовательским логером. 4 Шаблон, используемый для именования лог-файлов при выполнении переноса (rollover). 5 Максимальный размер лог-файла для выполнения переноса. 6 Максимальное количество лог-файлов, хранимых в директории. -
Сохраните конфигурацию и перезапустите сервис Zeppelin.
-
Запустите тестовую заметку Spark, чтобы сгенерировать записи логов. Для этого создайте новую заметку Spark с использованием Zeppelin UI и выполните в ней следующий код:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; val logger: Logger = LoggerFactory.getLogger("MyCustomLogger"); logger.info("Test info message");
-
Проверьте логи, сгенерированные кастомным логером. Для этого подключитесь к хосту с компонентом Zeppelin Server и выполните команду:
$ ls -l /var/log/zeppelin/customlogger
Вывод:
-rw-r--r-- 1 zeppelin zeppelin 114 Nov 25 13:14 test.log
Файл test.log содержит единственную запись, сгенерированную заметкой Spark:
[INFO] 2024-11-22 13:14:28.569 [FIFOScheduler-interpreter_453440904-Worker-1] MyCustomLogger - Test info message