日志记录
编辑日志记录编辑
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 毫秒的事件。
日志包括导致速度变慢的完整事件和过滤器配置。