Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Руководство [7.17] ›Настройка Elasticsearch ›Настройка Elasticsearch

Ведение журнала

Вы можете использовать системные журналы Elasticsearch для мониторинга кластера и диагностики проблем. Если Elasticsearch запущен как служба, расположение журналов по умолчанию зависит от вашей платформы и метода установки:

В Docker журналы отображаются в консоли и обрабатываются настроенным драйвером ведения журналов Docker. Для доступа к логам выполните docker logs.

Для установок Debian, Elasticsearch записывает журналы в /var/log/elasticsearch.

Для установок RPM, Elasticsearch записывает журналы в /var/log/elasticsearch.

Для установок macOS .tar.gz, Elasticsearch записывает журналы в $ES_HOME/logs.

Файлы в $ES_HOME могут быть удалены при обновлении. В рабочей среде настоятельно рекомендуется установить path.logs в расположение, отличное от $ES_HOME. См. Настройки путей.

Для установок macOS Homebrew, Elasticsearch записывает журналы в /usr/local/var/log/elasticsearch.

Для установок Linux .tar.gz, Elasticsearch записывает журналы в $ES_HOME/logs.

Файлы в $ES_HOME могут быть удалены при обновлении. В рабочей среде настоятельно рекомендуется установить path.logs в расположение, отличное от $ES_HOME. См. Настройки путей.

Для установок Windows .zip, Elasticsearch записывает журналы в %ES_HOME%\logs.

