我需要一种简单的方法来监视分布在许多HP-UX服务器上的多个文本日志文件.它们是来自多个分布式遗留系统的文本和XML日志文件的混合.目前我们只是ssh到服务器并使用tail -f和grep,但是当你有许多日志要跟踪时,这不会扩展.
由于日志采用不同的格式,文件只是文件夹(当达到一定大小时自动旋转),我需要远程收集它们并以不同的方式解析每个文件.
我最初的想法是创建一个简单的守护进程,我可以在每个服务器上运行每个文件类型的自定义文件阅读器,将其解析为可以通过套接字通过网络导出的通用格式.在本地运行的另一个查看器程序将连接到这些套接字,并在一些简单的选项卡式GUI中显示已解析的日志或聚合到控制台.
如果我以这种方式实现它,我应该尝试转换为什么日志格式?
还有其他更简单的方法吗?我是否应该尝试将日志文件转换为log4j格式以与Chainsaw一起使用,或者是否有更好的日志查看器可以连接到远程套接字?我可以按照另一个日志问题的建议使用BareTail吗?这不是一个大规模分布式系统,并且不能将所有应用程序的当前日志记录实现更改为使用UDP广播或将消息放在JMS队列上.
对于实时日志监视来说,最轻量级的解决方案可能是使用带有tail -f的并发模式的Dancer shell:
dsh -Mac -- tail -f /var/log/apache/*.log
-a适用于您在〜/ .dsh/machines.list中定义的所有计算机名称
-c用于并发运行尾部
-M将主机名添加到每行输出.
我们使用一个简单的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
Logscape - 像没有价格标签的splunk