日志记录配置
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 ############################
appender.rolling.type = RollingFile <1>
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json <2>
appender.rolling.layout.type = ESJsonLayout <3>
appender.rolling.layout.type_name = server <4>
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz <5>
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy <6>
appender.rolling.policies.time.interval = 1 <7>
appender.rolling.policies.time.modulate = true <8>
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy <9>
appender.rolling.policies.size.size = 256MB <10>
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.fileIndex = nomax
appender.rolling.strategy.action.type = Delete <11>
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
appender.rolling.strategy.action.condition.type = IfFileName <12>
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* <13>
appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize <14>
appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB <15>
################################################
配置RollingFile附加器
-
配置RollingFile附加器
-
记录到/var/log/elasticsearch/production.json
-
使用JSON输出。
-
type_name是一个填充esjsonlayout中类型字段的标志。它可以用来在解析日志时更容易地区分不同类型的日志。
-
滚动压缩到自增I的/var/log/elasticsearch/production-yyyy-MM-dd-i.json
-
使用time-based的滚动策略
-
每天滚动日志
-
在日边界上对齐辊(而不是每隔24小时滚动一次)
-
使用size-based的滚动策略
-
256 MB后的滚动日志
-
滚动日志时使用删除操作
-
仅删除与文件模式匹配的日志
-
模式是只删除主日志
-
仅当我们累积了太多压缩日志时才删除
-
压缩日志的大小条件为2 GB
######## 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 <1>
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
-
旧样式模式附加器的配置。这些日志将保存在*.log文件中,如果存档,则保存在*.log.gz文件中。请注意,这些应该被视为已弃用,并将在将来删除。
注意:log4j的配置解析会被任何无关的空白混淆;如果您复制并粘贴此页上的任何log4j设置,或者输入任何log4j配置,请确保修剪任何前导和尾随的空白。
注意,您可以在appender.rolling.filepattern中将.gz替换为.zip,以使用zip格式压缩已卷日志。如果删除.gz扩展名,则不会在滚动日志时对其进行压缩。
如果要将日志文件保留指定的一段时间,可以使用带有删除操作的滚动策略。
appender.rolling.strategy.type = DefaultRolloverStrategy <1>
appender.rolling.strategy.action.type = Delete <2>
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path} <3>
appender.rolling.strategy.action.condition.type = IfFileName <4>
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* <5>
appender.rolling.strategy.action.condition.nested_condition.type = IfLastModified <6>
appender.rolling.strategy.action.condition.nested_condition.age = 7D <7>
-
配置默认Rolloverstrategy
-
配置用于处理滚动的
Delete
操作 -
ElasticSearch日志的基本路径
-
处理滚动时应用的条件
-
从与glob${sys:es.logs.cluster_name}-*匹配的基本路径中删除文件;这是要将日志文件滚动到的glob;这只需要删除滚动的ElasticSearch日志,而不必删除取消预测和慢速日志。
-
要应用于与glob匹配的文件的嵌套条件
-
保留日志7天
只要将多个配置文件命名为log4j2.properties并将elasticsearch config目录作为根目录,就可以加载多个配置文件(在这种情况下,它们将被合并);这对于公开其他记录器的插件很有用。记录器部分包含Java包及其对应的日志级别。appender部分包含日志的目标。有关如何自定义日志记录和所有支持的附件的详细信息,请参阅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,或者您希望在更持久的基础上调整日志级别时,这是最合适的。 - 通过cluster settings:
PUT /_cluster/settings
{
"transient": {
"<name of logging hierarchy>": "<level>"
}
}
例如:
PUT /_cluster/settings
{
"transient": {
"logger.org.elasticsearch.transport": "trace"
}
}
--------------------------------------------------------
curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
"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还允许您启用不推荐的操作的日志记录。例如,如果您将来需要迁移某些功能,您可以提前确定。默认情况下,禁用日志记录在警告级别启用,即所有禁用日志消息将发出的级别。
logger.deprecation.level = warn
这将在日志目录中创建每日滚动取消预测日志文件。定期检查此文件,尤其是当您打算升级到新的主要版本时。
默认日志记录配置已将取消预测日志的滚动策略设置为在1 GB后滚动和压缩,并最多保留五个日志文件(四个滚动日志和活动日志)。
您可以在config/log4j2.properties文件中通过将取消预测日志级别设置为error来禁用它。
JSON log format
为了使分析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。见下面的示例:
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