Statistische Auswertung von Logfiles (Einlesen, auswerten und grafische Aufbereitung von logfiles) mit Java

Niklas7

Mitglied
Hallo Leute,

ich kenne mich nicht so gut aus mit dem Thema programmieren aber muss ein Projekt dazu erstellen und bitte um Hilfe oder Lösungen, die folgendes beinhalten:
wie sich der Gesamtverkehr (Traffic) auf der Website über die 6 Tage hinweg entwickelt.

- die Anzahl der Aufrufe einzelner Webseiten, um zu sehen, welche Bereiche die Nutzer besonders interessieren.
- die Intensität der Nutzung (gemessen an der durchschnittlichen Dauer einzelner Sessions).
- die Zahl der Besucher.
- den Weg einzelner Nutzer durch das Webangebot.

Ich würde mich über Code Vorschläge aus Eclipse freuen.
 

KonradN

Super-Moderator
Mitarbeiter
Also wir haben keinerlei Details und du willst fertigen Code?

Ok, kein Problem. Da wir aber keine Details haben, muss der Code natürlich extrem viel abdecken können. Daher nicht wundern, wenn es etwas mehr an Code ist:

Ist ein Gradle Projekt und kann somit problemlos in Eclipse geöffnet werden (Das war ja ein Punkt, der Dir wichtig war).
 

fhoffmann

Top Contributor
Hallo,

@KonradN hat dir einen Link zu einem Tool geliefert, das alles Mögliche kann. Es kann sicherlich auch ein Logfile auswerten. Dieser Link war möglicherweise auch ein bisschen ironisch gemeint, weil du uns keinerlei Informationen zum Inhalt des Logfiles geliefert hast.

Ein erster Schritt muss deshalb immer sein, dass du dir das Logfile einmal anguckst. Welche Informationen sind darin enthalten?

Dann kann man überlegen, wie du diese Informationen in eine vernünftige Klassenstruktur übertragen kannst. Möglicherweise finden sich in dem Logfile ja pro Zeile Informationen darüber, wer der user war (IP-Adresse oder so etwas wie eine Session-ID), welche Seite er aufgerufen hat, wann er die Seite aufgerufen hat etc.
Dann könntest du eine Klasse schreiben wie
Java:
class LogFileRow {
  int userId; // IP-Adresse, session-ID, ...
  String site;  // meineFirma/produkte/Produkt_4711
  Date startTime, // was auch immer hier "Date" ist
}
Und du liest das Log-File zeilenweise, erstellst die LogFileRow pro Zeile und speicherst sie in einer Liste.

Man könnte auch überlegen, die Informationen in einer Datenbank zu speichern.

Und man kann sich dann (aber auch erst dann) Gedanken darüber machen, wie man aus diesen Informationen Statistiken erstellt.

Und als allerletzetes kann man aus diesen Statistiken auch bunte Bilder (Graphen) erstellen. Aber das ist möglicherweise mit Excel einfacher zu realisieren als mit Java.

Nun habe ich oft das Wort "möglicherweise" und den Konjunktiv benutzt. Du musst uns einfach mehr Informationen liefern, damit wir deine Frage sinnvoll beantworten können.
Eine Alternative zu dem Vorgehen könnte (schon wieder ein Konjunktiv) natürlich auch sein, dass die Auswertung nicht aus dem Logfile sondern von Webserver selber erstellt wird.
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Ja, dann fang doch einfach einmal an, das in einer Klasse abzubilden. Und dann schreibst Du eine Klasse, die ein Logfile einliest und daraus eine Menge an Instanzen der Datenklasse erstellt.

Wenn Du das hast, dann kannst Du überlegen, da Auswertungen zu machen, aber du kannst direkt mit dem ersten Schritt anfangen. Das war der Hinweis von @httpdigest und so erste Möglichkeiten hat er angerissen.

Ich halte es für eher unwahrscheinlich, dass Dir hier jemand fertigen Code erstellen und liefern wird. Wenn Du das programmieren willst: Leg los! Wenn Du fertige Lösungen haben willst: Nimm eine Lösung, die das bieten kann. Ein großes Projekt diesbezüglich habe ich verlinkt. Aber bei Webservern gibt es oft auch einfache Auswertungs-Tools, die das machen können.
 

Neumi5694

Top Contributor
Dann musst du als erstes Mal eine Datenstruktur bereitstellen, die diese Werte aufnehmen kann, ist ja nicht weiter schwer. Als nächstes lies das Log aus und befülle die Struktur, mit Regex solltest du ganz gut die einzelnen Werte rausfischen können. Vielleicht gibt's für Logs aber auch schon was vorgefertigtes.
Was du wie auswerten willst, solltest du auch noch überlegen, bevor du mit der Programmierung anfängst.
 

Oneixee5

Top Contributor
Gesamtverkehr (Traffic) auf der Website über die 6 Tage hinweg
Das kann schon eine ordentliche Menge an Daten sein. Bei uns wären das ein paar Mio. Zeilen in Log-Files. Möglicherweise musst du die Datenmenge berücksichtigen und das die Daten evtl. über mehrere Ordner und Dateien im ZIP-Format verstreut daliegen. Wenn es um eine große Datenmenge geht, würde ich nicht unbedingt mit dem Entwurf von Klassen beginnen sondern mal überschlagen wie viel Speicher nötig ist und wie man die Datenmenge beherrschen kann.
 

Niklas7

Mitglied
Java:
package logfiles;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class logfile {

      private static void ladeDatei(String datName) {
            
            ArrayList<String> array = new ArrayList<String>();
            StringTokenizer tk = new StringTokenizer("<data>", "<\t>");

                File file = new File(datName);

                if (!file.canRead() || !file.isFile())
                    System.exit(0);

                    BufferedReader in = null;
                    
                try {
                    in = new BufferedReader(new FileReader(datName));
                    String zeile = null;
                    while ((zeile = in.readLine()) != null) {
                        
                        if (tk.hasMoreTokens()) {
                            array.add(tk.nextToken());
                        }
                        
                        System.out.println(zeile);
                    }
                }
                
                catch (IOException e) {
                    e.printStackTrace();
                }
                
                finally {
                    if (in != null)
                        try {
                            in.close();
                        }
                    
                    catch (IOException e) {
                    }
                }
            }

            public static void main(String[] args) {
                String dateiName = "bbs-suew.de-2022-01-21(1).txt";
                ladeDatei(dateiName);
            }

}

Ich habe jetzt den code soweit, dass ich alle Zeilen eingelesen habe. ich hänge daran wie ich die Zeilen "auswerte" also alle ip-adressen usw. aus der datei rauslese.
 

Oneixee5

Top Contributor
Bitte ließ mal die API-Dokumentation bevor du weitermachst: StringTokenizer ist eine Legacy-Klasse, die aus Kompatibilitätsgründen beibehalten wird, von ihrer Verwendung in neuem Code wird abgeraten. Es wird empfohlen, dass jeder, der diese Funktionalität sucht, stattdessen die Split-Methode von String oder das java.util.regex-Paket verwendet...
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben