暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何调试Logstash配置文件

程序员雨衣 2019-06-19
2478

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,已经开始使用它并且已经开始遇到问题 - 请耐心等待,这值得您光临!


              文章转载自程序员雨衣,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论