Elasticsearch 产品自发布以来,随着功能不断增强,其在各种互联网产品、企业级应用产品中的应用也越来越广泛。日常 Elasticsearch 集群运维过程中,我们需要了解集群都能够输出什么类型的日志、日志的存放位置以及日志配置修改的方式,阅读本文,我们能够了解以下知识点:
Elasticsearch 日志输出方式
Elasticsearch 日志配置方法
Elasticsearch 日志按类型输出到不同的文件中
Elasticsearch 慢查询日志配置方法
希望通过本文,让大家对 Elasticsearch 的日志有更深刻的认识,方便大家的运维开发工作。
本文所有代码与配置在 Elasticsearch 7.1.1 中运行和验证。
Elasticsearch 日志输出方式
Elasticsearch 使用 Log4j2 作为默认的日志组件,其日志输出的安装及运行方式相关,对于 Docker 方式运行的 Elasticsearch 实例,默认会输出到控制台中。对于 yum 或手工方式安装运行的 Elasticsearch 实例,日志默认以文件形式保存在 $ES_HOME/logs 目录下,我们可以通过修改 elasticsearch.yml 文件中的 path.logs 来指定日志保存的路径。
Elasticsearch 的使用了 Log4j2 来进行日志记录,如果不太熟悉 Log4j2 中的一些概念,可以通过 浅谈Log4j2日志框架及使用 来进一步了解。
Elasticsearch 的日志配置
Elasticsearch 为我们提供了丰富的日志配置选项,当我们运维的 Elasticsearch 集群规模越来越大、访问量越来越高时,正确的使用这些配置能够方便我们快速的定位和分析生产运行中产生的各类问题。
在日志配置这个小节,将介绍以下几个知识点:
如何配置日志输出到文件
如何配置日志的滚动策略
如何调整日志的级别
常见的 无法加载插件 错误
如何配置日志输出到文件
如果使用容器启动 Elasticsearch 服务,日志文件默认会输出的终端,如果希望将日志输出到文件中,首先通过修改 elasticsearch.yml 文件中的 path.logs 参数定义保存的位置,默认为 /usr/share/elasticsearch/logs 。然后再通过修改 $ES_HOME/config/log4j2.properties 文件来配置相关的日志文件名生成规则。
Elasticsearch 提供了三个属性,通过在日志配置文件中引用这三个属性来自定义日志的输出
${sys:es.logs.base_path} 在配置文件中将被解析为日志目录
${sys:es.logs.cluster_name} 在配置文件中将被解析为集群名称
${sys:es.logs.node_name} 在配置文件中将被解析为节点名称
${sys:file.separator} 将被解析为路径分隔符
如下配置演示了 log4j2.properties 中如何使用这三个变量来定义我们的日志文件名
appender.transport.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_transport.json
appender.transport.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-transport-%i.json.gz
下面可以看到日志文件已经按照配置的规则生成了,如果日志文件的大小不断增长怎么办呢,会不会把文件系统撑爆,要不要设置日志文件清理策略,别着急下个小节告诉我们如何配置日志的滚动策略。
如何配置日志的滚动策略
日志滚动在日常运维中是非常常见的一种日志管理手段,通过日志滚动策略既保留了必要的日志内容,同时又防止日志数量超过本地文件系统的容量,并且防止单个日志文件变得太大而难于打开。
日志滚动通常有两种策略,一种是根据时间,例如每天生成一个日志文件;另一种是根据文件大小,例如每100MB生成一个日志文件。在上一节中,我们通过 filePattern 参数决定了当日志文件发生滚动时,新文件的命名规则。
下面的配置根据文件大小和日期设置日志的滚动策略。</