Logging configuration Elasticsearch使用Log4j 2进行日志记录。可以使用log4j2.properties文件配置Log4j 2。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。

    1. ######## Server JSON ############################
    2. appender.rolling.type = RollingFile
    3. appender.rolling.name = rolling
    4. appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json
    5. appender.rolling.layout.type = ESJsonLayout
    6. appender.rolling.layout.type_name = server
    7. appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz
    8. appender.rolling.policies.type = Policies
    9. appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
    10. appender.rolling.policies.time.interval = 1
    11. appender.rolling.policies.time.modulate = true
    12. appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
    13. appender.rolling.policies.size.size = 256MB
    14. appender.rolling.strategy.type = DefaultRolloverStrategy
    15. appender.rolling.strategy.fileIndex = nomax
    16. appender.rolling.strategy.action.type = Delete
    17. appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
    18. appender.rolling.strategy.action.condition.type = IfFileName
    19. appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-*
    20. appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize
    21. appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB
    22. ################################################
    1. 配置RollingFile appender
    2. Log to /var/log/elasticsearch/production.json
    3. 使用JSON结构。
    4. type_name是填充ESJsonLayout中的type字段的标志。在解析它们时,它可以更容易地区分不同类型的日志。
    5. 将日志滚动到/var/log/elasticsearch/production-yyyy-MM-dd-i.json;日志将在每个卷上压缩,递增添加
    6. 使用基于时间的滚动策略
    7. 每天滚动日志
    8. 按天临界切割(而不是每隔二十四小时滚动)
    9. 使用基于大小的滚动策略
    10. 256 MB后滚动日志
    11. 滚动日志时使用删除操作
    12. 仅删除与文件模式匹配的日志
    13. 该模式仅删除主日志
    14. 仅在我们累积了太多压缩日志时才删除
    15. 压缩日志的大小条件为2 GB

    旧样式模式appender的配置。这些日志将保存在 .log文件中,如果存档将保存在 .log.gz文件中。请注意,这些应被视为已弃用,将来会被删除。

    注意,您可以在appender.rolling.filePattern中使用.zip替换.gz,以使用zip格式压缩滚动日志。如果删除.gz扩展名,则日志将不会在滚动时进行压缩。

    如果要在指定的时间段内保留日志文件,可以使用具有删除操作的翻转策略。

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

    可以加载多个配置文件(在这种情况下它们将被合并),只要它们被命名为log4j2.properties并且将Elasticsearch配置目录作为祖先;这对于暴露其他记录器的插件很有用。logger部分包含java包及其相应的日志级别。appender部分包含日志的目标。有关如何自定义日志记录和所有支持的appender的详细信息,请参阅Log4j文档

    配置日志级别 有四种配置日志记录级别的方法,每种方法都有适合使用的情况。

    1. 通过命令行:-E =(例如,-E logger.org.elasticsearch.transport = trace)。当您临时调试单个节点上的问题时(例如,启动问题或开发期间),这是最合适的。
    2. 通过elasticsearch.yml:: (例如,logger.org.elasticsearch.transport:trace)。当您临时调试问题但未通过命令行启动Elasticsearch(例如,通过服务)或者您希望更长期地调整日志记录级别时,这是最合适的。
    3. 通过群集设置:
      1. PUT /_cluster/settings
      2. {
      3. "transient": {
      4. "<name of logging hierarchy>": "<level>"
      5. }
      6. }
      eg:
      1. PUT /_cluster/settings
      2. {
      3. "transient": {
      4. "logger.org.elasticsearch.transport": "trace"
      5. }
      6. }
      当您需要动态调整正在运行的群集上的日志记录级别时,这是最合适的。
    4. 通过log4j2.properties:
      1. logger.transport.name = org.elasticsearch.transport
      2. logger.transport.level = trace
      当您需要对记录器进行细粒度控制时(例如,您希望将记录器发送到另一个文件,或以不同方式管理记录器;这是一种罕见的用例),这是最合适的。

    弃用日志记录

    除常规日志记录外,Elasticsearch还允许您启用已弃用操作的日志记录。例如,如果您将来需要迁移某些功能,这可以让您尽早确定。默认情况下,将在WARN级别启用弃用日志记录,该级别是将发出所有弃用日志消息的级别

    logger.deprecation.level = warn

    这将在日志目录中创建每日滚动弃用日志文件。定期检查此文件,尤其是当您打算升级到新的主要版本时。

    默认日志记录配置已将弃用日志的卷策略设置为在1 GB后滚动和压缩,并最多保留五个日志文件(四个滚动日志和活动日志)。

    您可以通过将弃用日志级别设置为error来在config / log4j2.properties文件中禁用它。

    JSON 日志格式

    为了更轻松地解析Elasticsearch日志,现在以JSON格式打印日志。这是由Log4J布局属性appender.rolling.layout.type = ESJsonLayout配置的。此布局需要设置type_name属性,该属性用于在解析时区分日志流。

    appender.rolling.layout.type = ESJsonLayout

    appender.rolling.layout.type_name = server

    每行包含一个JSON文档,其中的属性在ESJsonLayout中配置。有关更多详细信息,请参阅此类javadoc。但是,如果JSON文档包含异常,则它将在多行上打印。第一行将包含常规属性,后续行将包含格式化为JSON数组的stacktrace。

    您仍然可以使用自己的自定义布局。为此,请使用不同的布局替换行appender.rolling.layout.type。见下面的示例:

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