Nginx-Loganalyse und -Optimierung

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Projekt lernst du, wie du eine Log-Analyse auf den Zugangsprotokollen eines Nginx-Servers durchführst. Du wirst wertvolle Informationen aus den Protokollen extrahieren, wie die Top-IP-Adressen nach Zugangszählung, die IP-Adressen, die den Server mindestens 10 Mal erreicht haben, die am häufigsten aufgerufenen Anforderungen und die Anforderungsadressen mit einem 404-Zustand.

🎯 Aufgaben

In diesem Projekt wirst du lernen:

  • Wie du die 5 IP-Adressen mit der höchsten Anzahl an Zugängen ab einem bestimmten Datum abrufen
  • Wie du alle IP-Adressen findest, die den Server innerhalb eines angegebenen Datumsbereichs mindestens 10 Mal erreicht haben
  • Wie du die zehn am häufigsten aufgerufenen Anforderungen aus der Log-Datei abrufst, wobei statische Dateien und Ressourcen ausgeschlossen werden
  • Wie du alle Anforderungsadressen mit einem 404-Zustand aus der Log-Datei schreibst

🏆 Errungenschaften

Nach Abschluss dieses Projekts wirst du in der Lage sein:

  • Log-Analysen von Nginx-Zugangsprotokollen durchzuführen und sinnvolle Informationen zu extrahieren
  • Log-Analysetasks mit Shell-Scripting zu automatisieren
  • Gemeinsame Log-Analysetechniken wie Filtern, Sortieren und Zählen zu verstehen und anzuwenden
  • Die Analyseergebnisse strukturiert zu verwalten und zu organisieren

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-Loganalyse und -Optimierung"}} linux/awk -.-> lab-301477{{"Nginx-Loganalyse und -Optimierung"}} linux/sort -.-> lab-301477{{"Nginx-Loganalyse und -Optimierung"}} linux/uniq -.-> lab-301477{{"Nginx-Loganalyse und -Optimierung"}} end

Die 5 IP-Adressen mit der höchsten Anzahl an Zugängen ab dem 10. April 2015 abrufen

In diesem Schritt lernst du, wie du die 5 IP-Adressen mit der höchsten Anzahl an Zugängen aus der access.log-Datei ab dem 10. April 2015 abrufst. Folge den Schritten unten, um diesen Schritt abzuschließen:

  1. Öffne das Terminal und navigiere zum Verzeichnis /home/labex/project.
  2. Verwende den folgenden Befehl, um die 5 IP-Adressen mit der höchsten Anzahl an Zugängen ab dem 10. April 2015 abzurufen:
grep '10/Apr/2015' access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -5 | awk '{print $2}' > output1

Dieser Befehl macht Folgendes:

  • grep '10/Apr/2015' access.log: Filtert die Log-Datei, um nur Zeilen aus dem 10. April 2015 zu enthalten.
  • awk '{print $1}': Extrahiert die IP-Adresse (das erste Feld) aus jeder Log-Zeile.
  • sort: Sortiert die IP-Adressen.
  • uniq -c: Zählt die Anzahl der Vorkommen jeder IP-Adresse.
  • sort -rn: Sortiert die IP-Adressen nach der Anzahl in absteigender Reihenfolge.
  • head -5: Wählt die obersten 5 IP-Adressen aus.
  • awk '{print $2}': Extrahiert die IP-Adresse (das zweite Feld) aus der sortierten und gezählten Ausgabe.
  • > output1: Leitet die Ausgabe in die output1-Datei um.
  1. Überprüfe den Inhalt der output1-Datei, um sicherzustellen, dass sie die 5 IP-Adressen mit der höchsten Anzahl an Zugängen ab dem 10. April 2015 enthält, mit einer IP-Adresse pro Zeile und keine leeren Zeilen.
216.244.66.249
216.244.66.231
140.205.225.185
140.205.201.39
140.205.201.32

Alle IP-Adressen finden, die den Server zwischen dem 11. April 2015 mindestens 10 Mal erreicht haben

In diesem Schritt lernst du, wie du alle IP-Adressen findest, die den Server zwischen dem 11. April 2015 mindestens 10 Mal erreicht haben. Folge den Schritten unten, um diesen Schritt abzuschließen:

  1. Verwende den folgenden Befehl, um alle IP-Adressen zu finden, die den Server zwischen dem 11. April 2015 mindestens 10 Mal erreicht haben:
grep '11/Apr/2015' access.log | awk '{print $1}' | sort | uniq -c | awk '$1 >= 10 {print $2}' > output2

