使用 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 分析中獲得相同的資訊。它實際上只是所有 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 的分析工具,這些工具將日誌儲存到資料庫中並讓您搜尋它們、建立圖表/圖形等。

以下是思科系統公司精彩白皮書的鏈接,該白皮書將有所幫助:

建置可擴展的系統日誌管理解決方案

答案3

我建議您使用類似的工具,而不是這個手動棘手的解決方案史普朗克伺服器.

Splunk 實際上是一個令人驚嘆的日誌分析工具,您可以在其中以任何您想要的方式分析日誌,甚至可以使用警報。

Splunk 收集、索引和利用複雜 IT 基礎架構(無論是實體、虛擬或雲端)產生的大量有價值的機器資料。

相關內容