Link Search Menu Expand Document Documentation Menu

日志

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 的内置日志级别:OFFFATALERRORWARNINFODEBUGTRACE。默认为 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 级别非常详细。如果你为排查问题而启用了其中一个,请在完成后禁用它。

还有其他方法可以更改日志级别

  1. 将行添加到 opensearch.yml

    logger.org.opensearch.index.reindex: debug
    

    如果你想在多个集群中重用日志配置,或者调试单个节点的启动问题,修改 opensearch.yml 是最有意义的。

  2. 修改 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.jsonlogs/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/settingsopensearch.ymllog4j2.properties配置logger.deprecation.level

剩余 350 字符

有问题?

想贡献力量?