【Elasticsearch7.0】之日志配置()
前言
最近发现线上的es集群日志数量有点多,且过于冗余。于是今天对es的日志的配置重新配置一下。
我这边的配置就是参考了下文。参考链接:http://www.chaiguanxin.com/articles/2019/05/30/1559202725366.html
日志配置
es使用log4j2来处理日志。可以在log4j2.properties文件里面修改日志的一些配置。es提供了3个属性,分别是:${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 ############################
# 日志滚动类型为RollingFile
appender.rolling.type = RollingFile
# 名称
appender.rolling.name = rolling
# 日志文件名为/var/log/elasticsearch/production.json
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json
# 使用json布局
appender.rolling.layout.type = ESJsonLayout
# 会在日志输出中有这个标识,如果有解析不同类型的日志时,可以用来区分。
appender.rolling.layout.type_name = server
# 文件压缩之后的名称,%i表示构建的数量,是递增的
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
# 压缩日志的大小条件是2 GB
appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB
################################################
可以把appender.rolling.filePattern配置中的.gz修改为.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
如果有多个日志配置文件,他们会被合并。es日志目录下的优先级最高。你也可以自定义日志记录。
日志等级配置
一共有4种配置方式。
- 通过命令行来指定,语法是:-E = (例如: -E logger.org.elasticsearch.transport=trace),比较适用于在单个节点上临时调试问题的场景。
- 在elasticsearch.yml后面添加配置,语法为:
elasticsearch.yml: <name of logging hierarchy>: <level>
(例如:logger.org.elasticsearch.transport: trace),适用场景是没有通过命令行启动,但是又想临时调试一个问题。 - 通过cluster settings接口来设置。语法是:
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
适用场景是如果你需要更加细化你的日志配置,那么可以在这里配置。
弃用日志
es支持对弃用的一些方法打印日志,可以让开发者知道哪个方法已经弃用了,需要配置以下属性:
logger.deprecation.level = warn
它会生成一个弃用的日志文件。如果你需要升级你的版本时,需要关注这个日志文件。弃用日志默认是滚动策略,然后文件大约在1G的时候进行压缩,最多保留5个文件(4个滚动之后的文件和一个活动的文件)
如果你要关闭弃用日志,那么把日志级别改为error。
json格式化日志
json格式的日志,更加方便阅读。只要把appender.rolling.layout.type配置为ESJsonLayout,就可以了。还需要把appender.rolling.layout.type_name配置一个名称,这样在做分析的时候可以知道这个日志是来自哪里的。
配置示例:
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
本文转自:http://www.chaiguanxin.com/articles/2019/05/30/1559202725366.html