Logstash 参考指南(日志记录)
日志记录
Logstash在其操作期间发出内部日志,这些日志位于LS_HOME/logs
(或/var/log/logstash
用于DEB/RPM)中,默认的日志级别是INFO
。Logstash的日志框架基于Log4j 2框架,其大部分功能都直接向用户公开。
在调试问题时,特别是插件问题时,增加日志级别到DEBUG
以获得更详细的消息是很有帮助的。以前,你只能设置应用于整个Logstash产品的日志级别,从5.0开始,你可以在Logstash中为特定的子系统配置日志记录。例如,如果你正在调试Elasticsearch输出的问题,你可以仅为该组件增加日志级别,通过这种方式,你可以减少由于过度日志记录而产生的噪音,并有效地关注问题区域。
日志文件位置
你可以使用--path.logs
设置指定日志文件的位置。
Log4j 2配置
Logstash带有一个使用log4j2.properties
文件的开箱即用的设置,你可以修改此文件以更改旋转策略、类型和其他log4j2配置,你必须重新启动Logstash以应用对此文件所做的任何更改。
Slowlog
Logstash的慢日志功能可以在特定事件需要异常长的时间才能通过管道时进行日志记录,与普通的应用程序日志一样,你可以在--path.logs
目录中找到慢日志,使用以下选项在logstash.yml
设置文件中配置Slowlog:
slowlog.threshold.warn (default: -1) slowlog.threshold.info (default: -1) slowlog.threshold.debug (default: -1) slowlog.threshold.trace (default: -1)
默认情况下,这些值被设置为-1nanos
,表示不会调用slowlog的无限阈值,这些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
在上面的配置中,将记录在过滤器中处理耗时超过两秒的事件,日志将包含导致缓慢的完整事件和过滤器配置。
日志记录API
你可以修改log4j2.properties
文件并重新启动你的Logstash,但这既乏味又会导致不必要的停机,相反,你可以通过日志记录API动态更新日志记录级别,这些设置立即生效,不需要重新启动。
tcp:9600
,如果该端口已经被另一个Logstash实例使用,你需要使用--http.port
标志启动Logstash指定绑定到另一个端口,有关更多信息,请参阅命令行标志。要更新日志级别,请使用你感兴趣的子系统/模块并预先设置logger.
,例如:
curl -XPUT 'localhost:9600/_node/logging?pretty' -H 'Content-Type: application/json' -d' { "logger.logstash.outputs.elasticsearch" : "DEBUG" } '
当这个设置生效时,Logstash为配置中指定的所有Elasticsearch输出发出DEBUG级别日志,请注意,这个新设置是暂时的,不会在重新启动时存活。
应该向log4j2.properties
添加持久性更改,例如:
logger.elasticsearchoutput.name = logstash.outputs.elasticsearch logger.elasticsearchoutput.level = debug
要检索运行时可用的日志记录子系统列表,可以对_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" } }
要重置任何可能通过日志API动态更改的日志级别,请向_node/logging/reset
发送PUT
请求,所有日志级别都将恢复到log4j2.properties
文件中指定的值。
curl -XPUT 'localhost:9600/_node/logging/reset?pretty'