使用logstash和kibana分析日志文件的延迟

时间:2014-11-17 16:50:57

标签: elasticsearch logstash kibana logstash-grok

我是ELK堆栈的新手,希望用它来调试日志文件中的问题。我的要求是绘制线程处理任务并返回池所花费的时间。基本上日志如下所示:

2014-10-31 13:00:00,007 [catalina-exec-11] DEBUG [com.clairmail.jms.concurrent.poolimpl.JMSProducerPoolImpl] Providing a pooled producer to catalina-exec-11

.....和

2014-10-31 13:00:00,121 [catalina-exec-11] DEBUG [com.clairmail.jms.concurrent.poolimpl.JMSProducerPoolImpl] catalina-exec-11 has returned producer to pool.

从上面的日志中,我可以看出这个特殊的线程catalina-exec-11需要大约107毫秒才能完成。我的问题如下:

  1. 如何在Kibana的图表中表示?
  2. 我们有一个分布式架构,所以很可能在第二个实例中会有一个catalina-exec-11,如何区分它与第一个实例?
  3. 聚合两台服务器,看看处理线程的平均时间是多少。
  4. 我的grok过滤器会是什么样的?
  5. Anoop

1 个答案:

答案 0 :(得分:1)

假设您可以更改日志的格式,这些提示可能对您有用:

  1. 从kibana 3.1(当前稳定版)中的两个不同的弹性搜索文档计算操作的延迟是没有办法(据我所知)。也许在Kibana 4中它是可能的。如果您的日志条目包含操作已用时间,那么您尝试做的事情将是微不足道的。例如:

    2014-10-31 13:00:00,007 0 [catalina-exec-11] DEBUG [com.clairmail.jms.concurrent.poolimpl.JMSProducerPoolImpl]为catalina-exec-11提供池化生产者

    2014-10-31 13:00:00,121 114 [catalina-exec-11] DEBUG [com.clairmail.jms.concurrent.poolimpl.JMSProducerPoolImpl] catalina-exec-11已将生产者返回池中。

  2. 请注意,我在日期之后添加了一个新的日志字段。 然后,您可以绘制kibana直方图以显示该延迟字段的平均值。

    1. 因此,您拥有一个具有不同计算机的分布式体系结构,并且可能是命名线程。您需要的是全局唯一的请求上下文ID。有很多方法可以实现这一点:Guid,或者一些Int64数字唯一ID,类似于twitter snowflakes。使用这样的id,您的日志将如下所示:

      5892EAC3-EE95-4549-A787-CCE5A6639598 2014-10-31 13:00:00,007 0 [catalina-exec-11] DEBUG [com.clairmail.jms.concurrent.poolimpl.JMSProducerPoolImpl]为catalina提供池化生产者-exec-11

      5892EAC3-EE95-4549-A787-CCE5A6639598 2014-10-31 13:00:00,121 114 [catalina-exec-11] DEBUG [com.clairmail.jms.concurrent.poolimpl.JMSProducerPoolImpl] catalina-exec-11有将生产者退回到池中。

    2. 请注意,我在每个日志条目的开头添加了一个新的guid字段。

      1. 可以通过logstash轻松实现。如果logstash配置为从不同的计算机读取日志文件,则文件输入将向logstash事件添加新的“host”字段,您可以将该字段发送到elasticsearch。然后在kibana仪表板中,您可以轻松地显示请求如何在不同的计算机之间分配。

      2. 你的grok过滤器看起来像这样: 神交 {     match => [“message”,“%{UUID:requestid}%{SPACE}%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{NUMBER:ellapsedmilliseconds}%{SPACE} [{WORD:threadname}]%{SPACE}%{WORD :水平}%{SPACE} [%{WORD:记录器}]%{SPACE}%{WORD:的LogMessage}“] }

      3. 这只是一个例子,您必须根据需要对其进行微调。

        希望有所帮助。