日志记录编辑

Logstash 在运行期间会发出内部日志,这些日志位于 LS_HOME/logs(对于 DEB/RPM,则位于 /var/log/logstash)。默认日志记录级别为 INFO。Logstash 的日志记录框架基于 Log4j 2 框架,并且其大部分功能直接向用户公开。

您可以为特定的子系统、模块或插件配置日志记录。

当您需要调试问题(尤其是插件问题)时,请考虑将日志记录级别提高到 DEBUG 以获取更详细的消息。例如,如果您正在调试 Elasticsearch 输出问题,则可以仅针对该组件提高日志级别。这种方法可以减少过度日志记录带来的干扰,并帮助您专注于问题区域。

您可以使用 log4j2.properties 文件或 Logstash API 配置日志记录。

  • log4j2.properties 文件。 通过 log4j2.properties 文件进行的更改需要您重新启动 Logstash 才能生效。更改在后续重新启动后将保留
  • 日志记录 API。 通过日志记录 API 进行的更改会立即生效,无需重新启动。Logstash 重新启动后,更改不会保留

Log4j2 配置编辑

Logstash 附带一个 log4j2.properties 文件,其中包含开箱即用的设置,包括记录到控制台。您可以修改此文件以更改轮换策略、类型和其他 log4j2 配置

您必须重新启动 Logstash 才能应用您对此文件所做的任何更改。Logstash 重新启动后,对 log4j2.properties 的更改将保留。

以下是使用 outputs.elasticsearch 的示例

logger.elasticsearchoutput.name = logstash.outputs.elasticsearch
logger.elasticsearchoutput.level = debug

前面的示例为记录器 logstash.outputs.elasticsearch 定义了名称和级别。记录器通常由 Java 类名标识,例如 org.logstash.dissect.Dissector。它也可以是部分包路径,如 org.logstash.dissect。对于 Ruby 类(如 LogStash::Outputs::Elasticsearch),记录器名称是通过将完整类名转换为小写并将双冒号替换为单个点来获得的。

日志记录 API编辑

对于临时日志记录更改,修改 log4j2.properties 文件并重新启动 Logstash 会导致不必要的停机时间。相反,您可以通过日志记录 API 动态更新日志记录级别。这些设置会立即生效,并且不需要重新启动。

默认情况下,日志记录 API 尝试绑定到 tcp:9600。如果此端口已被另一个 Logstash 实例使用,则需要在启动 Logstash 时指定 --api.http.port 标志以绑定到不同的端口。有关更多信息,请参阅 命令行标志

检索日志记录配置列表编辑

要检索运行时可用的日志记录子系统列表,您可以对 _node/logging 执行 GET 请求

curl -XGET 'localhost:9600/_node/logging?pretty'

示例响应

{
...
  "loggers" : {
    "logstash.agent" : "INFO",
    "logstash.api.service" : "INFO",
    "logstash.basepipeline" : "INFO",
    "logstash.codecs.plain" : "INFO",
    "logstash.codecs.rubydebug" : "INFO",
    "logstash.filters.grok" : "INFO",
    "logstash.inputs.beats" : "INFO",
    "logstash.instrument.periodicpoller.jvm" : "INFO",
    "logstash.instrument.periodicpoller.os" : "INFO",
    "logstash.instrument.periodicpoller.persistentqueue" : "INFO",
    "logstash.outputs.stdout" : "INFO",
    "logstash.pipeline" : "INFO",
    "logstash.plugins.registry" : "INFO",
    "logstash.runner" : "INFO",
    "logstash.shutdownwatcher" : "INFO",
    "org.logstash.Event" : "INFO",
    "slowlog.logstash.codecs.plain" : "TRACE",
    "slowlog.logstash.codecs.rubydebug" : "TRACE",
    "slowlog.logstash.filters.grok" : "TRACE",
    "slowlog.logstash.inputs.beats" : "TRACE",
    "slowlog.logstash.outputs.stdout" : "TRACE"
  }
}

更新日志记录级别编辑

在子系统、模块或插件的名称前添加 logger.

以下是使用 outputs.elasticsearch 的示例

curl -XPUT 'localhost:9600/_node/logging?pretty' -H 'Content-Type: application/json' -d'
{
    "logger.logstash.outputs.elasticsearch" : "DEBUG"
}
'

在此设置生效时,Logstash 会为您的配置中指定的所有 Elasticsearch 输出发出 DEBUG 级别的日志。请注意,此新设置是暂时的,重新启动后将不会保留。

如果您希望日志记录更改在重新启动后保留,请将它们添加到 log4j2.properties 中。

重置动态日志记录级别编辑

要重置可能已通过日志记录 API 动态更改的任何日志记录级别,请向 _node/logging/reset 发送 PUT 请求。所有日志记录级别都将恢复为 log4j2.properties 文件中指定的值。

curl -XPUT 'localhost:9600/_node/logging/reset?pretty'

日志文件位置编辑

您可以使用 --path.logs 设置指定日志文件位置。

慢日志编辑

Logstash 的慢日志添加了在特定事件通过管道所需时间异常长时记录日志的功能。与普通的应用程序日志一样,您可以在 --path.logs 目录中找到慢日志。慢日志在 logstash.yml 设置文件中使用以下选项进行配置

slowlog.threshold.warn (default: -1)
slowlog.threshold.info (default: -1)
slowlog.threshold.debug (default: -1)
slowlog.threshold.trace (default: -1)

默认情况下,慢日志处于禁用状态。默认阈值设置为 -1nanos 以表示无限阈值。不会调用慢日志。

启用慢日志编辑

slowlog.threshold 字段使用时间值格式,该格式支持广泛的触发间隔。您可以使用以下时间单位指定范围:nanos(纳秒)、micros(微秒)、ms(毫秒)、s(秒)、m(分钟)、h(小时)、d(天)。

随着您提高日志级别,慢日志变得更加敏感并记录更多事件。

示例

slowlog.threshold.warn: 2s
slowlog.threshold.info: 1s
slowlog.threshold.debug: 500ms
slowlog.threshold.trace: 100ms

在此示例中

  • 如果日志级别设置为 warn,则日志将显示处理时间超过 2 秒的事件。
  • 如果日志级别设置为 info,则日志将显示处理时间超过 1 秒的事件。
  • 如果日志级别设置为 debug,则日志将显示处理时间超过 500 毫秒的事件。
  • 如果日志级别设置为 trace,则日志将显示处理时间超过 100 毫秒的事件。

日志包括导致速度变慢的完整事件和过滤器配置。