Nginx のログ分析と最適化

LinuxBeginner
オンラインで実践に進む

はじめに

このプロジェクトでは、Nginx サーバーのアクセス ログのログ分析を行う方法を学びます。アクセス回数による上位の IP アドレス、サーバーに少なくとも 10 回アクセスした IP アドレス、最も多くアクセスされた要求、および 404 ステータスの要求アドレスなど、ログから貴重な情報を取得します。

🎯 タスク

このプロジェクトでは、以下を学びます。

  • 特定の日付からアクセス回数が最も多い 5 つの IP アドレスを取得する方法
  • 特定の日付範囲内でサーバーに少なくとも 10 回アクセスしたすべての IP アドレスを見つける方法
  • 静的ファイルとリソースを除外して、ログ ファイルから最も多くアクセスされた 10 個の要求を取得する方法
  • ログ ファイルから 404 ステータスのすべての要求アドレスを書き込む方法

🏆 成果

このプロジェクトを完了すると、以下ができるようになります。

  • Nginx アクセス ログから意味のある情報を分析して抽出する
  • シェル スクリプトを使ってログ分析タスクを自動化する
  • フィルタリング、ソート、カウントなどの一般的なログ分析手法を理解して適用する
  • 分析結果を構造化された方法で管理して整理する

2015 年 4 月 10 日以降の最も多くのアクセス回数を持つ 5 つの IP アドレスを取得する

このステップでは、2015 年 4 月 10 日のaccess.logファイルから最も多くアクセスされた 5 つの IP アドレスを取得する方法を学びます。以下の手順に従ってこのステップを完了します。

  1. ターミナルを開き、/home/labex/projectディレクトリに移動します。
  2. 2015 年 4 月 10 日から最も多くアクセスされた 5 つの IP アドレスを取得するには、次のコマンドを使用します。
grep '10/Apr/2015' access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -5 | awk '{print $2}' > output1

このコマンドは次のように機能します。

  • grep '10/Apr/2015' access.log:2015 年 4 月 10 日の行のみを含むようにログファイルをフィルタリングします。
  • awk '{print $1}':各ログ行から IP アドレス(最初のフィールド)を抽出します。
  • sort:IP アドレスをソートします。
  • uniq -c:各 IP アドレスの出現回数をカウントします。
  • sort -rn:カウント数を降順にソートして IP アドレスを並べ替えます。
  • head -5:上位 5 つの IP アドレスを選択します。
  • awk '{print $2}':ソート済みでカウントされた出力から IP アドレス(2 番目のフィールド)を抽出します。
  • > output1:出力をoutput1ファイルにリダイレクトします。
  1. output1ファイルの内容を確認して、2015 年 4 月 10 日から最も多くアクセスされた 5 つの IP アドレスが含まれていることを確認します。1 行に 1 つの IP アドレスがあり、空行はありません。
216.244.66.249
216.244.66.231
140.205.225.185
140.205.201.39
140.205.201.32

2015 年 4 月 11 日以降にサーバーに少なくとも 10 回アクセスしたすべての IP アドレスを見つける

このステップでは、2015 年 4 月 11 日からサーバーに少なくとも 10 回アクセスしたすべての IP アドレスを見つける方法を学びます。以下の手順に従ってこのステップを完了します。

  1. 2015 年 4 月 11 日からサーバーに少なくとも 10 回アクセスしたすべての IP アドレスを見つけるには、次のコマンドを使用します。
grep '11/Apr/2015' access.log | awk '{print $1}' | sort | uniq -c | awk '$1 >= 10 {print $2}' > output2

このコマンドは次のように機能します。

  • grep '11/Apr/2015' access.log:2015 年 4 月 11 日の行のみを含むようにログファイルをフィルタリングします。
  • awk '{print $1}':各ログ行から IP アドレス(最初のフィールド)を抽出します。
  • sort:IP アドレスをソートします。
  • uniq -c:各 IP アドレスの出現回数をカウントします。
  • awk '$1 >= 10 {print $2}':カウントが 10 以上の IP アドレスをフィルタリングし、IP アドレス(2 番目のフィールド)を出力します。
  • > output2:出力をoutput2ファイルにリダイレクトします。
  1. output2ファイルの内容を確認して、2015 年 4 月 11 日からサーバーに少なくとも 10 回アクセスしたすべての IP アドレスが含まれていることを確認します。1 行に 1 つの IP アドレスがあり、空行はありません。
