3.2.3. 日志配置

未匹配的标注

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

######## Server JSON ############################
1.appender.rolling.type = RollingFile 
appender.rolling.name = rolling
2.appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json 
3.appender.rolling.layout.type = ESJsonLayout 
4.appender.rolling.layout.type_name = server 
5.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
6.appender.rolling.policies.time.type = TimeBasedTriggeringPolicy 
7.appender.rolling.policies.time.interval = 1 
8.appender.rolling.policies.time.modulate = true 
9.appender.rolling.policies.size.type = SizeBasedTriggeringPolicy 
10.appender.rolling.policies.size.size = 256MB 
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.fileIndex = nomax
11.appender.rolling.strategy.action.type = Delete 
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
12.appender.rolling.strategy.action.condition.type = IfFileName 
13.appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* 
14.appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize 
15.appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB 
################################################

1.配置 RollingFile appender

  1. 日志位置: /var/log/elasticsearch/production.json
  2. 使用JSON布局.
  3. type_name是一个标识, 用于填充 ESJsonLayout中的type字段。解析日志时,可以更加轻松地区别不同类型的日志。
  4. 日志回滚到:/var/log/elasticsearch/production-yyyy-MM-dd-i.json; 每次回滚日志都将会被压缩,日志名称i参数每次递增。
  5. 使用基于时间回滚策略
  6. 每天回滚日志
  7. 在日边界对齐(凌晨)回滚 (而不是每24小时回滚一次)
  8. 使用基于大小的回滚策略
  9. 日志大于256M进行回滚
  10. 使用删除操作回滚日志
  11. 仅删除匹配到的日志
  12. 只删除主日志
  13. 仅日志大于多少才删除
  14. 当日志大于2G时压缩
    ######## 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
  1. old style配置参数为追加模式,这些日志将被保存在 *.log 文件中,如果日志被归档了,则将保存在* .log.gz文件中。请注意,如果配置被弃用,之后需删除。

    注意:Log4j’s 配置解析时会被任何多余的空格所混淆,如果你在此页面上的复制并粘贴任何 Log4j 设置,或者手输任何 Log4j 配置,请务必修建任何行前和行尾的空白。

你可以用appender.rolling.filePattern中的 .zip 替代.gz 以压缩回滚日志。如果删除 .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 
  1. 配置 DefaultRolloverStrategy
  2. 配置回滚过程中类型为删除
  3. Elasticsearch 日志路径地址
  4. 回滚时的条件
  5. 从基本路径中删除与全局$ {sys:es.logs.cluster_name}-*相匹配的文件;这是日志文件滚动到的位置;仅删除滚动的Elasticsearch日志,而不删除过时和慢速日志,这是必需的
  6. 嵌套条件适用于与glob匹配的文件
  7. 保留日志7天

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

配置日志等级

有四种方式日志记录等级的方法,每种方式都有对应的适用场景。

  1. 修改命令行:-E <name of logging hierarchy>=<level> (e.g., -E logger.org.elasticsearch.transport=trace)。当你在单节点上临时调试问题(例如,问题重现或者开发时),这是最合适的方式。
  2. 修改 elasticsearch.yml文件: <name of logging hierarchy>: <level> (e.g., logger.org.elasticsearch.transport: trace). 当你临时调试的时候,但没有通过命令行(或者通过服务)去启动 Elasticsearch ,或者你想永久的改变日志记录级别,这是最合适的方法。
  3. 集群设置修改:
      PUT /_cluster/settings
      {
        "transient": {
          "<name of logging hierarchy>": "<level>"
        }
      }
    例如:
    PUT /_cluster/settings
    {
      "transient": {
          "logger.org.elasticsearch.transport": "trace"
      }
    }

当你需要动态调整集群的日志记录级别,这是最合适的。

4.通过修改 log4j2.properties配置文件:

    logger.<unique_identifier>.name =  <name of logging hierarchy>
    logger.<unique_identifier>.level =  <level>

例如:

logger.transport.name = org.elasticsearch.transport
logger.transport.level = trace

当你需要对日志进行细粒度控制时(例如需要将日志写到到其他文件中去,或者以不同的方式管理日志,这是一种罕见的用法),这是最适合的方法。

弃用日志

除了常规日志记录外,Elasticsearch 允许你启动弃用日志操作。例如,这让你提早下定决心确认是否迁移某些功能。默认情况下,在WARN 级别启动弃用日志,该级别上所有日志都将被弃用。

logger.deprecation.level = warn

这将在日志目录中创建每日回滚弃用日志文件,定期检查此文件,特别是当你打算升级到某一个新主版本时。

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

你也可通过在 config/log4j2.properties 文件中禁用它,弃用日志配置设置为 error,如图所示:

logger.deprecation.name = org.elasticsearch.deprecation
logger.deprecation.level = error

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

NOTE:你仍然可以使用自己的自定义布局。为此,将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    

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
上一篇 下一篇
CrazyZard
贡献者:4
讨论数量: 0
发起讨论 只看当前版本


暂无话题~