私は Dreamhost VPS でいくつか (約 20) のサイトを運営しています。最近、VPS のメモリ割り当てが最大になってしまい、問題を見つけたいと思っています。
すべてのドメインのすべてのログ ファイルをスキャンし、どのオブジェクト (画像、PHP スクリプトなど) が頻繁に呼び出されるかを表示する SSH スクリプトが必要です。
各 /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 を集約し、それぞれのアクセス回数で並べ替えたリストにすぎません。
同じ 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 ベースの分析ツールまで、複数の選択肢があります。
以下に、役立つ Cisco Systems の優れたホワイトペーパーへのリンクを示します。
答え3
この手動のトリッキーな解決策の代わりに、次のようなツールを使用することをお勧めします。スプランクサーバ。
Splunk は実に素晴らしいログ分析ツールであり、アラートを含め、あらゆる方法でログを分析できます。
Splunk は、物理、仮想、クラウドを問わず、複雑な IT インフラストラクチャによって生成される膨大な量の貴重なマシン データを収集、インデックス化し、活用します。