Logging 从多个服务器聚合多个日志文件的最佳方法

Logging 从多个服务器聚合多个日志文件的最佳方法,logging,log4j,monitoring,distributed,Logging,Log4j,Monitoring,Distributed,我需要一种简单的方法来监视分布在多个HP-UX服务器上的多个文本日志文件。它们是来自多个分布式遗留系统的文本和XML日志文件的混合体。目前,我们只使用ssh连接到服务器,并使用tail-f和grep,但当您有许多日志需要跟踪时,这并不能扩展 由于日志的格式不同,只是文件夹中的文件(当它们达到一定大小时会自动旋转),因此我需要远程收集它们,并以不同的方式解析每个日志 我最初的想法是创建一个简单的守护进程,我可以在每台服务器上运行该进程,为每种文件类型使用一个自定义文件读取器,将其解析为一种通用格式

我需要一种简单的方法来监视分布在多个HP-UX服务器上的多个文本日志文件。它们是来自多个分布式遗留系统的文本和XML日志文件的混合体。目前,我们只使用ssh连接到服务器,并使用tail-f和grep,但当您有许多日志需要跟踪时,这并不能扩展

由于日志的格式不同,只是文件夹中的文件(当它们达到一定大小时会自动旋转),因此我需要远程收集它们,并以不同的方式解析每个日志

我最初的想法是创建一个简单的守护进程,我可以在每台服务器上运行该进程,为每种文件类型使用一个自定义文件读取器,将其解析为一种通用格式,并通过套接字通过网络导出。本地运行的另一个查看器程序将连接到这些套接字,并在一些简单的选项卡式GUI中显示解析的日志,或聚合到控制台

如果要以这种方式实现,我应该尝试转换为什么日志格式


还有其他更简单的方法吗?我是否应该尝试将日志文件转换为log4j格式以与一起使用,或者是否有更好的日志查看器可以连接到远程套接字?我可以按中的建议使用吗?这不是一个好主意,将所有应用程序的当前日志记录实现更改为使用UDP广播或将消息放入JMS队列不是一个选项。

Awstats提供了一个可以将多个apache日志文件合并在一起的perl脚本。由于内存占用非常少,所以此脚本的扩展性很好,日志文件从未加载到内存中。 我知道si不完全是您需要的,但也许您可以从这个脚本开始,并根据您的需要调整它。

选项:

  • 使用SocketAppender将所有日志直接发送到1台服务器。(这可能严重影响性能并增加单点故障。)
  • 使用脚本聚合数据。我使用scp、ssh和身份验证密钥来允许脚本从所有服务器获取数据,而无需任何登录提示

  • 我们使用一个简单的shell脚本,如下所示。显然,您必须对它进行一些调整,以告诉它不同的文件名,并决定在哪个框中查找哪个,但您得到了基本的想法。在本例中,我们在多个框的同一位置跟踪一个文件。这需要通过存储的密钥进行ssh身份验证,而不是键入密码

    #!/bin/bash
    FILE=$1
    for box in box1.foo.com box2.foo.com box3.foo.com box4.foo.com; do
         ssh $box tail -f $FILE &
    done
    
    关于Mike Funk关于不能 用^C杀死拖尾,我将上述内容存储在一个名为multitails.sh的文件中 并在其末尾附加以下内容。这将创建kill_multitails.sh文件 当您完成跟踪后运行,然后它会删除自身

    # create a bash script to kill off 
    # all the tails when you're done
    # run kill_multitails.sh when you're finished
    
    echo '#!/bin/sh' > kill_multitails.sh
    chmod 755 kill_multitails.sh
    echo "$(ps -awx | grep $FILE)" > kill_multitails_ids
    perl -pi -e 's/^(\d+).*/kill -9 $1/g' kill_multitails_ids
    cat kill_multitails_ids >> kill_multitails.sh
    echo "echo 'running ps for it'" >> kill_multitails.sh
    echo "ps -awx | grep $FILE" >> kill_multitails.sh
    echo "rm kill_multitails.sh" >> kill_multitails.sh
    rm kill_multitails_ids
    
    
    wait
    

    您可以使用链锯提供的各种接收器(VFSLogFilePatternReceiver通过ssh、SocketReceiver、udpreciver、CustomSQLDBReceiver等跟踪文件)然后通过更改默认选项卡标识符或通过提供与各个源选项卡中的事件匹配的表达式来创建“自定义表达式日志面板”,将日志聚合到单个选项卡中。

    gltail-使用Ruby实时可视化服务器流量、事件和统计信息,来自多个服务器的SSH和OpenGL可能最轻的实时日志监视解决方案是在并发模式下使用tail-f:

    dsh -Mac -- tail -f /var/log/apache/*.log
    
    • -a表示在~/.dsh/machines.list中定义的所有机器名
    • -c用于tail的并发运行
    • -M在输出的每一行前面加上主机名
      • 适用于Java

        “是供系统管理员和开发人员使用的本地和远程日志解析和监视工具。
        它将swatch、tee、tail、grep、ccze和mail的功能整合在一起,并添加了一些附加功能”

        例如

        芯片-f-m0='RUN'-s0='red'-m1='.'-s1'-user1@remote_ip1:“/var/log/log1/var/log/log2/var/log/log3 user2@remote_ip2:“/var/log/log1/var/log/log2/var/log/log3”“| egrep”运行|==>/”

        这将以红色突出显示-m0模式的出现,
        从所有日志文件中预筛选“RUN |==>/”模式。

        -就像没有价格标签的splunk一样

        我编写vsConsole正是为了这个目的-方便访问日志文件-然后添加了应用程序监控和版本跟踪。我想知道你对它的看法

        glTail很酷,但我更追求一种简单高效的方式来聚合日志文件以搜索和过滤它们。在我现在使用的应用程序中,我们通过共享日志的有趣部分(异常、服务器负载和用户统计)并在管理员用户的内部状态页面上显示它们,解决了这个问题。比跟踪嘈杂的日志文件工作得更好。请参阅?它有大量的输入、输出和筛选选项。由 这太棒了,谢谢!如果在
        dsh.conf
        中指定了
        remoteshell=ssh
        或作为参数传递,即
        -r ssh
        ,则dsh可以使用
        ~/.ssh/config
        。您还可以创建组定义(至少在主文件夹中安装brew版本,例如~/.dsh/group/prod.web)并稍微修改命令:
        dsh-Mc-g prod.web
        。嘿,这个项目仍然处于活动状态吗?当我进入你的网站并点击下载和文档时,它会打开一个谷歌硬盘共享,但我在其中看到的唯一文件是一个EULA。嗨,我从来没有得到任何鼓励来继续这个项目,所以没有-它已经多年没有被激活了。我不确定下载链接发生了什么(上面的链接似乎对我有效,即使我没有登录),但你应该看到vsConsole的一个文件夹,其中有一个下载文件夹-试试这个-现在有很多选项来解决这个问题,例如