FM_WebFrontAccess (WF - Zugriffe erfassen)

FM_WebFrontAccess (WF - Zugriffe erfassen)

Auf der Grundlage eines Scriptes von RWN habe ich ein kleines Auswertetool für das Webfront geschrieben.

Was kann es?

[ul]
[li]Anzeige der internen Zugriffe auf das Webfront nach Datum/Zeit/Benutzer/IP-Adresse/Name [/li][li]Anzeige der externen Zugriffe auf das Webfront nach Datum/Zeit/Benutzer/IP-Adresse/Name [/li][li]Neu: gewünschte Logrotation festlegen [/li][/ul]

Installation/Konfiguration

Im Webserver (Objektbaum unter Kern Instanzen) muß die Option - Logdatei erstellen - an sein.
Das Script wurde mit RS Exporter erstellt und installiert alles weitere.
Einfach in die Root legen, WFC-ID im Script angeben und starten.
Eine entsprechende WF Kategorie wird mit angelegt, entsprechend im WFC verschieben.
In der config Datei:

  • wenn gewünscht, IP Adressen und Namen eintragen im Format: $ip[‚Name‘] = „IP“;
    Nach folgendem Muster:

<?
//---------------------------- hier Daten anpassen --------------------------

//hier kann wenn gewünscht eine IP einer rotierenden DynDNS Adresse ermittelt werden
$rot_adr[0] = "test1.net";
$rot_nam[0] = "DynDNS 1";
$rot_adr[1] = "test2.net";
$rot_nam[1] = "DynDNS 2";
//Geräte welche auf das WF zugeifen (bitte Namen nicht doppelt vergeben!)
$ip['PC Kueche'] = "192.168.2.12";
$ip['DynDNS Feste ID'] = "86.22.2.125";

$WS_ID = -1; // Webserver-ID nur bei mehr als einem Webserver im System angeben (default -1)
$SaveDuration = 30; //Anzahl der Tage in der das Webserverlog archiviert wird

//---------------------------------------------------------------------------
?>

V1.3: Achtung: Wenn ein bestehendes Logrotationsscript besteht kann dieses gelöscht werden!

Die Größe der Logdatei und damit auch die Verarbeitungsgeschwindigkeit kann mittels Logrotation (s.u.) eingestellt werden!

Updateinformationen von Exporterfiles

http://www.raketenschnecke.net/2012/09/25/ips-rs-project-exporter/

Logrotation
Einstellbarer Rotationszeitraum im Webfront (täglich/wöchentlich/monatlich/jährlich/keine Änderung).
Die aktuelle accessxxxxx.log wird gelöscht und eine Sicherheitskopie wird angelegt.
Es entsteht natürlich wieder eine neue leere accessxxxxx.log.
$SaveDuration = 30; gibt den Wert in Tagen an bis zu welchem Logfiles aufgehoben werden.
Vielen Dank an wgreipl für die Idee und raketenschnecke für die Umsetzung!

Versionshistory

V1.0

[ul]
[li]Bug „Maximaler Speicher pro PHP-Thread“ behoben [/li][li]Bug Icon behoben [/li][li]Neu: rotierende DynDNS oder andere name.xx Adresse anzeigen [/li][/ul]
V1.1

[ul]
[li]Bug - Fehler bei langen Files behoben [/li][li]doppelte IP´s werden gefiltert [/li][li]geändertes Fehlerhandling [/li][/ul]
V1.2

[ul]
[li]diverse Bugfixe [/li][li]config vereinfacht [/li][/ul]
V1.3

[ul]
[li]änderbare Logfile Rotation in das Hauptscript eingebunden [/li][/ul]
V1.42b

[ul]
[li]Geschwindigkeit der Ausgabe durch zyklische Ablage der Daten stark erhöht [/li][/ul]
V1.43b

[ul]
[li]Bugfix Logfile Rotation [/li][/ul]
V1.43

[ul]
[li]config eingefügt, sonst keine Änderung zur 1.43b [/li][/ul]

V1.43.ips.rar (16.2 KB)

Danke für das Skript!

Zwei Anmerkungen:

  1. Bei der Einrichtung wird ein Nicht-Standard-Icon vorausgesetzt.
  2. Bei der Ausführung erscheint (bei mir):

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 118 bytes) in [Program\Test1\WF-Zugriffe\WF Zugriffe\WF Zugriffe] on line 42

Ist mein Log-File zu groß? :confused:

Grüße
galleto

  1. Da ist von mir ein nicht IPS Icon mit in die Installation gerutscht, das hast Du natürlich nicht, nicht so schlimm werde ich aber ändern
  2. Ja da kommen wohl zu viele Daten an, das begrenzt IPS, da muß ich nochmal ran, melde mich

Kannst Du mir mal bitte die Zeile 42 posten.

Ok, mit Zeile 42 hat sich erledigt. Konnte den Fehler nachstellen.
Das Script funktioniert zur Zeit nur mit Log-files <32MB, wegen der Limitation „Maximaler Speicher pro PHP-Thread“.
Da muß ich die Logik noch ändern.

V1.0

[ul]
[li] Bug „Maximaler Speicher pro PHP-Thread“ behoben[/li][li] Bug Icon behoben[/li][li] Neu: rotierende DynDNS oder andere name.xx Adresse anzeigen[/li][/ul]

Neuer Bug bei Mega Logfiles gefunden, ich nehme den Download erstmal raus und stelle nochwas um, sorry.

Auf ein Neues. V1.1 ist online, bitte um Feedback!
Bei großen logfiles ist eine Scriptlaufzeit > 1min möglich. Ich habe die Laufzeit mal auf 3min limitiert.

Config ggf. entsprechend erstem Beitrag anpassen!

