ElasticSearch: как настроить logging.yml

Я установил ElasticSearch 1.4.1 на машину Ubuntu.

Его журналы находятся в местоположении по умолчанию:

/var/log/elasticsearch/

Когда я запускаю ElasticSearch, через некоторое время файлы журнала растут, и с ними становится трудно справиться.

Журналы уже находятся в режиме вращающегося файла. Смысл, каждый день появляется новый файл журнала.

Я хочу настроить журналы для zip (например, = file.log.zip, в настоящее время это не так).

Я также знаю, что могу сделать это в файле logging.yml, но я не знаю, как это сделать.

Может кто-нибудь мне помочь?

Ответ 1

После некоторого копания (также в исходном коде ElasticSearch) я нашел ответ.:)

Обычно, когда вы используете такое программное обеспечение, как ElasticSearch, и хотите, чтобы оно использовалось в производстве, вы думаете, что основная функция, такая как ведение журнала, все заботится. К сожалению, в текущей версии (1.4 и ранее) это не так.

ElasticSearch использует log4j в качестве механизма ведения журнала.

log4j делает следующее:

  • Добавить журналы в файл журнала
  • Поверните файл журнала, когда он больше, чем CONFIGURED_VALUE

Если в ElasticSearch сильно используется, журналы накапливаются и в конечном итоге заполняют ваше хранилище.

Ответ на этот вопрос заключается в следующем:

  1. Заблокировать старый файл с измененным журналом
  2. Убедитесь, что общие файлы журнала не будут превышать CONFIGURED_VALUE

Ответ на этот вопрос заключается в том, что существует еще один API, который вызывает log4j-extensions, и он расширяет возможности log4j и застегивает вращающиеся файлы журналов.

К сожалению, он будет доступен только в следующей версии 1.5 или в ветке master для сумасшедших людей среди нас, которые скомпилируют ElasticSearch из исходного кода. (см. log4j поддержка rollPolicy).

НО, существует более простое решение:

ИСПОЛЬЗУЙТЕ ЛОГОТИП, ЧТОБЫ ОБРАТИТЬ ВАШИ ЛОГИСТИКИ.

Если ElasticSearch работает на ОС Linux, вы можете использовать демон logrotate. (см. то, что лог вращается Общие сведения об утилите logrotate)

Вам нужно сделать следующее:

  • Reset конфигурация журнала
  • Создать новый файл для обработки файлов журнала

Reset конфигурация журнала

sudo vi /etc/elasticsearch/logging.yml

Измените следующее в logging.yml

# Mark the dailyRollingFile Appender
#  file:
#    type: dailyRollingFile
#    file: ${path.logs}/${cluster.name}.log
#    datePattern: "'.'yyyy-MM-dd"
#    layout:
#      type: pattern
#      conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n"

# Add the file Appender
file:
  type: file
  file: ${path.logs}/${cluster.name}.log
  datePattern: "'.'yyyy-MM-dd"
  layout:
    type: pattern
    conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n"

Создать новый файл для обработки файлов журнала

sudo vi /etc/logrotate.d/elasticsearch

Добавьте в файл logrotate следующее:

/var/log/elasticsearch/*.log {
    daily
    rotate 100
    size 50M
    copytruncate
    compress
    delaycompress
    missingok
    notifempty
    create 644 elasticsearch elasticsearch
}

После этого перезапустите ElasticSearch

sudo service elasticsearch stop
sudo service elasticsearch start

Таким образом вы ограничите общее хранилище файлов журналов в 5 ГБ (поверните 100 * 50 М).

Очевидно, вы можете настроить его по своему усмотрению.

Ответ 2

Я бы не согласился с вашим ответом. Во-первых, я бы рекомендовал против использования zip, если вы используете gzip, вы все равно можете читать файлы из командной строки, не извлекая их сначала. Во-вторых, в то время как логротация - удобный инструмент, log4j должен иметь возможность обрабатывать собственное вращение журнала. Следующая конфигурация должна работать красиво:

 file:
    type: org.apache.log4j.rolling.RollingFileAppender
    file: ${path.logs}/${cluster.name}.log
    rollingPolicy: org.apache.log4j.rolling.TimeBasedRollingPolicy
    rollingPolicy.FileNamePattern: ${path.logs}/${cluster.name}.log.%d{yyyy-MM-dd}.gz
    layout:
      type: pattern
      conversionPattern: "%d{ISO8601}[%-5p][%-25c] %m%n"