日志

记录Logstash操作的内部日志,位于 LOGSTASH_HOME/logs中(DEB或RPM系统为 /var/log/logstash)。默认日志记录级别为 INFO。 Logstash的日志框架基于 Log4j2框架,其大部分功能直接暴露给用户。

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

当您需要调试问题,特别是插件问题时,可以考虑将日志记录级别增加到 DEBUG,以获取更详细的消息。例如,如果您正在调试Elasticsearch Output的问题,则可以仅为该组件增加日志级别。这种方法可以减少过度记录的噪音,从而更专注于问题。

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

  • log4j2.properties 文件。修改 log4j2.properties 文件后,必须重启Logstash使更改生效。更改将在后续重新启动时保留。
  • 日志API。通过Logging API进行的更改立即生效,无需重新启动。重新启动Logstash后,更改将不会保留。

Log4j2配置

Logstash默认附带一个开箱即用的 log4j2.properties 文件。您可以修改此文件以更改轮换策略、类型和其他 log4j2配置

对此文件所做的任何更改,需重新启动Logstash才能生效,修改内容在重启后不会丢失。

以下是 outputs.elasticsearch 的示例:

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

日志API

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

注意: 默认情况下,日志API使用 tcp:9600 。如果此端口已被另一个Logstash实例使用,则在启动Logstash时,需要使用 —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动态更改时,如需重置,可发送 PUT 请求到 _node/logging/reset。 所有日志记录级别都将恢复为 log4j2.properties 中指定的值。

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

日志文件存储位置

可以通过 --path.logs 指定日志文件存储路径。

慢速日志slowlog

当特定事件通过管道时花费时间异常,Logstash的slowlog可以对这种情况进行记录。如同普通的应用程序日志,slowlog可以在 --path.logs 目录中找到。使用以下选项在 logstash.yml 中配置slowlog:

slowlog.threshold.warn(默认值: -1)
slowlog.threshold.info(默认值: -1)
slowlog.threshold.debug(默认值: -1)
slowlog.threshold.trace(默认值: -1

Slowlog默认禁用。默认阈值为 -1nanos ,表示无限阈值,不会使用slowlog。

启用slowlog

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

当您提高日志级别时,slowlog会变得更加灵敏,并记录更多事件。

例:

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

以上示例中:

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

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

results matching ""

    No results matching ""