108.245.182.93
123.127.3.30
140.205.201.39
216.244.66.231
216.244.66.249
218.75.230.17

ログ ファイルから最も多くアクセスされた 10 個の要求を取得する

このステップでは、静的ファイル、画像、または同様のリソースを除外して、access.log ファイルから最も多くアクセスされた 10 個の要求を取得する方法を学びます。以下の手順に従ってこのステップを完了します。

  1. ログ ファイルから最も多くアクセスされた 10 個の要求を取得するには、次のコマンドを使用します。
grep -vE '(/robots.txt|\.js|\.css|\.png)' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -10 | awk '{print $2}' > output3

このコマンドは次のように機能します。

  • grep -vE '(/robots.txt|\.js|\.css|\.png)' access.log/robots.txt.js.css、または.png を含む行を除外するようにログ ファイルをフィルタリングします。
  • awk '{print $7}':各ログ行から要求アドレス(7 番目のフィールド)を抽出します。
  • sort:要求アドレスをソートします。
  • uniq -c:各要求アドレスの出現回数をカウントします。
  • sort -rn:カウント数を降順にソートして要求アドレスを並べ替えます。
  • head -10:上位 10 個の要求アドレスを選択します。
  • awk '{print $2}':ソート済みでカウントされた出力から要求アドレス(2 番目のフィールド)を抽出します。
  • > output3:出力をoutput3 ファイルにリダイレクトします。
  1. output3 ファイルの内容を確認して、ログ ファイルから最も多くアクセスされた 10 個の要求が含まれていることを確認します。1 行に 1 つの要求アドレスがあり、空行はありません。
/
/j_acegi_security_check
/favicon.ico
400
/xref/linux-3.18.6/
/pmd/index.php
/pma/index.php
/phpMyAdmin/index.php
/phpmyadmin/index.php
check.best-proxies.ru:80

ログ ファイルから 404 ステータスを持つすべての要求アドレスを書き込む

このステップでは、access.log ファイルから 404 ステータスのすべての要求アドレスを output4 ファイルに書き込む方法を学びます。以下の手順に従ってこのステップを完了します。

  1. ログ ファイルから 404 ステータスのすべての要求アドレスを output4 ファイルに書き込むには、次のコマンドを使用します。
grep ' 404 ' access.log | awk '{print $7}' | sort | uniq > output4

このコマンドは次のように機能します。

  • grep ' 404 ' access.log:404 ステータス コードを含む行のみを含むようにログ ファイルをフィルタリングします。
  • awk '{print $7}':各ログ行から要求アドレス(7 番目のフィールド)を抽出します。
  • sort:要求アドレスをソートします。
  • uniq:重複する要求アドレスを削除します。
  • > output4:出力を output4 ファイルにリダイレクトします。
  1. output4 ファイルの内容を確認して、ログ ファイルから 404 ステータスのすべての要求アドレスが含まれていることを確認します。1 行に 1 つの要求アドレスがあり、重複はありません。
/about/
/cgi?2
/cgi-bin/cgiSrv.cgi
/clusters.jsf
/dfshealth.jsp
/dnieyraqcvtu
/favicon.ico
/ganglia/index.php
/hadoop/dfshealth.jsp
/history/linux-3.18.6/arch/ia64/include/asm/processor.h
/history/linux-3.18.6/arch/m68k/amiga/
/history/linux-3.18.6/arch/m68k/kernel/
/history/linux-3.18.6/arch/s390/include/asm/lowcore.h
/history/linux-3.18.6/arch/s390/kernel/entry64.S
/history/linux-3.18.6/arch/tile/kernel/intvec_64.S
/history/linux-3.18.6/arch/unicore32/include/asm/thread_info.h
/history/linux-3.18.6/arch/unicore32/include/asm/unistd.h
/history/linux-3.18.6/arch/x86/include/asm/processor.h
/history/linux-3.18.6/arch/x86/include/asm/unistd.h
/history/linux-3.18.6/arch/x86/kernel/entry_64.S
 ...

まとめ

おめでとうございます!このプロジェクトを完了しました。実力を向上させるために、LabEx でさらに多くの実験を行って練習してください。

✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習