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
- 日志位置:
/var/log/elasticsearch/production.json
- 使用 JSON 布局.
type_name
是一个标识, 用于填充ESJsonLayout
中的type
字段。解析日志时,可以更加轻松地区别不同类型的日志。- 日志回滚到:
/var/log/elasticsearch/production-yyyy-MM-dd-i.json
; 每次回滚日志都将会被压缩,日志名称i
参数每次递增。 - 使用基于时间回滚策略
- 每天回滚日志
- 在日边界对齐(凌晨)回滚 (而不是每 24 小时回滚一次)
- 使用基于大小的回滚策略
- 日志大于 256M 进行回滚
- 使用删除操作回滚日志
- 仅删除匹配到的日志
- 只删除主日志
- 仅日志大于多少才删除
- 当日志大于 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
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
- 配置
DefaultRolloverStrategy
- 配置回滚过程中类型为
删除
- Elasticsearch 日志路径地址
- 回滚时的条件
- 从基本路径中删除与全局
$ {sys:es.logs.cluster_name}-*
相匹配的文件;这是日志文件滚动到的位置;仅删除滚动的 Elasticsearch 日志,而不删除过时和慢速日志,这是必需的 - 嵌套条件适用于与 glob 匹配的文件
- 保留日志 7 天
可以加载多个配置文件 (在这种情况下,这些配置文件将被合并),只要它们的名为 log4j2.properties
并将 Elasticsearch 配置目录作为父类;这对于公开其他记录器的插件很有用。日志驱动部分包含 java 包及其相应的日志级别,有关如何自定义日志记录和所有受支持的附加器的详细信息,请参阅 Log4j 文档.
配置日志等级#
有四种方式日志记录等级的方法,每种方式都有对应的适用场景。
- 修改命令行:
-E <name of logging hierarchy>=<level>
(e.g.,-E logger.org.elasticsearch.transport=trace
)。当你在单节点上临时调试问题(例如,问题重现或者开发时),这是最合适的方式。 - 修改
elasticsearch.yml
文件:<name of logging hierarchy>: <level>
(e.g.,logger.org.elasticsearch.transport: trace
). 当你临时调试的时候,但没有通过命令行(或者通过服务)去启动 Elasticsearch ,或者你想永久的改变日志记录级别,这是最合适的方法。 - 集群设置修改:例如:
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
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。