【发布时间】:2014-11-24 16:11:32
【问题描述】:
我们使用 ELK(ElasticSearch+Logstash+Kibana) 堆栈来管理日志,但问题是 kibana 会单独显示每个组件的统计信息。 我希望将多个组件中的事件关联起来,例如,tomcat 服务器中的异常导致客户出现 HTTP 404。
请建议如何实现,如果不能通过 ELK 建议一些其他开源解决方案。
【问题讨论】:
标签: logging elasticsearch logstash kibana
我们使用 ELK(ElasticSearch+Logstash+Kibana) 堆栈来管理日志,但问题是 kibana 会单独显示每个组件的统计信息。 我希望将多个组件中的事件关联起来,例如,tomcat 服务器中的异常导致客户出现 HTTP 404。
请建议如何实现,如果不能通过 ELK 建议一些其他开源解决方案。
【问题讨论】:
标签: logging elasticsearch logstash kibana
您需要在特定事件之间添加连接。没有什么是开箱即用的。您必须自己添加它,这取决于您操作的系统类型。
PHP
您可以使用mod_unique_id 创建由您的 Apache 服务器创建的唯一请求 ID。此 id 可在您的 PHP 环境中用于日志记录 ($_SERVER['UNIQUE_ID'])。另见 [1]
Java
如果您使用 Java,我更喜欢稍微不同的方法。在您的应用程序中生成用于识别特定请求的请求 ID。您可以将请求 ID 添加到您的 MDC(消息诊断上下文)中。 MDC 可以由各种 GELF 连接器连同日志消息一起提交给 logstash。在您的 HTTP 响应中也使用请求 ID 作为 Apache 的标头。您可以在 Apache 访问日志中记录响应标头。 Java部分见[2]。
一般来说,如果您的环境包含的不仅仅是 Apache 和应用程序服务器,则值得在系统内的所有调用中传递 RequestId(也可能是 SessionId)。通过这种方式,您可以关联请求/会话中的所有活动。
链接
【讨论】: