如何调试Logstash配置文件

Posted 程序员雨衣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何调试Logstash配置文件相关的知识,希望对你有一定的参考价值。

Logstash在任何基于ELK的数据管道中都扮演着非常重要的角色,但仍然被认为是stack中的主要难点之一。像任何软件一样,Logstash有很多需要掌握的细节才能自信地接入。 

一个非常重要的细节是Logstash配置文件(不是软件的配置文件/etc/logstash/logstash.yml),而是负责数据管道的.conf文件)。运行Logstash的成功程度取决于您使用此文件的精通程度,以及您在调试错误配置时可能出现的问题的技巧。

对于所有这些Logstash新手,在考虑替代方案之前,请不要绝望 - Logstash是一个很棒的日志聚合器,在本文中,您将找到一些有关正确使用管道配置文件并进行调试的技巧。

了解配置文件的结构

在我们看一些调试策略之前,您可能需要深入了解并了解如何构建Logstash配置文件。这可以帮助您避免不必要的和非常基本的错误。

每个Logstash配置文件包含三个部分 - 输入,过滤和输出。

每个部分指定要使用的插件和插件特定的设置,这些设置因插件而异。您可以为每个部分指定多个插件,这些插件将按照外观顺序执行。  

让我们看一下Apache访问日志的这个简单示例:

##Input sectioninput { file {path => "/var/log/apache/access.log" }} ##Filter sectionfilter { grok {match => { "message" => "%{COMBINEDAPACHELOG}" } } date {match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } geoip {source => "clientip" }} ##Output sectionoutput { elasticsearch { hosts => ["localhost:9200"]  }}

在这种情况下,我们指示Logstash使用文件输入插件从/var/log/apache/access.log收集我们的Apache访问日志,使用grok和geoip插件来处理日志,并使用Elasticsearch输出插件来发送数据到本地Elasticsearch实例。

提示

  • 使用文本编辑器验证每个语句的结束大括号,没有断行。

  • 每个插件都有不同的设置。通过参考插件的文档验证每个插件的语法。

  • 只使用你需要的插件。不要使用您不需要的插件重载Logstash配置,这样只会添加更多故障点。更多插件也会影响性能。

建立你的groks

grok过滤器插件是Logstash用户使用的最流行的插件之一。它的任务很简单 - 将日志解析为美观且易于分析的数据结构。另一方面,处理grok也有一些复杂。  

Grok基本上是基于正则表达式的组合,所以如果你是一个正则表达式天才,在Logstash中使用这个插件可能比其他用户更容易一些。不过,如果你需要一些关于grokking的提示,请看看这篇文章。

该grokdebugger是一个免费的在线工具,可以帮助你测试的日志消息你神交模式。这个工具让生活变得更加轻松(Kibana中甚至还有这个工具的版本),但是请注意,即使你的grok通过了grokdebugge的测试,你仍然可能会遇到Logstash配置错误甚至是失败的grok(_grokparsefailure)。

提示

  • 在groks中使用Logstash支持的模式。这里提供了这些模式的完整列表

  • 当您开始配置您的grok时,我建议您从%{GREEDYDATA:message}模式开始,并在继续时慢慢添加越来越多的模式。

  • 有一堆在线工具可以帮助您构建正则表达式。我喜欢使用regex101

测试您的配置

没有急于求成。在生产中启动Logstash之前,请测试配置文件。如果从命令行运行Logstash,则可以指定将验证配置的参数。

在Logstash安装目录(Linux:/ usr / share / logstash)中,输入:

sudo bin/logstash --config.test_and_exit -f <path_to_config_file>

这将贯穿您的配置,验证配置语法,然后退出。如果检测到错误,您将收到指向问题的详细消息。

例如,在下面的错误中,我们可以看到第34行第7行有一个配置错误:

[FATAL] 2019-03-09 17:37:27.334 [LogStash::Runner] runner - The given configuration is invalid. Reason: Expected one of #, => at line 34, column 7 (byte 1173) after filter

如果您的配置通过configtest,您将看到以下消息:

Configuration OK[INFO ] 2019-03-06 19:01:46.286 [LogStash::Runner] runner - Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash

Logstash日志记录

在大多数情况下,如果您已通过configtest并使用grokdebugger单独验证了grok模式,那么您已经大大增强了成功启动Logstash管道的可能性。

但是,Logstash具有不可思议的能力,只有当您对配置有信心时才会出错。在这种情况下,您需要检查的第一个位置是Logstash日志(Linux:/var/log/logstash/logstash-plain.log)。在这里,您可能会找到错误的根本原因。

调试Logstash的另一种常用方法是将事件打印到stdout。

output {  stdout { codec => rubydebug }}

提示

  • 如果将Logstash作为服务启动,则无法在控制台中看到stdout输出。

  • 您可以将stdout输出插件与其他输出插件结合使用。

  • 每次启动Logstash并使用以下命令拖尾Logstash日志时,我都习惯打开另一个终端:

  sudo tail -f /var/log/logstash/logstash.log

尾注

使用Logstash肯定需要经验。上面的示例是超级基本的,仅涉及管道的配置而不是性能调整。当您使用多个管道和更复杂的配置文件时,事情会变得更加复杂。  

根据经验,在开始使用Logstash之前,请确保确实需要它。一些用例可能只能依靠节拍。Filebeat现在支持一些基本的过滤和处理,这可能意味着您不需要使用Logstash使问题复杂化。

同样,Logstash是一个很棒的日志聚合器。最近版本中添加的改进(例如监视API和性能改进)使得构建弹性和可靠的日志管道变得更加容易。如果您确实需要Logstash,已经开始使用它并且已经开始遇到问题 - 请耐心等待,这值得您光临!


以上是关于如何调试Logstash配置文件的主要内容,如果未能解决你的问题,请参考以下文章

filebeat es logstash kibana kafka zookeeper 集群 全链路调试

为调试 Logstash Grok表达式,安装 GrokDebuger 环境

logstash配置--syslog

Logstash:多个配置文件(conf)

logstash配置文件中的代码执行顺序是怎么样的

Logstash-配置