Bericht aus Server-LogsEntwicklung & Anpassung

Ein Python-Skript, das die Zugriffslogs Ihres Webservers liest und daraus einen übersichtlichen Bericht über Seiten und Fehler macht

Meist in 15 Minuten fertigÜberarbeitungen inklusiveQualitätsprüfung
Pakete
ZahlungsschutzMehr dazu
  • Überarbeitungen im Rahmen des Pakets sind kostenlos.
  • Reagieren Sie nicht innerhalb von 3 Tagen nach der Lieferung, gilt die Arbeit automatisch als abgenommen.

Das Geld wird bei der Zahlung reserviert und erst freigegeben, wenn Sie die Arbeit abnehmen.

Ein Python-Skript, das die Zugriffslogs Ihres Webservers liest und daraus einen übersichtlichen Bericht über Seiten und Fehler macht

Beispielergebnis

Beispiel für das Standard-Paket

Monatliche Verkaufsdateien von 9 Läden in einem Excel-Bericht zusammenführen

So wird es gestartet

python merge_sales.py --month 2026-10
2026-11-02 09:14:03 INFO  Ordner: sales/2026-10, 9 Dateien gefunden
2026-11-02 09:14:03 INFO  shop-01.csv: 1.284 Zeilen
2026-11-02 09:14:04 INFO  shop-02.xlsx: 967 Zeilen
2026-11-02 09:14:04 WARN  shop-07.csv: 3 Zeilen ohne Preis übersprungen (Zeilen 88, 412, 913)
2026-11-02 09:14:05 INFO  Fertig: 10.412 Zeilen -> report-2026-10.xlsx (Tabellenblätter „Verkäufe“ und „Summen“)

Einstellungen statt Code

Die Spaltennamen jedes Ladens stehen in settings.ini, daher ist ein neuer Laden oder eine umbenannte Spalte nur eine Zeile dort:

[columns]
date = Datum, Verkaufsdatum, Tag
product = Artikel, Produkt, Bezeichnung
quantity = Menge, Anzahl, Stk.
price = Preis, Einzelpreis

Ein Teil des Codes

def read_shop_file(path: Path, columns: dict[str, list[str]]) -> pd.DataFrame:
    """Liest die Datei eines Ladens ein und gibt ihr die Spaltennamen des Berichts."""
    table = pd.read_excel(path) if path.suffix == ".xlsx" else pd.read_csv(path, encoding="utf-8-sig")
    renamed = {}
    for name, variants in columns.items():
        found = next((c for c in table.columns if c.strip() in variants), None)
        if found is None:
            raise ReportError(f"{path.name}: keine Spalte für '{name}' (gesucht wurde nach {', '.join(variants)})")
        renamed[found] = name
    table = table.rename(columns=renamed)[list(columns)]
    table["shop"] = path.stem
    return table

Dateien: ein ZIP-Archiv mit merge_sales.py (310 Zeilen), settings.ini, requirements.txt und einer README dazu, wie man Python installiert, das Skript startet und was jede Meldung im Protokoll bedeutet. Der Kunde startet es auf seinem eigenen Computer.

Kunde: eine kleine Kette von 9 Schreibwarenläden; jeder Laden schickt seine Monatsverkäufe als CSV- oder Excel-Datei, mit leicht unterschiedlichen Spaltennamen. Aufgabe: ein Skript, das jede Datei in einem Ordner einliest, die Spalten in eine einheitliche Form bringt und einen einzigen Excel-Bericht mit allen Verkäufen und einem Tabellenblatt mit Summen pro Laden schreibt.

Kunde und alle Angaben sind erfunden.

Über diese Leistung

Ihr Webserver notiert jede Anfrage in seinem Zugriffslog, aber eine Datei mit Millionen Zeilen sagt wenig, bis sie ausgezählt ist. Dieses Python-Skript liest Zugriffslogs von Nginx oder Apache, auch ältere komprimierte, und erstellt einen Bericht: Anfragen nach Tag und Stunde, die meistbesuchten Seiten, Statuscodes, die Seiten, die 404 oder 500 liefern, und woher Besucher kamen. Premium zählt Suchmaschinen-Crawler getrennt von Menschen und speichert eine Excel-Arbeitsmappe mit einem Tabellenblatt pro Abschnitt. Die IP-Adressen der Besucher bleiben standardmäßig aus dem Bericht heraus oder werden gekürzt, wenn Sie sie brauchen. Schicken Sie uns die Zeile mit dem Logformat aus den Einstellungen Ihres Servers und 20–30 Zeilen mit geänderten Adressen. Sie führen es auf Ihrem Server oder Computer aus; es liest Logs und ändert keine Einstellungen.

