我们使用ELK(ElasticSearch + Logstash + Kibana)堆栈进行日志管理,但是问题是,kibana分别显示每个组件的统计信息。
我想让多个组件中的事件相互关联,例如,tomcat服务器中的异常,为客户带来了HTTP 404。
请提出如何实现的建议,如果无法通过ELK提出建议,请提出其他一些开源解决方案。
最佳答案
您需要在特定事件之间添加连接。没有什么是开箱即用的。您必须自己添加它,这取决于您使用哪种系统。
PHP
您可以使用mod_unique_id
创建由Apache服务器创建的唯一请求ID。该ID可以在您的PHP环境中用于日志记录($_SERVER['UNIQUE_ID']
)。另请参阅[1]
Java
如果您使用Java,则我希望使用稍微不同的方法。在您的应用程序中生成用于标识特定请求的请求ID。您可以将请求ID添加到MDC(消息诊断上下文)中。 MDC可以由各种GELF连接器连同向logstash发送的日志消息一起提交。还在HTTP响应中将请求ID用作Apache的 header 。您可以将响应 header 记录在Apache访问日志中。有关Java部分,请参见[2]。
通常,如果您的环境不仅仅包含Apache和Application服务器,则值得在系统中的所有调用之间传递RequestId(也许是SessionId)。这样,您可以关联请求/ session 中的所有 Activity 。
链接
关于logging - 分布式环境中日志事件的相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26113938/