Cloud foundry 来自Cloud Foundry的日志存储和多行日志条目

Cloud foundry 来自Cloud Foundry的日志存储和多行日志条目,cloud-foundry,logstash-grok,Cloud Foundry,Logstash Grok,我们正在向麋鹿堆栈发送CF日志消息。多行日志消息在Logstash中被分解为多个日志消息。多行日志消息的每行一个端点。当堆栈跟踪转储到日志时,这是有问题的。堆栈跟踪的每一行都转换为日志消息。试图通过Kibana来看待这一点几乎是不可能的。Logstash提供了一个Grok特性,允许对日志消息进行操作。一种常见的解决方案是创建一个Grok过滤器,该过滤器使用时间戳来指示日志条目何时开始,并将所有行组合到一个日志消息中,直到下一个时间戳。问题是CF为每一行添加了一个时间戳。有没有人想出一个好的Gro

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

下面是CloudFoundry的一段日志。在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)

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

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

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

请注意,它不应该捕捉前面的几行,而应该只捕捉第一行,如果您将s{2}的值更改为s{4},您将捕捉主持会议的几行,而不是第一行(与您想要的相反)

您能为这些日志消息提供一个日志示例吗?如果每一行上都有时间戳,作为一个人,你如何找到新的多行消息开始的迹象?@TomKregenbild谢谢你的关注。我从Cloud Foundry日志流中添加了一个片段。您好,我正在尝试做同样的事情,尝试从Cloud Foundry日志中获取时间戳、主机、请求者、响应时间、应用程序id、使用的代理以及下面列出的许多其他内容,这些内容如下2015-08-03T09:51:15.000+00:00[RTR]OUT mm1-spring-music.example.com-[03/08/2015:09:51:15+0000]“获取/assets/HTTP/1.1”200 428英寸Mozilla/5.0(Windows NT 6.3;WOW64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/44.0.2403.125 Safari/537.36英寸XX.XX.XXX.XX“vcap请求id:5ad0-f9-46a9-77-2095952FAF78响应时间:0.002043376应用id:08b8-c7-4613-bf12-1a您是否可以共享logstash.conf您已使用解决方案感谢信息。如果只有一台Logstash服务器,这种方法很有效,但在多服务器环境中,它不起作用,因为CloudFoundry可能会将每一行发送到不同的服务器。我想知道,确保多行日志消息中的所有行都发送到同一个Logstash服务器是否更像是一个Cloud Foundry问题。您可以通过在将日志发送到Logstash服务器的发货人上实现多行逻辑来克服此问题。您可以使用Beaver shipper来解决此问题,并在我在“多行问题”下撰写的这篇文章的末尾阅读更多关于如何解决此问题的内容: