Elastic:配置 Elasticsearch 服务器 logs
2021年1月9日 | by mebius
当我们运行 Elasticsearch 集群时,我们可以看到一些 Elasticsearch 的日志,比如我们可以在如下的目录中找到相应的一些 server 日志:
.log
_server.json
假如我在 config/eleasticsearch.yml 文件中把 cluster.name 定义为如下的值:
cluster.name: liuxg-cluster
那么我们就可以在 logs/ 目录下看到如下的文件:
$ pwd
/Users/liuxg/elastic0/elasticsearch-7.10.0/logs
liuxg:logs liuxg$ ls liuxg-cluster*
liuxg-cluster.log
liuxg-cluster_audit.json
liuxg-cluster_deprecation.json
liuxg-cluster_deprecation.log
liuxg-cluster_index_indexing_slowlog.json
liuxg-cluster_index_indexing_slowlog.log
liuxg-cluster_index_search_slowlog.json
liuxg-cluster_index_search_slowlog.log
liuxg-cluster_server.json
从上面,我们可以看到所有的文件以 liuxg-cluster 开始的文件名。这些日志记录了 elasticsearch 运行的状态。依据不同的日志等级,它会记录不同的事件。
Log structure
Log 的结构是这样描述的:
=
Log level
可以在网址https://logging.apache.org/log4j/2.x/manual/customloglevels.html:
Standard Level | intLevel |
---|---|
OFF | 0 |
FATAL | 100 |
ERROR | 200 |
WARN | 300 |
INFO | 400 |
DEBUG | 500 |
TRACE | 600 |
ALL | Integer.MAX_VALUE |
在默认的情况下,你将到 INFO 级的日志信息。我们可以改变这个 log level 来记录想要级别的日志信息。
Logger Hierarchy
我们可以在网址找到 logger hierachy 的定义:https://logging.apache.org/log4j/2.x/manual/architecture.html
我们可以把 Log 设置为某个想要的 package,比如在上面,我们对 transport 这个 package 进行配置。我们可以得到各种级别的日志信息。
配置 Log
有四种方法可以供我们选择来配置 Log。
Command-Line
当我们使用命令行来启动 Elasticsearch 时,我们可以直接使用命令行参数来启动相应的日志级别:
-E=
通常这种用于单节点的临时需要调试的集群。如果你的集群不能正常启动,你可以修改这个配置来查看更多的信息。
我们可以通过如下的方式来启动 Elasticsearch:
./bin/elasticsearch -Elogger.level=WARN
我们不能使用如下的格式来启动,这是由于一个 bug :
./bin/elasticsearch -Elogger._root=WARN
当我们不带任何参数直接启动 Elasticsearch 时:
./bin/elasticsearch
我们可以看到许多如上图所示的 INFO 日志,也就是说在tgcode默认的情况下,elasticsearch 显示的是 INFO 及以上的日志信息。
如果我们把日志级调整为 WARN 级:
./bin/elasticsearch -Elogger.level=WARN
从上面的输出中,我们可以看到,只有 WARN 及以上级别的日志信息。在之前看到的那些 INFO 级的日志信息不见了。
通过 elasticsearch.yml 来进行配置
当我们想永久性地保存我们的日志级别,我们可以通过修改 config/elasticsearch.yml 文件来进行修改。通常我们在 Linux 环境下运行 elasticsearch 作为一个服务,我们没有办法为服务提供参数,那么通过修改 elasticsearch.yml 将是一个绝佳的方法。这种方法非常简单,我们只需要在 config/elasticsearch.yml 文件的后面添加如下的一句:
logger.level: WARN
同样地,如下的方法是不可以使用的:
logger._root: WARN
然后,我们直接启动 elasticsearch 而不用带任何的参数:
./bin/elasticsearch
和之前的一样,我们只看到一个 WARN 及以上的日志信息。
通过 cluster settings API
这是一个比较快速并常用的方法。这种方法的好处是,你不需要重新启动你的 elasticsearch 集群。我们只需要使用下面的一个 API 命令,它将会为整个集群发生作用。我们不需要为每个节点来分别配置。在做下面的实验之前,请先把在上一步在 config/elasticsearch.yml 中进行的配置移去。我们重新启动 elasticsearch 并不要带任何的参数。在 Kibana 的 console 中打入如下的命令:
PUT _cluster/settings
{
"transient": {
"name of logging hierachy": ""
}
}
在上面我们使用了 transient 而不是 persistent。使用 transient 的好处是当我们重新启动 elasticsearch 集群时,之前所做的设置将会消失。
我们可以通过如下的命令来设置 WARN 级的日志:
PUT _cluster/settings
{
"transient": {
"logger._root": "WARN"
}
}
这里 logger_root 表示适用于所用的 package。上面的命令的返回信息是:
{
"acknowledged" : true,
"persistent" : { },
"transient" : {
"logger" : {
"_root" : "WARN"
}
}
}
针对这种用法,由于一个 bug 的存在,如下的这种方法不适用:
PUT _cluster/settings
{
"transient": {
"logger.level": "WARN"
}
}
它将产生如下的错误信息:
{
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception",
"reason" : "transient setting [logger.level], not dynamically updateable"
}
],
"type" : "illegal_argument_exception",
"reason" : "transient setting [logger.level], not dynamically updateable"
},
"status" : 400
}
如果我们想设置回默认的状态,我们可以通过如下的方法:
PUT _cluster/settings
{
"transient": {
"logger._root": null
}
}
通过 log4j2.properties 来进行配置
我们可以通过修改 log4j2.properties 并按照如下的方法来进行配置:
logger..name =
logger..level =
我们甚至可以配置使得日志记录于另外一个文件中,尽管在多数的情况下,这个并不需要。
比如在一下的位置,我们可以来配置它的文件名及文件的格式等:
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.json
appender.rolling.layout.type = ESJsonLayout
appender.rolling.layout.typetgcode_name = server
我们可以修改如下的位置来修改日志的级别:
rootLogger.level = info
rootLogger.appenderRef.console.ref = console
rootLogger.appenderRef.rolling.ref = rolling
rootLogger.appenderRef.rolling_old.ref = rolling_old
Slow logs
如果你想了解更多关于 slow logs,请阅读我之前的文章 “Elasticsearch:Elasticsearch 中的慢日志”。
运用 filebeat 收集 elasticsearch 日志
我们首先安装好 filebeat。你可以参考文章 “Beats 入门教程 (二)” 来安装好自己的 filebeat。在我的安装中,我们的 filebeat 的安装和 elasticsearch 是处于同一目录下的。
$ pwd
/Users/liuxg/elastic0
liuxg:elastic0 liuxg$ find . -type d -depth 1
./elasticsearch-7.10.0
./filebeat-7.10.0-darwin-x86tgcode_64
./apm-server-7.10.0-darwin-x86_64
./logstash-7.10.0
./metricbeat-7.10.0-darwin-x86_64
./kibana-7.10.0-darwin-x86_64
紧接着,我们修改 filebeat.yml 文件。在 filebeat.yml 文件的后面添加如下的部分:
filebeat.yml
filebeat.modules:
- module: elasticsearch
server:
var.paths:
- ../elasticsearch*/logs/*_server.json
slowlog:
var.paths:
- ../elasticsearch*/logs/*_index_search_slowlog.json
- ../elasticsearch*/logs/*_index_indexing_slowlog.json
gc:
var.paths:
- ../elasticsearch*/logs/gc/log.[0-9]*
- ../elasticsearch*/logs/gc.log
audit:
var.paths:
- ../elasticsearch*/logs/*_audit.json
我们接着在 filebeat 的安装根目录下运行如下的命令:
./filebeat -e
等运行完上面的指令后,我们可以在 console 中看到如下的输出:
上面显示被收集的日志文件及路径。
查看日志
我们首先打开 Stack monitoring:
我们使用 “Or, set up with self monitoring”,当然你也可以选择 “Set up monitoring with Metricbeat”,这也是生产环境推荐的方法:
从上面可以看出来有日志信息进入到监控的应用。点击 Log 链接:
从上面,我们可以看到一些指标以及一些日志的信息。
我们也可以从 Discover 查看所有的日志:
我们可以搜索我们的日志,比如:
文章来源于互联网:Elastic:配置 Elasticsearch 服务器 logs
相关推荐: Elastic:如何成为一名 Elastic 认证工程师
Elasticsearch 无疑是是目前世界上最为流行的大数据搜索引擎。世界上很多著名的 IT 公司都是我们的客户。这些客户包括微软,甲骨文,Adobe,Salesforce, Uber,苹果,沃尔玛等等这些跨国公司。在中国也有很多的用户,比如腾讯,阿里,36…