【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种配置方式。

  1. 通过命令行来指定,语法是:-E = (例如: -E logger.org.elasticsearch.transport=trace),比较适用于在单个节点上临时调试问题的场景。
  2. 在elasticsearch.yml后面添加配置,语法为:elasticsearch.yml: <name of logging hierarchy>: <level>(例如:logger.org.elasticsearch.transport: trace),适用场景是没有通过命令行启动,但是又想临时调试一个问题。
  3. 通过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

posted @ 2022-11-10 19:25  彬在俊  阅读(192)  评论(0编辑  收藏  举报