Nginx のログ分析と最適化

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

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

🎯 タスク

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

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

🏆 成果

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

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

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/TextProcessingGroup -.-> linux/awk("Text Processing") linux/TextProcessingGroup -.-> linux/sort("Text Sorting") linux/TextProcessingGroup -.-> linux/uniq("Duplicate Filtering") subgraph Lab Skills linux/grep -.-> lab-301477{{"Nginx のログ分析と最適化"}} linux/awk -.-> lab-301477{{"Nginx のログ分析と最適化"}} linux/sort -.-> lab-301477{{"Nginx のログ分析と最適化"}} linux/uniq -.-> lab-301477{{"Nginx のログ分析と最適化"}} end

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でさらに多くの実験を行って練習してください。