Hi Thomas,
das sieht gut aus :wink: bei mir braucht das Script ca 60 Sekunden für 48MB Logfile (480.000 Datensätze), die Ergebnisse passen. Prima!

Vielleicht noch eine Idee für spätere Versionen: ich würde evtl. die verdichteten Daten für die 3 Buttons im WFE gleich beim ersten Scriptlauf mit aggregieren lassen und als csv auf die Platte schmeißen. Somit wären die daten bei Auswahl via Button sofort verfügbar (und der eigentliche Logfile-Scan könnte dann auch zyklisch per Timer laufen)…

Hallo Thomas,
bei mir bekomm ich sporadisch, wenn neue Einträge gefunden werden folgende Schöheitsfehler im WF:

Sonst läufts super. Welche Logs werden denn jetzt ausgewertet? RS schreibt was von 48MB. Meine aktuelle access_xxx hat gerade mal 649 kb.

Zwischenablage-1.png

Zwischenablage-2.png

Hallo Werner,

die Länge des Logfiles hängt von dem Datum ab an dem Du das aktiviert hast und an der Menge der Zugriffe und Geräte.
Es gibt nur immer ein logfile je Webserverinstanz.

Hast Du wirklich die V1.1 im Einsatz? Was steht bei Dir in Zeile 72?

Die Schönheitsfehler liegen teilweise an den fehlerhaften Logeinträgen, das ist ein IPS Bug. Da rede ich nochmal mit paresy.

Läuft, danke! Dass der Speed sehr mau ist dürfte am Umfang meines Log-Files liegen.

Mich wundert aber, dass intern nur vier Zugriffe vom Februar, Mai, Oktober und von heute mit jeweils einer anderen IP angeführt werden. Obwohl ich täglich mit dem Notebook neu auf das Webfront zugreife, ist nur das heutige Datum eingetragen. Die IP des IPS- und zugleich Visualisierungs-Servers (= ständige Zugriffe) ist trotz einiger Neustarts nur vom Oktober verzeichnet. Wird vielleicht dieselbe IP nur einmal geloggt?

EDIT: Ach ja - 127.0.0.1 wird als extern ausgewiesen. :wink:

Grüße
galleto

Aus Performance- und Übersichtsgründen wird nur der letzte Zugriff einer IP angezeigt. Andernfalls wäre das WF auch ein wenig überfordert.

Okay, stimmt natürlich. :rolleyes:
(Hab gerade auch gesehen, dass Du das oben auch geschrieben hast, sorry!)

Noch eine Frage zu DynDNS: Sehe ich es richtig, dass nur für die IP eine Namenszuweisung erfolgt, die zum Zeitpunkt des Scriptaufrufs gültig ist? Erscheint mir logisch, hat aber zur Konsequenz, dass alle DynDNS-Aufrufe des Tages ohne Namenszuweisung aufgeführt werden. Richtig?

Grüße
galleto

Hallo Thomas,

Habe wirklich nur eine Webserver-Instanz und 3 access*.logs. Die die nicht mehr befüllt werden, fallen mit dem Tag zusammen, an dem ich IPS mehrfach umgezogen und neu installiert habe.

Und ja, habe die V1.1. Zeile 72: $timestamp = mktime(0,0,0,01,01,1970)

Und ich heiße auch Wolfgang und nicht Werner.

Ach ja - 127.0.0.1 wird als extern ausgewiesen.

Wird im nächsten Update gefixed sein.

Sehe ich es richtig, dass nur für die IP eine Namenszuweisung erfolgt, die zum Zeitpunkt des Scriptaufrufs gültig ist?

Stimmt da werde ich mal einen Puffer einbauen der einige speichert.

Und ich heiße auch Wolfgang und nicht Werner.

Sorry Wolfgang.:wink: Die nicht benötigten access*.logs kannst Du löschen.

Hallo,

ich habs am Samstag mal bei mir installiert, funktionieren tut es bisher sehr gut, aber ich hab auch erst vorgestern das Logging eingeschaltet, so das das Log noch überschaubar klein ist.

Grüsse

Thomas

Freut mich, danke für das Feedback.

Neu: V1.2

[ul]
[li] diverse Bugfixe[/li][li] config vereinfacht[/li][/ul]

Installation:

Wenn Script schon vorhanden:

  1. IP Daten in config Datei retten
  2. Komplette Installation löschen
  3. Neuinstallation siehe Beitrag 1

Neuinstallation:
siehe erster Beitrag

Viel Spaß!

Hallo Thomas,

gibts eine Möglichkeit die access*.log regelmässig zu „bereinigen“? Regelmässig auf ein bestimtes Datum /Zeitraum zu „kürzen“?
Meine ist mittlerweile 62mb gross und ein ScriptTimeLimit von 240 sek reicht schon nicht mehr.

Alternativ könnte man die Änderungszeit überwachen und immer die letzte IP in eine (jetzt bitte nicht hauen) MySQL schreiben und dann von dort auslesen.
Leider bin ich noch nicht so weit diesen Vorschlag selber umzusetzen. Ist das überhaupt möglich/sinnvoll?

Danke für Deine Antwort,

Hallo Wolfgang,

ich arbeite erstmal wegen genau dieses Problems an dem Projekt nicht weiter.
Du kommst an die log nur lesend ran, da diese bei Dienstlaufzeit gesperrt ist, damit kann ich sie nicht kürzen.

Das Beste ist eine Rotation der Logdatei, die kann aber nur paresy einbauen.:wink:

Hallo Thomas,
danke für die ernüchernde Antwort.
Habs selber versucht ($lines[count($lines)-1]), bin aber leider auch an die Grenzen von IPS gestossen.
Hoffe paresy liest mit.