Was enthalten ist

  • Das erhalten SieEin ZIP-Archiv mit dem Python-Skript, einer README mit Schritt-für-Schritt-Anleitung und ab Standard einer Einstellungsdatei mit Logpfaden und Berichtsoptionen; der Code wird auch auf der Bestellseite angezeigt.
  • Nginx und ApacheDie üblichen Logformate oder Ihres, falls es abweicht
  • Fehler mit SeitenWelche Adressen 404 oder 500 liefern und wie oft
  • Auch alte LogsAb Standard werden komprimierte .gz-Dateien direkt gelesen
  • Keine personenbezogenen DatenIP-Adressen weggelassen oder gekürzt
  • Lesbarer CodeMit Kommentaren, ein Abschnitt lässt sich später leicht ergänzen

So funktioniert es

  1. 1
    AufgabeSie schicken das Logformat und ein paar Zeilen mit geänderten Adressen
  2. 2
    CodeWir schreiben das Skript und die Anleitung zum Ausführen
  3. 3
    AusprobierenSie starten es mit einer Kopie des Logs eines Tages und sehen sich den Bericht an
  4. 4
    ÜberarbeitungenSie wünschen Überarbeitungen im Rahmen Ihres Pakets und schicken etwaige Fehlermeldungen

Was wir von Ihnen brauchen

Ihr Webserver (Nginx oder Apache), die Zeile log_format oder LogFormat aus seinen Einstellungen, falls sie geändert wurde, und 20–30 Zeilen des Zugriffslogs mit IP-Adressen, die durch erfundene ersetzt sind. Wo die Logs liegen und wie sie rotiert werden, wie groß das Log eines Tages ist, was der Bericht zeigen soll und in welcher Form (CSV oder Excel) und wo es laufen wird: auf dem Server selbst (mit seinem System) oder auf Ihrem Computer.

Wir fragen Sie:

  • Welcher Webserver und welches Logformat?
  • Was soll der Bericht zeigen?
  • Wie oft brauchen Sie ihn?
  • Wo wird es ausgeführt?

Pakete vergleichen

PaketeBasisEin Log, ein Bericht15 €StandardBericht mit Einstellungen30 €PremiumLog-Bericht-Tool60 €
Lieferzeit1 Tag2 Tage3 Tage
Überarbeitungen123
Codebis zu 150 Zeilenbis zu 400 Zeilenbis zu 1.000 Zeilen
Code-Dateien1bis zu 3bis zu 8
EinstellungsdateiNeinJaJa
Verständliche Fehlermeldungen und ein ProtokollNeinJaJa
Startoptionen und eine Anleitung für den zeitgesteuerten StartNeinNeinJa
Anleitung zu Installation und Start (README)JaJaJa
SprachePythonPythonPython
Bestellen BasisBestellen StandardBestellen Premium

Zahlungsschutz

Sie bezahlen bei der Bestellung, aber das Geld wird nur für abgenommene Arbeit freigegeben.

  • FestpreisDer Paketpreis ändert sich nach der Zahlung nicht mehr.
  • Das Geld wird reserviertBei der Zahlung wird der Betrag nur reserviert. Freigegeben wird er erst, wenn Sie die Arbeit abnehmen.
  • Vor der Lieferung geprüftJedes Ergebnis durchläuft eine Qualitätsprüfung, bevor es Sie erreicht, und Sie sehen es auf der Bestellseite, bevor Sie es abnehmen.
  • Kostenlose ÜberarbeitungenFordern Sie Überarbeitungen im Rahmen Ihres Briefings so oft an, wie das Paket es erlaubt.
  • Abnahme nach 3 TagenWenn Sie die Arbeit innerhalb von 3 Tagen nach der Lieferung weder abnehmen noch eine Überarbeitung anfordern, gilt sie automatisch als abgenommen. Schreiben Sie nach der Lieferung im Bestell-Chat, wartet die Bestellung; sobald wir antworten, können wir die 3 Tage neu starten und teilen das im Chat mit.
  • Neuanfertigung oder volle RückerstattungWenn das Ergebnis nicht Ihrem Briefing entspricht und die Überarbeitungen das nicht behoben haben oder die Arbeit mehr als doppelt so lange dauert wie die Frist, schreiben Sie im Bestell-Chat: Wir erstellen die Arbeit neu oder erstatten die Zahlung vollständig.
So funktioniert es →

Fragen und Antworten

Ist das dasselbe wie Webanalyse?

Nein. Es zählt, was der Server gesehen hat: jede Anfrage, auch von Crawlern und Skripten, ohne Cookies oder Tracking-Code. Die Zahlen weichen von Ihrem Analysedienst ab, und jede Sicht ist auf ihre Weise nützlich.

Was ist mit den IP-Adressen der Besucher?

Sie gelten in vielen Ländern als personenbezogene Daten, daher lässt der Bericht sie standardmäßig weg. Wenn Sie sie brauchen, etwa um eine Adresse zu erkennen, die die Website flutet, können sie gekürzt werden.

Kann es schädliche Besucher sperren?

Nein. Es liest nur Logs und erstellt einen Bericht; es ändert weder die Einstellungen Ihres Servers noch die Firewall.

Lesen Sie meine Logs?

Nein. Sie führen das Skript bei sich aus. Wir brauchen nur die Formatzeile und ein paar Zeilen mit geänderten Adressen.

Keine Antwort gefunden?

Pakete