获取Logstash逐行解析整个日志

时间:2017-11-17 16:05:12

标签: elasticsearch jenkins logstash

目前在我的Jenkins构建结束时,我抓住控制台日志并将其添加到json blob以及构建详细信息,然后通过curl将其发送到logstash

def payload = JsonOutput.toJson([
            CONSOLE: getConsoleText(),
            BUILD_RESULT: currentBuild.result,
            ] << manager.getEnvVars()
        )
sh "curl -i -X PUT -H \'content-type: application/json\' --insecure -d @data.json http://mylogstash/jenkins"

Logstash然后将此直接放入针对当天Jenkins索引的弹性搜索中。这很好用,整个日志存储在elasticsearch中,但它并不能使它非常易于搜索。

我想要做的是将日志作为一个整体发送到logstash(因为它非常大),并且logstash逐行解析它并应用过滤器。然后我不会过滤任何行作为文档单独发布到ES。 这是可能的,还是我必须从詹金斯逐行发送?由于日志文件长达数千行会导致大量的logstash请求。

1 个答案:

答案 0 :(得分:0)

如果您有灵活性,我建议您将控制台日志写入日志文件。通过这种方式,您可以使用filebeat逐行自动读取日志并将其发送到logstash。通过使用filebeat,您可以获得保证单次传递数据的优势,并在logstash关闭时自动退出。

数据到达logstash后,您可以使用管道根据您的要求解析/过滤数据。此链接中提供的Grok调试器非常方便 - &gt; http://grokdebug.herokuapp.com/

转换数据后,可以将文档发送到ES以保持持久性。