当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《从多个服务器聚合多个日志文件的最佳方法》经验,为你挑选了3个好方法。

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

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

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

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

还有其他更简单的方法吗?我是否应该尝试将日志文件转换为log4j格式以与Chainsaw一起使用,或者是否有更好的日志查看器可以连接到远程套接字?我可以按照另一个日志问题的建议使用BareTail吗?这不是一个大规模分布式系统,并且不能将所有应用程序的当前日志记录实现更改为使用UDP广播或将消息放在JMS队列上.



1> mrm..:

对于实时日志监视来说,最轻量级的解决方案可能是使用带有tail -f的并发模式的Dancer shell:

dsh -Mac -- tail -f /var/log/apache/*.log

-a适用于您在〜/ .dsh/machines.list中定义的所有计算机名称

-c用于并发运行尾部

-M将主机名添加到每行输出.


电脑赞助

2> masukomi..:

我们使用一个简单的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



3> 小智..:

Logscape - 像没有价格标签的splunk

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有