はじめに
このプロジェクトでは、Nginx サーバーのアクセス ログのログ分析を行う方法を学びます。アクセス回数による上位の IP アドレス、サーバーに少なくとも 10 回アクセスした IP アドレス、最も多くアクセスされた要求、および 404 ステータスの要求アドレスなど、ログから貴重な情報を取得します。
🎯 タスク
このプロジェクトでは、以下を学びます。
- 特定の日付からアクセス回数が最も多い 5 つの IP アドレスを取得する方法
- 特定の日付範囲内でサーバーに少なくとも 10 回アクセスしたすべての IP アドレスを見つける方法
- 静的ファイルとリソースを除外して、ログ ファイルから最も多くアクセスされた 10 個の要求を取得する方法
- ログ ファイルから 404 ステータスのすべての要求アドレスを書き込む方法
🏆 成果
このプロジェクトを完了すると、以下ができるようになります。
- Nginx アクセス ログから意味のある情報を分析して抽出する
- シェル スクリプトを使ってログ分析タスクを自動化する
- フィルタリング、ソート、カウントなどの一般的なログ分析手法を理解して適用する
- 分析結果を構造化された方法で管理して整理する
2015 年 4 月 10 日以降の最も多くのアクセス回数を持つ 5 つの IP アドレスを取得する
このステップでは、2015 年 4 月 10 日のaccess.logファイルから最も多くアクセスされた 5 つの IP アドレスを取得する方法を学びます。以下の手順に従ってこのステップを完了します。
- ターミナルを開き、
/home/labex/projectディレクトリに移動します。 - 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ファイルにリダイレクトします。
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 アドレスを見つける方法を学びます。以下の手順に従ってこのステップを完了します。
- 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ファイルにリダイレクトします。
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 個の要求を取得する方法を学びます。以下の手順に従ってこのステップを完了します。
- ログ ファイルから最も多くアクセスされた 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ファイルにリダイレクトします。
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 ファイルに書き込む方法を学びます。以下の手順に従ってこのステップを完了します。
- ログ ファイルから 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ファイルにリダイレクトします。
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 でさらに多くの実験を行って練習してください。



