logging - 分布式环境中日志事件的相关性

标签 logging elasticsearch logstash kibana

我们使用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 。

链接

  • [1] How can I access Unique ID in apache?
  • [2] http://www.paluch.biz/blog/91-tracking-requests-in-a-distributed-environment.html
  • 关于logging - 分布式环境中日志事件的相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26113938/

    相关文章:

    mongodb - 在Logstash管道中将mongodb _id对象转换或转换为字符串

    elasticsearch - logstash cron 计划从特定时间开始每 12 小时运行一次

    java - 动态创建 Logback Loggers 和 Appenders

    docker - Tomcat、Docker、日志记录和 STDOUT?

    scala - elastic4s不退出

    elasticsearch - Kibana管道聚合

    elasticsearch - 默认情况下, Elasticsearch 在一台机器上创建多少个节点

    elasticsearch - Kibana 使用列表中的查询创建多个图表

    elasticsearch - Filebeat可以用空格来剖析日志行吗?

    java - 在Java中-我可以设置线程的日志级别吗?