0

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

阿努普

4

1 回答 1

1

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

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

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

    2014-10-31 13:00:00,121 114 [catalina-exec-11] 调试 [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] 调试 [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] 调试 [com.clairmail.jms.concurrent.poolimpl.JMSProducerPoolImpl] catalina-exec-11 已返回生产者水池。

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

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

  2. 你的 grok 过滤器看起来像这样: grok { match => [ "message", "%{UUID:requestid}%{SPACE}%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{NUMBER:ellapsedmilliseconds}%{SPACE} [{WORD:threadname}]%{SPACE}%{WORD:level}%{SPACE}[%{WORD:logger}]%{SPACE}%{WORD:logmessage}"] }

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

希望有帮助。

于 2014-11-17T18:04:49.010 回答