使用 SSH 在多个域的日志中查找对有问题的脚本的访问

使用 SSH 在多个域的日志中查找对有问题的脚本的访问

我在 Dreamhost VPS 上运行了几个(约 20 个)网站。最近我为 VPS 分配了最大的内存,我想找出问题所在。

我想要一个 SSH 脚本,它可以扫描所有域的所有日志文件并向我显示哪些对象(图像、php 脚本等)获得大量调用。

它将计算每个 /logs/*/http/access.log 中的调用次数,按降序排序,并显示跨域的前 10 个调用。

但我不知道该怎么做。

能做到吗?

有人能建议一个可以做到这一点的脚本吗?

答案1

您要求脚本“...计算每个 /logs/*/http/access.log 中的调用次数,按降序排序并显示跨域的前 10 个调用。”可以通过以下命令实现:

grep -o " /[^ ]*" /logs/*/http/access.log | sort | uniq -c | sort -rn | head

但您可以从 AWStats 或 Google Analytics 获得相同的信息。它实际上只是所有 URL 的列表,这些 URL 经过汇总并按每个 URL 的访问次数进行排序。

可以使用相同模式的 Unix 命令来汇总 PHP 错误和 Apache 错误,这可能在您的特定情况下更有用。例如以下内容:

grep -o " PHP.*" /logs/*/php/error.log | sort | uniq -c | sort -rn | head

将从您的 php 错误日志 (我猜您可能将其保存在哪里) 中查找所有 PHP 错误,并列出 10 个最常见的错误。

另一个有用的是:

grep -o " PHP Fatal error: Allowed memory size.*" /logs/*/php/error.log | sed 's/tried to allocate [0-9]* bytes/tried to allocate N bytes/' | sort | uniq -c | sort -rn | head

它将找到所有内存不足的错误并将它们组合在一起。

答案2

我建议您不要采用这种方法,而是考虑设置一个集中式日志服务器。您可以选择多种方式,从旧的基于文件的存储到更多基于 Web 的分析工具,这些工具将日志存储到数据库中,并允许您搜索它们、创建图表/图形等。

以下是思科系统公司提供的一份很棒的白皮书的链接,希望对您有所帮助:

构建可扩展的 Syslog 管理解决方案

答案3

我建议你不要使用这种手动的棘手解决方案,而是使用类似的工具Splunk服务器。

Splunk 实际上是一个很棒的日志分析工具,您可以用任何可能的方式分析日志,甚至可以使用警报。

Splunk 收集、索引和利用由您的复杂 IT 基础设施(无论是物理、虚拟还是云端)生成的大量有价值的机器数据。

相关内容