来自Cloud Foundry的Logstash和多行日志条目

时间:2015-07-27 15:59:46

标签: cloudfoundry logstash-grok

我们正在将CF日志消息发送到ELK堆栈。多线日志消息在Logstash中分成几条日志消息。多行日志消息的每行一端。堆栈跟踪转储到日志时会出现问题。堆栈跟踪的每一行都被转换为日志消息。试图通过Kibana查看这几乎是不可能的。 Logstash提供了一个Grok功能,允许操作日志消息。一种常见的解决方案是创建一个Grok过滤器,该过滤器使用时间戳来指示日志条目何时开始,并将所有行组合到下一个时间戳到一个日志消息中。问题是CF为每一行添加了一个时间戳。有没有人想出一个好的Grok表达式来处理来自CF的多行日志消息?

这是Cloud Foundry的一个日志片段。在Logstash中,每一行都被视为单独的日志消息

2015-07-24T10:37:59.93-0600 [App/0]      OUT  org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://11.11.11.11:9191/someendpoint":Connect to 11.11.11.11:9191 [/11.11.11.11] failed: Connection refused; nested exception is org.apache.http.conn.HttpHostConnectException: Connect to 11.11.11.11:9191 [/11.11.11.11] failed: Connection refused
2015-07-24T10:37:59.93-0600 [App/0]      OUT    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:580)
2015-07-24T10:37:59.93-0600 [App/0]      OUT    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:530)
2015-07-24T10:37:59.93-0600 [App/0]      OUT    at org.springframework.web.client.RestTemplate.postForLocation(RestTemplate.java:305)
2015-07-24T10:37:59.93-0600 [App/0]      OUT    at com.digitalglobe.p2020.eventservice.sendevent.EventSenderCommand.run(EventSenderCommand.java:104)

1 个答案:

答案 0 :(得分:1)

从您提供的日志中我看到您有多行的第一条消息,然后其余的消息在OUT部分之后另外两个空格缩进。

这意味着您应该能够使用以下模式捕获第一行

^%{TIMESTAMP_ISO8601}\s+\[%{DATA}]\s+\S+\s{2}\S

请注意,它不应该捕获前面的行而只有第一行,如果你将s {2}的值更改为s {4},你将会捕获主线而不是第一行(与第一行相反)你要)。