日志
编辑日志
编辑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 才能应用您对此文件所做的任何更改。对 log4j2.properties
的更改在 Logstash 重新启动后会保持不变。
以下是一个使用 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
,记录器名称是通过将完整的类名小写并将双冒号替换为单点获得的。
请考虑使用 Logstash 附带的默认 log4j 配置,因为它配置为适用于大多数部署。下一节将介绍滚动策略的工作方式,以防您需要进行调整。
轮转设置
编辑log4j2.properties
文件有三个用于写入日志文件的追加器:一个用于纯文本,一个用于 json 格式,一个用于在您设置 pipeline.separate_logs
值时按管道拆分日志行。
这些追加器定义了
- 触发策略,它决定是否应执行轮转,以及
- 轮转策略,它定义如何执行轮转。
默认情况下,定义了两个触发策略——时间和大小。
- 时间策略每天创建一个文件。
- 大小策略会在文件大小超过 100 MB 后强制创建新文件。
默认策略还基于最大文件数执行文件轮转。当达到 30 个文件的限制时,将删除第一个(最旧的)文件,以便为新文件创建空间。后续文件将相应地重新编号。
每个文件都有一个日期,并且在轮转期间将删除超过 7 天(默认)的文件。
appender.rolling.type = RollingFile appender.rolling.name = plain_rolling appender.rolling.fileName = ${sys:ls.logs}/logstash-plain.log appender.rolling.filePattern = ${sys:ls.logs}/logstash-plain-%d{yyyy-MM-dd}-%i.log.gz appender.rolling.policies.type = Policies appender.rolling.policies.time.type = TimeBasedTriggeringPolicy appender.rolling.policies.time.interval = 1 appender.rolling.policies.time.modulate = true appender.rolling.layout.type = PatternLayout appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c]%notEmpty{[%X{pipeline.id}]}%notEmpty{[%X{plugin.id}]} %m%n appender.rolling.policies.size.type = SizeBasedTriggeringPolicy appender.rolling.policies.size.size = 100MB appender.rolling.strategy.type = DefaultRolloverStrategy appender.rolling.strategy.max = 30 appender.rolling.strategy.action.type = Delete appender.rolling.strategy.action.basepath = ${sys:ls.logs} appender.rolling.strategy.action.condition.type = IfFileName appender.rolling.strategy.action.condition.glob = logstash-plain-* appender.rolling.strategy.action.condition.nested_condition.type = IfLastModified appender.rolling.strategy.action.condition.nested_condition.age = 7D
追加器类型,它会滚动旧的日志文件。 |
|
当前日志文件的名称。 |
|
滚动文件的名称格式定义,在本例中,日期后跟一个递增的数字,最多 30 个(默认)。 |
|
时间策略,以在一天结束时触发轮转。 |
|
大小策略,一旦纯文本文件达到 100 MB 的大小,就会触发轮转。 |
|
轮转策略定义最多 30 个文件。 |
|
轮转期间要执行的操作。 |
|
操作要考虑的文件集。 |
|
执行轮转操作的条件:超过 7 天。 |
轮转操作还可以强制执行磁盘使用限制,删除旧文件以匹配请求的条件,例如
日志 API
编辑对于临时的日志更改,修改 log4j2.properties
文件并重新启动 Logstash 会导致不必要的停机时间。相反,您可以通过日志 API 动态更新日志级别。这些设置会立即生效,不需要重新启动。
默认情况下,日志 API 尝试绑定到 tcp:9600
。如果此端口已被另一个 Logstash 实例使用,则需要使用指定的 --api.http.port
标志启动 Logstash 以绑定到不同的端口。有关更多信息,请参阅 命令行标志。
检索日志配置列表
编辑要检索运行时可用的日志子系统列表,您可以向 _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 毫秒的事件。
日志包括导致缓慢的完整事件和过滤器配置。