最近发现线上的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

前言最近发现线上的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}
ES7.0增加通过json记录ES日志,可在日志中加入node.id,cluster.uuid,type。其中type主要用于区分docker环境下的每个节点的日志ES日志包括集群节点日志、过时日志、查询慢日志和写入慢日志等。 日志级别调整,可以细化到包级别,此外还支持动态修改,例如将discovery模块日志级别设置为debug,其他模块仍然保持info级别。
index.search.slowlog.level: TRACE 打印日志界别 index.search.slowlog.threshold.query.warn: 10s 查询时间超过10s为warn级别 index.search.slowlog.threshold.query.info: 5s 查询时间超过5s为info级别 index.s [elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://mirror.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/ gpgcheck=0
在使用es日志系统的时候发现es只能获取一万条日志数据, 而实际有38万多条. 使用的分页查询工具是es自带的PageRequest Query query = new CriteriaQuery(criteria); query.setTrackTotalHits(true); //先根据criteria条件中的from和to 筛选出时间范围内的数据,然后根据日期降序, query.setPageable(PageRequest.of((int) d
在使用es进行数据查询时,由于es官方默认限制了索引一次性最多只能查询10000条数据,查询第10001条数据开始就会报错, 错误的内容大致为:Result window is too large, from + size must be less than or equal to 通常,见到的一些网站的做法有: 限制分页的最大页数,比如为100页,参见某东网站查询某品类的商品时的分页交互 如果es中保存的数据不那么重要,如日志数据,可以考虑定期删除日志,维持数据量小于1万 但是在更多的场景下,我
近期由于业务涉及的数据量比较大,进行查询时返回的结果集非常大,但是当查询一万条以后的详细内容时,发现出错,后台日志提示最大的查询量不应该超过10000条,究竟是为什么呢,要做这样一个限制,于是就查阅了资料。 一、查询阶段: 在初始化查询阶段(query phase),查询被向索引中的每个分片副本(原本或副本)广播。每个分片在本地执行搜索并且建 立了匹配document的优先队列(priority queue)。 一个优先队列(priority queue is)只是一个存有前n个(top
测试同学压测 接口,导致es疯狂超时 登录es服务器,打开日志,发现全部是超时日志,再往上看发现全是debug级别的日志,而且连每条query语句都打印了出来。 "max_expansions" : 50, "fuzzy_transpositions" : true, "lenient" : false, "zero_terms_query" : "NONE" <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.10.RELEASE</vers
Elasticsearch 7.0是一个开源的分布式搜索和分析引擎,它可以快速地存储、搜索和分析大量的数据。它具有高可用性、可扩展性和灵活性,可以在多种场景下使用,如日志分析、全文搜索、业务数据分析等。 在使用Elasticsearch 7.0时,需要了解其核心概念和基本操作,如索引、文档、映射、查询等。同时,还需要了解如何配置和优化Elasticsearch集群,以提高其性能和可靠性。 在实际应用中,可以使用Elasticsearch提供的API和工具,如Kibana、Logstash等,来进行数据的可视化和处理。此外,还可以使用Elasticsearch提供的插件和扩展来扩展其功能,如中文分词插件、聚合插件等。 总之,掌握Elasticsearch 7.0的核心概念和基本操作,以及使用其提供的API和工具,可以帮助我们更好地利用其强大的搜索和分析功能,提高数据处理的效率和质量。