日志
OpenSearch 日志包含用于监控集群操作和故障排除问题的宝贵信息。日志位置因安装类型而异。
- 在 Docker 上,OpenSearch 将大部分日志写入控制台,其余日志存储在
opensearch/logs/
中。tarball 安装也使用opensearch/logs/
。 - 在大多数 Linux 安装中,OpenSearch 将日志写入
/var/log/opensearch/
。
日志以 .log
(纯文本)和 .json
文件形式提供。OpenSearch 日志的默认权限为 -rw-r--r--
,这意味着节点上的任何用户帐户都可以读取它们。你可以使用 filePermissions
选项在 log4j2.properties
中针对每种日志类型更改此行为。例如,你可以添加 appender.rolling.filePermissions = rw-r-----
来更改 JSON 服务器日志的权限。有关详细信息,请参阅 Log4j 2 文档。
应用程序日志
对于其应用程序日志,OpenSearch 使用 Apache Log4j 2 及其内置日志级别(从最低到最高严重性)。下表描述了日志设置。
设置 | 数据类型 | 描述 |
---|---|---|
logger.org.opensearch.discovery | 字符串 | 日志记录器接受 Log4j2 的内置日志级别:OFF 、FATAL 、ERROR 、WARN 、INFO 、DEBUG 和 TRACE 。默认为 INFO 。 |
与其更改默认日志级别(logger.level
),不如更改各个 OpenSearch 模块的日志级别
PUT /_cluster/settings
{
"persistent" : {
"logger.org.opensearch.index.reindex" : "DEBUG"
}
}
识别模块最简单的方法不是通过日志(日志会缩写路径,例如 o.o.i.r
),而是通过 OpenSearch 源代码。
进行此示例更改后,OpenSearch 在重新索引操作期间会发出更详细的日志
[2019-10-18T16:52:51,184][DEBUG][o.o.i.r.TransportReindexAction] [node1] [1626]: starting
[2019-10-18T16:52:51,186][DEBUG][o.o.i.r.TransportReindexAction] [node1] executing initial scroll against [some-index]
[2019-10-18T16:52:51,291][DEBUG][o.o.i.r.TransportReindexAction] [node1] scroll returned [3] documents with a scroll id of [DXF1Z==]
[2019-10-18T16:52:51,292][DEBUG][o.o.i.r.TransportReindexAction] [node1] [1626]: got scroll response with [3] hits
[2019-10-18T16:52:51,294][DEBUG][o.o.i.r.WorkerBulkByScrollTaskState] [node1] [1626]: preparing bulk request for [0s]
[2019-10-18T16:52:51,297][DEBUG][o.o.i.r.TransportReindexAction] [node1] [1626]: preparing bulk request
[2019-10-18T16:52:51,299][DEBUG][o.o.i.r.TransportReindexAction] [node1] [1626]: sending [3] entry, [222b] bulk request
[2019-10-18T16:52:51,310][INFO ][o.e.c.m.MetaDataMappingService] [node1] [some-new-index/R-j3adc6QTmEAEb-eAie9g] create_mapping [_doc]
[2019-10-18T16:52:51,383][DEBUG][o.o.i.r.TransportReindexAction] [node1] [1626]: got scroll response with [0] hits
[2019-10-18T16:52:51,384][DEBUG][o.o.i.r.WorkerBulkByScrollTaskState] [node1] [1626]: preparing bulk request for [0s]
[2019-10-18T16:52:51,385][DEBUG][o.o.i.r.TransportReindexAction] [node1] [1626]: preparing bulk request
[2019-10-18T16:52:51,386][DEBUG][o.o.i.r.TransportReindexAction] [node1] [1626]: finishing without any catastrophic failures
[2019-10-18T16:52:51,395][DEBUG][o.o.i.r.TransportReindexAction] [node1] Freed [1] contexts
DEBUG 和 TRACE 级别非常详细。如果你为排查问题而启用了其中一个,请在完成后禁用它。
还有其他方法可以更改日志级别
-
将行添加到
opensearch.yml
logger.org.opensearch.index.reindex: debug
如果你想在多个集群中重用日志配置,或者调试单个节点的启动问题,修改
opensearch.yml
是最有意义的。 -
修改
log4j2.properties
# Define a new logger with unique ID of reindex logger.reindex.name = org.opensearch.index.reindex # Set the log level for that ID logger.reindex.level = debug
这种方法非常灵活,但需要熟悉 Log4j 2 属性文件语法。一般来说,其他选项提供更简单的配置体验。
如果你检查配置目录中的默认
log4j2.properties
文件,你会看到一些 OpenSearch 特有的变量appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%n appender.rolling_old.fileName = ${sys:opensearch.logs.base_path}${sys:file.separator}${sys:opensearch.logs.cluster_name}.log
${sys:opensearch.logs.base_path}
是日志目录(例如,/var/log/opensearch/
)。${sys:opensearch.logs.cluster_name}
是集群的名称。${sys:opensearch.logs.node_name}
是节点的名称。[%node_name]
是节点的名称。
搜索请求慢日志
OpenSearch 2.12 版本新增了搜索的请求级慢日志。这些日志依赖阈值来定义什么是“慢”。所有超出阈值的请求都会被记录下来。
搜索请求慢日志通过 集群设置 API 动态启用。与分片慢日志不同,搜索请求慢日志阈值是为总请求耗时配置的。默认情况下,日志是禁用的(所有阈值都设置为 -1
)。
PUT /_cluster/settings
{
"persistent" : {
"cluster.search.request.slowlog.level" : "TRACE",
"cluster.search.request.slowlog.threshold.warn": "10s",
"cluster.search.request.slowlog.threshold.info": "5s",
"cluster.search.request.slowlog.threshold.debug": "2s",
"cluster.search.request.slowlog.threshold.trace": "10ms"
}
}
来自 opensearch_index_search_slowlog.log
的一行可能如下所示
[2023-10-30T15:47:42,630][TRACE][c.s.r.slowlog] [runTask-0] took[80.8ms], took_millis[80], phase_took_millis[{expand=0, query=39, fetch=22}], total_hits[4 hits], search_type[QUERY_THEN_FETCH], shards[{total: 10, successful: 10, skipped: 0, failed: 0}], source[{"query":{"match_all":{"boost":1.0}}}], id[]
如果设置较低的阈值,搜索请求慢日志可能会占用大量磁盘空间并影响性能。考虑暂时启用它们以进行故障排除或性能调优。要禁用搜索请求慢日志,请将所有阈值恢复为 -1
。
分片慢日志
OpenSearch 有两种分片慢日志,这些日志可帮助你识别性能问题:搜索慢日志和索引慢日志。
这些日志依赖阈值来定义什么是“慢”搜索或“慢”索引操作。例如,你可能会认为如果一个查询需要超过 15 秒才能完成,那么它就是慢的。与为模块配置的应用程序日志不同,慢日志是为索引配置的。默认情况下,这两种日志都已禁用(所有阈值都设置为 -1
)。
与搜索请求慢日志不同,分片慢日志阈值是为单个分片耗时配置的。
GET <some-index>/_settings?include_defaults=true
{
"indexing": {
"slowlog": {
"reformat": "true",
"threshold": {
"index": {
"warn": "-1",
"trace": "-1",
"debug": "-1",
"info": "-1"
}
},
"source": "1000",
"level": "TRACE"
}
},
"search": {
"slowlog": {
"level": "TRACE",
"threshold": {
"fetch": {
"warn": "-1",
"trace": "-1",
"debug": "-1",
"info": "-1"
},
"query": {
"warn": "-1",
"trace": "-1",
"debug": "-1",
"info": "-1"
}
}
}
}
}
要启用这些日志,请增加一个或多个阈值
PUT <some-index>/_settings
{
"indexing": {
"slowlog": {
"threshold": {
"index": {
"warn": "15s",
"trace": "750ms",
"debug": "3s",
"info": "10s"
}
},
"source": "500",
"level": "INFO"
}
}
}
在此示例中,OpenSearch 将耗时 15 秒或更长的索引操作记录为 WARN 级别,将耗时 10 到 14.x
秒之间的操作记录为 INFO 级别。如果你将阈值设置为 0 秒,OpenSearch 会记录所有操作,这对于测试慢日志是否确实已启用很有用。
reformat
指定是否将文档的_source
字段记录为单行(true
)或允许多行(false
)。source
是要记录的文档_source
字段的字符数。level
是要包含的最低日志级别。
来自 opensearch_index_indexing_slowlog.log
的一行可能如下所示
node1 | [2019-10-24T19:48:51,012][WARN][i.i.s.index] [node1] [some-index/i86iF5kyTyy-PS8zrdDeAA] took[3.4ms], took_millis[3], type[_doc], id[1], routing[], source[{"title":"Your Name", "Director":"Makoto Shinkai"}]
如果设置较低的阈值,分片慢日志可能会占用大量磁盘空间并影响性能。考虑暂时启用它们以进行故障排除或性能调优。要禁用分片慢日志,请将所有阈值恢复为 -1
。
任务日志
当任务资源消费者启用时,OpenSearch 可以记录前 N 个内存消耗大的搜索任务的 CPU 时间和内存利用率。默认情况下,任务资源消费者将以 60 秒为间隔记录前 10 个搜索任务。这些值可以在 opensearch.yml
中配置。
任务日志通过集群设置API动态启用。
PUT _cluster/settings
{
"persistent" : {
"task_resource_consumers.enabled" : "true"
}
}
启用任务资源消费者可能会影响搜索延迟。
启用后,日志将写入logs/opensearch_task_detailslog.json
和logs/opensearch_task_detailslog.log
。
要配置日志记录间隔和记录的搜索任务数量,请将以下行添加到opensearch.yml
:
# Number of expensive search tasks to log
cluster.task.consumers.top_n.size:100
# Logging interval
cluster.task.consumers.top_n.frequency:30s
弃用日志
弃用日志记录客户端对您的集群进行弃用API调用时的情况。这些日志可以帮助您在升级到新的主要版本之前识别和修复问题。默认情况下,OpenSearch以WARN级别记录弃用API调用,这适用于几乎所有用例。如果需要,可以使用_cluster/settings
、opensearch.yml
或log4j2.properties
配置logger.deprecation.level
。