目前在我的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请求。
答案 0 :(得分:0)
如果您有灵活性,我建议您将控制台日志写入日志文件。通过这种方式,您可以使用filebeat逐行自动读取日志并将其发送到logstash。通过使用filebeat,您可以获得保证单次传递数据的优势,并在logstash关闭时自动退出。
数据到达logstash后,您可以使用管道根据您的要求解析/过滤数据。此链接中提供的Grok调试器非常方便 - &gt; http://grokdebug.herokuapp.com/
转换数据后,可以将文档发送到ES以保持持久性。