Логирование в ZooKeeper
Обзор
ZooKeeper записывает выходные данные и события процессов файловой системы в текстовые логи. Эта информация может быть полезна при диагностике технических проблем в системе.
Каждый компонент ZooKeeper хранит логи локально, на хосте, на котором он установлен. Логи имеют расширение .log и расположены в директории /var/log/zookeeper/. Здесь же находятся файлы .out, содержащие информацию о запуске компонентов.
Имена файлов с логами имеют следующий формат: zookeeper-<пользователь>-<компонент>-<хост>.log
.
Здесь:
-
<пользователь>
— пользователь, запускающий ZooKeeper; -
<компонент>
— имя компонента, например, сервер ZooKeeper; -
<хост>
— FQDN хоста компонента.
Поиск по логам
Чтобы найти в логах интересующую вас информацию, например, сообщения об ошибках, подключитесь к хосту с компонентом, логи которого вы хотите просмотреть, и воспользуйтесь командой grep
.
Например:
$ cat /var/log/zookeeper/zookeeper-zookeeper-cli-elenas-adh3.ru-central1.internal.log | grep -i -A3 -B1 error
Эта команда просматривает лог ZooKeeper CLI на хосте elenas-adh3.ru-central1.internal
и ищет сообщения, содержащие слово error
. Опция i
позволяет игнорировать различия в регистре, а опции -A3 -B1
добавляют к найденной строке с ошибкой одну строчку до нее и три строчки после.
Пример вывода команды:
2023-11-28 12:39:02,986 [myid:] - INFO [main:ClientCnxn@1681] - zookeeper.request.timeout value is 0. feature enabled= 2023-11-28 12:39:02,991 [myid:elenas-adh3.ru-central1.internal:2181] - INFO [main-SendThread(elenas-adh3.ru-central1.internal:2181):ClientCnxn$SendThread@1125] - Opening socket connection to server elenas-adh3.ru-central1.internal/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error) 2023-11-28 12:39:03,041 [myid:elenas-adh3.ru-central1.internal:2181] - INFO [main-SendThread(elenas-adh3.ru-central1.internal:2181):ClientCnxn$SendThread@972] - Socket connection established, initiating session, client: /127.0.0.1:53166, server: elenas-adh3.ru-central1.internal/127.0.0.1:2181 2023-11-28 12:39:03,065 [myid:elenas-adh3.ru-central1.internal:2181] - INFO [main-SendThread(elenas-adh3.ru-central1.internal:2181):ClientCnxn$SendThread@1415] - Session establishment complete on server elenas-adh3.ru-central1.internal/127.0.0.1:2181, sessionid = 0x1000010f7e50000, negotiated timeout = 30000 2023-11-28 12:39:03,855 [myid:] - INFO [main:Environment@109] - Client environment:zookeeper.version=3.5.10-c4d50586fc8f6fdbdc95b05e9b21b49ec0bd8566, built on 11/03/2022 08:23 GM
Уровни логирования
ZooKeeper поддерживает следующие уровни логирования (от наименее информативного к наиболее информативному):
-
FATAL
— сообщает, что операция не может быть выполнена и будет завершена. -
ERROR
— уведомляет, что программа работает неправильно или прекратила работу. -
WARN
— предупреждает о потенциальных проблемах. Это означает, что программа работает не по стандартному сценарию и в будущем могут возникнуть проблемы. -
INFO
— передает информацию о жизненном цикле или состоянии программы. -
DEBUG
— выводит отладочную информацию о внутренних состояниях программы. -
TRACE
— выводит сообщения, отслеживающие ход выполнения программы.
Logger Log4j также принимает значения уровня логирования: OFF
— для отключения логирования, и ALL
— для разрешения всех типов сообщений.
Включение одного уровня логирования включит этот уровень и все уровни до него. Например, если установлен уровень логирования WARN
, то в логи будут попадать только WARN
, ERROR
и FATAL
, но не INFO
, DEBUG
и TRACE
.
Настройки логирования
Настроить параметры логирования в ZooKeeper можно в файле конфигурации log4j.properties, который расположен на каждом хосте ZooKeeper в директории etc/zookeeper/conf/.
Файл log4j.properties содержит общие настройки логирования, а также настройки компонентов логирования: logger и appender. Параметры, которые вы устанавливаете для logger-компонентов, влияют на то, что программы сообщают системе. Параметры, которые вы устанавливаете для appender-компонентов, влияют на то, какая информация от logger-компонентов попадает в логи.
Конфигурация log4j.properties начинается с параметров по умолчанию для root logger. Он обрабатывает все сообщения в ZooKeeper, поскольку это единственный обработчик сообщений. Настройки root logger по умолчанию: INFO, CONSOLE, ROLLINGFILE
. Это означает, что сообщения ниже уровня INFO
отбрасываются, а остальные сообщения попадают как в консоль (CONSOLE appender), так и в логи (ROLLINGFILE appender).
Appender-компоненты по умолчанию:
-
CONSOLE
— выводит сообщения в консоль (например, информацию о работе команды CLI); -
ROLLINGFILE
— сохраняет сообщения в логи и периодически обновляет их.
Вы можете использовать класс appenders layout
, чтобы изменить формат сообщений в логах. Кроме самого сообщения шаблон сообщений по умолчанию включает: уровень логирования, дату, информацию о выполнении команды и ее вызове.
Более подробно об архитектуре Log4j читайте в документации Apache Logging Services.
# Define some default values that can be overridden by system properties zookeeper.root.logger="{{ services.zookeeper.config['zookeeper_env_content']['ZOO_LOG4J_PROP'] }}" zookeeper.console.threshold=INFO zookeeper.log.dir="{{ services.zookeeper.config['zookeeper_env_content']['ZOO_LOG_DIR'] }}" zookeeper.log.file=zookeeper.log zookeeper.log.threshold=INFO zookeeper.tracelog.dir="{{ services.zookeeper.config['zookeeper_env_content']['ZOO_LOG_DIR'] }}" zookeeper.tracelog.file=zookeeper.log # # ZooKeeper Logging Configuration # # Format is "<default threshold> (, <appender>)+ # DEFAULT: console appender only log4j.rootLogger=${zookeeper.root.logger} # Example with rolling log file #log4j.rootLogger=DEBUG, CONSOLE, ROLLINGFILE # Example with rolling log file and tracing #log4j.rootLogger=TRACE, CONSOLE, ROLLINGFILE, TRACEFILE # # Log INFO level and above messages to the console # log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold} log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n # # Add ROLLINGFILE to rootLogger to get log file output # Log DEBUG level and above messages to a log file log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold} log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file} # Max log file size of 10MB log4j.appender.ROLLINGFILE.MaxFileSize=10MB # uncomment the next line to limit number of backup files #log4j.appender.ROLLINGFILE.MaxBackupIndex=10 log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n # # Add TRACEFILE to rootLogger to get log file output # Log DEBUG level and above messages to a log file log4j.appender.TRACEFILE=org.apache.log4j.FileAppender log4j.appender.TRACEFILE.Threshold=TRACE log4j.appender.TRACEFILE.File=${zookeeper.tracelog.dir}/${zookeeper.tracelog.file} log4j.appender.TRACEFILE.layout=org.apache.log4j.PatternLayout ### Notice we are including log4j's NDC here (%x) log4j.appender.TRACEFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L][%x] - %m%n
Чтобы изменить log4j.properties на всех хостах одновременно, используйте ADCM:
-
На странице Clusters выберите нужный кластер.
-
Перейдите на вкладку Services и нажмите на ZooKeeper.
-
Выберите Components и затем Zookeeper Server.
-
Включите опцию Show Advanced и найдите поле log4j.properties template.
-
Внесите необходимые изменения в файл по умолчанию.
-
Подтвердите изменения в конфигурации ZooKeeper, нажав Save.
-
В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение
true
, и нажмите Run.
ПРИМЕЧАНИЕ
Файл log4j.properties содержит значения по умолчанию для параметров логирования. Они могут быть перезаписаны компонентами ZooKeeper при перезапуске. Чтобы этого избежать, можно установить значения параметров через переменные среды в файле zookeeper-env.sh. |
Чтобы изменить настройки логирования в файле zookeeper-env.sh через ADCM:
-
На странице Clusters выберите нужный кластер.
-
Перейдите на вкладку Services и нажмите на ZooKeeper.
-
Включите опцию Show Advanced и найдите поле zookeeper-env.sh.
-
Выберите нужный параметр, например, ZOO_LOG4J_PROP, и внесите изменения.
-
Подтвердите изменения в конфигурации ZooKeeper, нажав Save.
-
В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение
true
, и нажмите Run.