如何调试Logstash配置文件
Posted 程序员雨衣
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何调试Logstash配置文件相关的知识,希望对你有一定的参考价值。
Logstash在任何基于ELK的数据管道中都扮演着非常重要的角色,但仍然被认为是stack中的主要难点之一。像任何软件一样,Logstash有很多需要掌握的细节才能自信地接入。
一个非常重要的细节是Logstash配置文件(不是软件的配置文件(/etc/logstash/logstash.yml),而是负责数据管道的.conf文件)。运行Logstash的成功程度取决于您使用此文件的精通程度,以及您在调试错误配置时可能出现的问题的技巧。
对于所有这些Logstash新手,在考虑替代方案之前,请不要绝望 - Logstash是一个很棒的日志聚合器,在本文中,您将找到一些有关正确使用管道配置文件并进行调试的技巧。
了解配置文件的结构
在我们看一些调试策略之前,您可能需要深入了解并了解如何构建Logstash配置文件。这可以帮助您避免不必要的和非常基本的错误。
每个Logstash配置文件包含三个部分 - 输入,过滤和输出。
每个部分指定要使用的插件和插件特定的设置,这些设置因插件而异。您可以为每个部分指定多个插件,这些插件将按照外观顺序执行。
让我们看一下Apache访问日志的这个简单示例:
##Input section
input {
file {
path => "/var/log/apache/access.log"
}
}
##Filter section
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
geoip {
source => "clientip"
}
}
##Output section
output {
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 集群 全链路调试