【问题标题】:Logs from load-balanced servers来自负载平衡服务器的日志
【发布时间】:2009-12-16 18:38:16
【问题描述】:

如果这听起来像是一个基本问题,请原谅,但我是 Web 开发的新手。

我们在多台服务器之间进行负载平衡。这些应用程序配置为使用 log4j 进行日志记录。他们每个人都写入各自服务器上的日志文件。这意味着研究问题意味着从所有这些服务器获取日志,这很乏味,并且意味着在控制负载平衡时要通过 Ops,并引入延迟。

这是 Web 应用程序日志记录的标准吗?或者有没有简单的解决方案将日志整合到一个地方?让开发人员轻松访问日志的标准做法是什么?

【问题讨论】:

  • 对我来说这看起来像是一个 ServerFault 问题。

标签: logging log4j


【解决方案1】:

使用JDBC appender(或alternative version)而不是文件记录到SQL。

【讨论】:

    【解决方案2】:

    您可以执行多种日志记录,并且这些记录是自动可用的。

    一些类型是:

    • 记录到内置机器日志(事件日志或类似日志)。
      对于这些,请获得访问权限,以便您可以远程访问它们,并根据需要进行整理/检查。
    • 由通常记录到本地计算机上的文本文件的应用程序进行记录。 (IIS 或其他。)
      获得对文件夹的访问权限,以便您自己分析这些文件夹。
    • 自定义日志记录。
      我建议登录到数据库。 (尽管这些需要经常修剪/总结。)
      如果记录到数据库失败,则会记录到机器日志。
      注意:这可能会对性能产生影响,因此请注意您的日志记录量。

    如果操作部门不愿意让您直接访问,请查看是否可以将这些文件的常规转储到您可以访问的位置。

    【讨论】:

      【解决方案3】:

      Log4J 既有 JMS appender(因此您可以将日志发送到消息队列 - 不像听起来那么愚蠢,具体取决于您需要执行多少/哪种处理!)和一个 syslog appender(本地或远程)。其中任何一个都将帮助您在一个位置收集日志。 Syslog appender 可能是您最好的选择,因为 Unix-ish 系统已经在很长时间内使用 syslog 并且您可以利用其中许多稳定的功能来在一个地方收集东西。

      记录到数据库可能很难根据您的流量进行扩展,除非您对批处理插入很聪明。我建议您将这些东西保存在平面文件中(当然是合并的),这样您就可以灵活地将它们一次性导入数据库,或者尝试使用Hadoop 之类的东西(很多基于解析日志文件的示例) ) - 当然,前提是您有足够的数量来证明这种复杂性。

      【讨论】:

        【解决方案4】:

        我们有一个具有强大日志记录的网络农场,下面是它的实现方式。

        每个 Web 应用程序都会生成日志记录事件消息。使用 MSMQ,这些消息被发送到托管在单独机器上的专用队列。这台机器有一个应用程序将消息出列并将它们写入 Sqlite 数据库。

        使用 MSMQ 将 Web 应用程序与日志服务器分离。如果服务器处于离线状态,则消息将保留在 Web 服务器上,直到重新建立连接。 MSMQ 处理将消息移动到目标服务器。这样,网站就可以继续做它的事情而不会中断。

        日志服务器有自己的 Web 界面来查询日志数据库,也可以接收来自其他应用程序的日志消息。

        我们为每条消息分配一个分类。对于具有致命错误分类的消息,日志服务器会自动生成一封电子邮件给支持团队。其他非致命消息和跟踪消息仅记录到数据库中以进行汇总报告。

        【讨论】:

          【解决方案5】:

          使日志更易于访问的一个可能选项是将它们写入通过 NFS 共享的驱动器。您可以对每台服务器的单独目录进行一些处理,但同时让这两个目录在您要评估日志的服务器上都可见。

          【讨论】:

            猜你喜欢
            • 2012-10-02
            • 1970-01-01
            • 2010-10-23
            • 2013-10-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-04-01
            • 1970-01-01
            相关资源
            最近更新 更多