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



我是 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 过滤器会是什么样子?

阿诺普

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

    据我所知
  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 已将生产者返回到池中。

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

  1. 因此,您有一个具有不同计算机的分布式体系结构,并且可能具有命名线程。您需要的是一个全局唯一的请求上下文 ID。有很多方法可以实现这一点:Guid,或一些Int64数字唯一id,类似于twitter雪花。使用这样的 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 已将生产者返回到池。

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

  1. 这很容易通过logstash来实现。如果 logstash 配置为从不同的机器读取日志文件,则文件输入会将一个新的"host"字段添加到 logstash 事件中,您可以将其发送到 elasticsearch。然后在 kibana 仪表板中,您可以轻松显示请求在不同机器之间的分布方式。

  2. 您的 grok 过滤器可能如下所示:格罗克{ match => [ "message", "%{UUID:requestid}%{SPACE}%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{NUMBER:ellapsedmilliseconds}%{SPACE}[{WORD:threadname}]%{SPACE}%{WORD:level}%{SPACE}[%{WORD:logger}]%{SPACE}%{WORD:logmessage}"]}

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

希望有帮助。

最新更新