分布式环境中日志事件的关联

时间:2014-09-30 06:13:09

标签: logging elasticsearch logstash kibana

我们使用ELK(ElasticSearch + Logstash + Kibana)堆栈进行日志管理,但问题是kibana会单独显示每个组件的统计信息。 我希望将多个组件中的事件关联起来,例如,tomcat服务器中的异常,导致客户使用HTTP 404。

请建议如何实现,如果不可能通过ELK提出其他一些开源解决方案。

1 个答案:

答案 0 :(得分:1)

您需要在特定事件之间添加连接。没有任何东西可以开箱即用。您必须自己添加它,这取决于您操作的系统类型。

<强> PHP

您可以使用mod_unique_id创建由Apache服务器创建的唯一请求ID。可以在PHP环境中使用此id进行日志记录($_SERVER['UNIQUE_ID'])。另见[1]

<强>爪哇

如果您使用Java,我更喜欢略有不同的方法。在应用程序中生成用于标识特定请求的请求ID。您可以将请求ID添加到MDC(消息诊断上下文)中。 MDC可以通过各种GELF连接器与日志消息一起提交到logstash。在HTTP响应中也使用请求ID作为Apache的头。您可以在Apache访问日志中记录响应头。有关Java部分的信息,请参见[2]。

通常,如果您的环境不仅仅包含Apache和应用程序服务器,则值得在系统中的所有调用之间传递RequestId(可能是SessionId)。这样,您就可以关联请求/会话中的所有活动。

<强>链接