Dieser Befehl macht Folgendes:

  • grep '11/Apr/2015' access.log: Filtert die Log-Datei, um nur Zeilen aus dem 11. April 2015 zu enthalten.
  • awk '{print $1}': Extrahiert die IP-Adresse (das erste Feld) aus jeder Log-Zeile.
  • sort: Sortiert die IP-Adressen.
  • uniq -c: Zählt die Anzahl der Vorkommen jeder IP-Adresse.
  • awk '$1 >= 10 {print $2}': Filtert die IP-Adressen, die eine Anzahl von 10 oder mehr haben, und druckt die IP-Adresse (das zweite Feld).
  • > output2: Leitet die Ausgabe in die output2-Datei um.
  1. Überprüfe den Inhalt der output2-Datei, um sicherzustellen, dass sie alle IP-Adressen enthält, die den Server zwischen dem 11. April 2015 mindestens 10 Mal erreicht haben, mit einer IP-Adresse pro Zeile und keine leeren Zeilen.
108.245.182.93
123.127.3.30
140.205.201.39
216.244.66.231
216.244.66.249
218.75.230.17

Die zehn am häufigsten aufgerufenen Anforderungen aus der Log-Datei abrufen

In diesem Schritt lernst du, wie du die zehn am häufigsten aufgerufenen Anforderungen aus der access.log-Datei abrufst, wobei statische Dateien, Bilder oder ähnliche Ressourcen ausgeschlossen werden. Folge den Schritten unten, um diesen Schritt abzuschließen:

  1. Verwende den folgenden Befehl, um die zehn am häufigsten aufgerufenen Anforderungen aus der Log-Datei abzurufen:
grep -vE '(/robots.txt|\.js|\.css|\.png)' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -10 | awk '{print $2}' > output3

Dieser Befehl macht Folgendes:

  • grep -vE '(/robots.txt|\.js|\.css|\.png)' access.log: Filtert die Log-Datei, um Zeilen auszuschließen, die /robots.txt, .js, .css oder .png enthalten.
  • awk '{print $7}': Extrahiert die Anforderungsadresse (das siebte Feld) aus jeder Log-Zeile.
  • sort: Sortiert die Anforderungsadressen.
  • uniq -c: Zählt die Anzahl der Vorkommen jeder Anforderungsadresse.
  • sort -rn: Sortiert die Anforderungsadressen nach der Anzahl in absteigender Reihenfolge.
  • head -10: Wählt die obersten 10 Anforderungsadressen aus.
  • awk '{print $2}': Extrahiert die Anforderungsadresse (das zweite Feld) aus der sortierten und gezählten Ausgabe.
  • > output3: Leitet die Ausgabe in die output3-Datei um.
  1. Überprüfe den Inhalt der output3-Datei, um sicherzustellen, dass sie die zehn am häufigsten aufgerufenen Anforderungen aus der Log-Datei enthält, mit einer Anforderungsadresse pro Zeile und keine leeren Zeilen.
/
/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

Alle Anforderungsadressen mit einem 404-Zustand aus der Log-Datei schreiben

In diesem Schritt lernst du, wie du alle Anforderungsadressen mit einem 404-Zustand aus der access.log-Datei in die output4-Datei schreibst. Folge den Schritten unten, um diesen Schritt abzuschließen:

  1. Verwende den folgenden Befehl, um alle Anforderungsadressen mit einem 404-Zustand aus der Log-Datei in die output4-Datei zu schreiben:
grep ' 404 ' access.log | awk '{print $7}' | sort | uniq > output4

Dieser Befehl macht Folgendes:

  • grep ' 404 ' access.log: Filtert die Log-Datei, um nur Zeilen zu enthalten, die einen 404-Zustands-Code enthalten.
  • awk '{print $7}': Extrahiert die Anforderungsadresse (das siebte Feld) aus jeder Log-Zeile.
  • sort: Sortiert die Anforderungsadressen.
  • uniq: Entfernt alle doppelten Anforderungsadressen.
  • > output4: Leitet die Ausgabe in die output4-Datei um.
  1. Überprüfe den Inhalt der output4-Datei, um sicherzustellen, dass sie alle Anforderungsadressen mit einem 404-Zustand aus der Log-Datei enthält, mit einer Anforderungsadresse pro Zeile und keine Duplikate.
/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
 ...
✨ Lösung prüfen und üben

Zusammenfassung

Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Labs absolvieren, um deine Fähigkeiten zu verbessern.