Файлы в %ES_HOME% могут быть удалены при обновлении. В рабочей среде настоятельно рекомендуется установить path.logs в расположение, отличное от %ES_HOME%`. См. Настройки путей.

Если вы запускаете Elasticsearch из командной строки, Elasticsearch выводит журналы в стандартный вывод (stdout).

Настройка ведения журналов

Elastic настоятельно рекомендует использовать конфигурацию Log4j 2, поставляемую по умолчанию.

Elasticsearch использует Log4j 2 для ведения журналов. Log4j 2 можно настроить с помощью файла log4j2.properties. Elasticsearch предоставляет три свойства, ${sys:es.logs.base_path}, ${sys:es.logs.cluster_name} и ${sys:es.logs.node_name}, которые можно использовать в файле конфигурации для определения расположения файлов журналов. Свойство ${sys:es.logs.base_path} будет соответствовать каталогу журналов, ${sys:es.logs.cluster_name} будет соответствовать имени кластера (используется в качестве префикса имён файлов журналов в конфигурации по умолчанию), а ${sys:es.logs.node_name} будет соответствовать имени узла (если имя узла явно задано).

Например, если ваш каталог журналов (path.logs) - это /var/log/elasticsearch, а ваш кластер называется production, то ${sys:es.logs.base_path} будет соответствовать /var/log/elasticsearch, а ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log будет соответствовать /var/log/elasticsearch/production.log.

######## Server JSON ############################
appender.rolling.type = RollingFile 
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json 
appender.rolling.layout.type = ESJsonLayout 
appender.rolling.layout.type_name = server 
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz 
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy 
appender.rolling.policies.time.interval = 1 
appender.rolling.policies.time.modulate = true 
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy 
appender.rolling.policies.size.size = 256MB 
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.fileIndex = nomax
appender.rolling.strategy.action.type = Delete 
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
appender.rolling.strategy.action.condition.type = IfFileName 
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* 
appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize 
appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB 
################################################

Настроить аппендер RollingFile

Записать в /var/log/elasticsearch/production_server.json

Использовать макет JSON.

type_name - флаг, заполняющий поле type в ESJsonLayout. Это позволяет легче отличать различные типы журналов при их разборе.

Архивировать журналы в /var/log/elasticsearch/production-yyyy-MM-dd-i.json; журналы будут сжаты при каждом архивировании, а i будет инкрементироваться

Использовать политику архивирования, основанную на времени

Архивировать журналы ежедневно

Выравнивать архивирование по границе дня (вместо архивирования каждые 24 часа)

Использование политики архивирования, основанной на размере

Архивировать журналы после 256 МБ

Использовать действие удаления при архивировании журналов

Удалять только журналы, соответствующие шаблону файла

Шаблон для удаления только основных журналов

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

Условие размера для сжатых журналов - 2 ГБ

######## Server -  old style pattern ###########
appender.rolling_old.type = RollingFile
appender.rolling_old.name = rolling_old
appender.rolling_old.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.log 
appender.rolling_old.layout.type = PatternLayout
appender.rolling_old.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%n
appender.rolling_old.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.old_log.gz

Конфигурация аппендеров для шаблонов old style. Эти журналы будут сохранены в файлах *.log, а при архивировании - в файлах * .log.gz. Обратите внимание, что их следует считать устаревшими и они будут удалены в будущем.

Парсинг конфигурации Log4j может сбиться из-за ненужных пробелов; если вы копируете и вставляете какие-либо настройки Log4j с этой страницы или вводите любую конфигурацию Log4j, убедитесь, что удалены все начальные и конечные пробелы.

Обратите внимание, что вы можете заменить .gz на .zip в appender.rolling.filePattern для сжатия архивированных журналов в формате zip. Если вы удалите расширение .gz, то журналы не будут сжиматься при архивировании.

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

appender.rolling.strategy.type = DefaultRolloverStrategy 
appender.rolling.strategy.action.type = Delete 
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path} 
appender.rolling.strategy.action.condition.type = IfFileName 
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* 
appender.rolling.strategy.action.condition.nested_condition.type = IfLastModified 
appender.rolling.strategy.action.condition.nested_condition.age = 7D 

Настройка аппендера DefaultRolloverStrategy

Настройка действия Delete для обработки архивирования

Базовый путь к журналам Elasticsearch

Условие, применяемое при обработке архивирования

Удалить файлы из базового пути, соответствующие шаблону ${sys:es.logs.cluster_name}-*; это шаблон, к которому архивируются файлы журналов; это необходимо для удаления только архивированных журналов Elasticsearch, а не устаревших и медленных журналов

Вложенное условие, применяемое к файлам, соответствующим шаблону

Сохранять журналы в течение семи дней

Можно загрузить несколько файлов конфигурации (в этом случае они будут объединены), если они названы log4j2.properties и имеют каталог конфигурации Elasticsearch в качестве предка; это полезно для плагинов, которые предоставляют дополнительные логгеры. Раздел logger содержит пакеты java и их соответствующий уровень ведения журнала. Раздел appender содержит пункты назначения для журналов. Подробная информация о том, как настроить ведение журнала и все поддерживаемые аппендеры, доступна в документации Log4j.

Настройка уровней ведения журнала

Каждый пакет Java в исходном коде Elasticsearch имеет соответствующий логгер. Например, пакет org.elasticsearch.discovery содержит logger.org.elasticsearch.discovery для журналов, связанных с процессом дискoвери.

Чтобы получить более или менее подробные журналы, используйте API настроек обновления кластера, чтобы изменить уровень журналов соответствующего регистратора. Каждый регистратор принимает встроенные в Log4j 2 уровни журналов, от наименее до наиболее подробных: OFF, FATAL, ERROR, WARN, INFO, DEBUG и TRACE. По умолчанию уровень журнала равен INFO. Сообщения, записанные на более высоких уровнях подробности (DEBUG и TRACE), предназначены только для опытных пользователей.

PUT /_cluster/settings
{
  "persistent": {
    "logger.org.elasticsearch.discovery": "DEBUG"
  }
}

Другие способы изменения уровней журналов:

  1. elasticsearch.yml:

    logger.org.elasticsearch.discovery: DEBUG

    Это наиболее подходящий вариант при отладке проблемы на одном узле.

  2. log4j2.properties:

    logger.discovery.name = org.elasticsearch.discovery
    logger.discovery.level = debug

    Это наиболее подходящий вариант, когда вам уже необходимо изменить конфигурацию Log4j 2 по другим причинам. Например, вы можете направить журналы для определенного регистратора в другой файл. Однако такие случаи встречаются редко.

Журналирование устаревания

Elasticsearch также записывает журналы устаревания в директорию журналов. Эти журналы записывают сообщение, когда вы используете устаревшую функциональность Elasticsearch. Вы можете использовать журналы устаревания для обновления своего приложения перед обновлением Elasticsearch до новой основной версии.

По умолчанию Elasticsearch выполняет сворачивание и сжатие журналов устаревания при достижении 1 ГБ. По умолчанию сохраняется максимум пять файлов журналов: четыре свернутых журнала и активный журнал.

Elasticsearch выводит сообщения журналов устаревания на уровне CRITICAL. Эти сообщения указывают, что используемая устаревшая функция будет удалена в следующей основной версии. Сообщения журналов устаревания на уровне WARN указывают, что была использована менее критическая функция, она не будет удалена в следующей основной версии, но может быть удалена в будущем.

Чтобы прекратить запись сообщений журналов устаревания, установите logger.deprecation.level на OFF в log4j2.properties:

logger.deprecation.level = OFF

В качестве альтернативы можно динамически изменить уровень ведения журнала:

PUT /_cluster/settings
{
  "persistent": {
    "logger.org.elasticsearch.deprecation": "OFF"
  }
}

Обратитесь к Настройка уровней ведения журнала.

Вы можете определить, что вызывает устаревшую функциональность, если X-Opaque-Id использовался в качестве HTTP-заголовка. Идентификатор пользователя включен в поле X-Opaque-ID в JSON-журналах устаревания.

{
  "type": "deprecation",
  "timestamp": "2019-08-30T12:07:07,126+02:00",
  "level": "WARN",
  "component": "o.e.d.r.a.a.i.RestCreateIndexAction",
  "cluster.name": "distribution_run",
  "node.name": "node-0",
  "message": "[types removal] Using include_type_name in create index requests is deprecated. The parameter will be removed in the next major version.",
  "x-opaque-id": "MY_USER_ID",
  "cluster.uuid": "Aq-c-PAeQiK3tfBYtig9Bw",
  "node.id": "D7fUYfnfTLa2D7y-xw6tZg"
}

Журналы устаревания могут быть индексированы в .logs-deprecation.elasticsearch-default поток данных cluster.deprecation_indexing.enabled значение настроено на true.

Управление потоком журналов устаревания

Журналы устаревания дублируются на основе ключа устаревшей функции и x-opaque-id, поэтому если функция используется повторно, это не перегрузит журналы устаревания. Это относится как к индексированным журналам устаревания, так и к журналам, выводимым в файлы журналов. Вы можете отключить использование x-opaque-id в управлении потоком, изменив cluster.deprecation_indexing.x_opaque_id_used.enabled на false. См. RateLimitingFilter

Формат JSON-журнала

Для облегчения парсинга журналов Elasticsearch журналы теперь выводятся в формате JSON. Это настраивается свойством макета Log4J appender.rolling.layout.type = ESJsonLayout. Этот макет требует наличия атрибута type_name, который используется для различения потоков журналов при парсинге.

appender.rolling.layout.type = ESJsonLayout
appender.rolling.layout.type_name = server

Каждая строка содержит один JSON-документ со свойствами, настроенными в ESJsonLayout. Более подробные сведения см. в документации этого класса. Однако, если JSON-документ содержит исключение, он будет напечатан на нескольких строках. Первая строка будет содержать обычные свойства, а последующие строки будут содержать стек вызовов, отформатированный как массив JSON.

Вы по-прежнему можете использовать собственный макет. Для этого замените строку appender.rolling.layout.type другим макетом. Пример ниже:

appender.rolling.type = RollingFile
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %.-10000m%n
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/logging.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API