从多个服务器聚合多个日志文件的最佳方法[关闭]
-
01-07-2019 - |
题
我需要一种简单的方法来监视分布在多个 HP-UX 服务器上的多个文本日志文件。它们是来自多个分布式遗留系统的文本和 XML 日志文件的混合。目前我们只需 ssh 到服务器并使用 尾部-f 和 grep, ,但是当您有许多日志需要跟踪时,这种情况就无法扩展。
由于日志采用不同的格式,并且只是文件夹中的文件(当它们达到一定大小时自动旋转),我需要远程收集它们并以不同的方式解析每个文件。
我最初的想法是制作一个简单的守护进程,我可以在每个服务器上运行该进程,使用每种文件类型的自定义文件读取器将其解析为可以通过套接字通过网络导出的通用格式。本地运行的另一个查看器程序将连接到这些套接字,并在一些简单的选项卡式 GUI 中显示解析的日志或聚合到控制台。
如果我要以这种方式实现,我应该尝试转换为什么日志格式?
还有其他更简单的方法吗?我是否应该尝试将日志文件转换为 log4j 格式以供使用 电锯 或者是否有更好的日志查看器可以连接到远程套接字?我可以使用 裸尾 如建议的 另一个日志问题?这不是一个 大规模分布式系统 并且无法更改所有应用程序的当前日志记录实现以使用 UDP 广播或将消息放入 JMS 队列。
解决方案
选项:
- 使用 SocketAppender 将所有日志直接发送到 1 个服务器。(这可能会严重影响性能并增加单点故障。)
- 使用脚本来聚合数据。我使用 scp、ssh 和身份验证密钥来允许我的脚本从所有服务器获取数据,而无需任何登录提示。
其他提示
实时日志监视的最轻量级解决方案可能是使用 舞者的贝壳 在并发模式下使用 tail -f:
dsh -Mac -- tail -f /var/log/apache/*.log
- -a 适用于您在 ~/.dsh/machines.list 中定义的所有计算机名称
- -c 用于并发运行 tail
- -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杀死尾巴的评论,我将上面存储在一个名为MultitiTails.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
逻辑景观 - 就像没有价格标签的 splunk
我编写 vsConsole 正是为了这个目的 - 轻松访问日志文件 - 然后添加应用程序监控和版本跟踪。想知道您对此有何看法。 http://vs-console.appspot.com/
awstats 提供了一个 perl 脚本,可以将多个 apache 日志文件合并在一起。该脚本可以很好地扩展,因为内存占用非常低,日志文件永远不会加载到内存中。我知道这并不完全是您所需要的,但也许您可以从这个脚本开始并根据您的需要进行调整。
您可以使用 Chainsaw 提供的各种接收器(VFSLogFilePatternReceiver 通过 ssh、SocketReceiver、UDPReceiver、CustomSQLDBReceiver 等跟踪文件),然后通过更改默认选项卡标识符或通过提供创建“自定义表达式日志面板”将日志聚合到单个选项卡中与各个源选项卡中的事件相匹配的表达式。
gltail - 使用 Ruby、SSH 和 OpenGL 从多个服务器实时可视化服务器流量、事件和统计数据
XpoLog 对于Java