Open anwaltde opened 9 years ago
Ich fürchte, es liegt an Piwik bzw. dem Logfile-Import. Beim Import werden entweder die Hooks nicht korrekt abgearbeitet oder der UserAgend-String kommt anders als erwartet.
Das BotTracker-Plugin arbeitet bisher nur, wenn die Webseite über die PHP-API getracked wird. Ich werde aber den Import mal genauer testen. Vielleicht kommt der UserAgend ja doch in einer Variable mit.
Ich habe das Problem auch mit dem Standard-Apache-Logformat. Gibt es schon neuere Erkenntnisse hierzu?
Ich hab den LOG-Import mal getestet und herausgefunden, dass als "user agent" immer "Piwik/LogImport" ankommt. Eine Ermittlung von Bots anhand des user-agent-Strings ist damit unmöglich.
Wenn jemand einen Weg kennt, beim Log-Import an den user agent, die siteID und die URL zu kommen kann ich was machen. Bisher hole ich die Daten über $_REQUEST[...] bzw. $_SERVER[...]
@Thomas--F Könntest du mir sagen, wo ich die user-agents bzw. den Eintrag "Piwik/LogImport" finde? Würde das gerne nachstellen und testen
Hat sich erledigt: /var/www/html/piwik/tmp/logs/log.txt
Der dem Importskript übergebene Useragent "Piwik/LogImport" ist hier hart kodiert: https://github.com/piwik/piwik-log-analytics/blob/f15f7271439380dbc7366aa117d3c8add358c264/import_logs.py#L1226
Einen anderen Weg an den Useragent zu kommen kenne ich leider nicht. Vielleicht sollten wir einen Bugreport/Featurerrequest bei Piwik einreichen?
Wenn beim Importer "--enable-bots" gesetzt ist haben die Einträge eine "Bot" oder "Not-Bot" variable in der der original User-Agent steht. Kann man das vielleicht nutzen?
Hast du da eine Beschreibung oder ein Beispiel? Wenn der Agent im Plugin ankommt kann ich den auf jeden Fall auswerten.
Ich bin da nicht tief im code, aber es sind jeweils "Benutzerdefinierte Variablen" mit dem User-Agent. Sofern das Plugin auf Benutzerdefinierte Variablen zugreifen kann, sollte das klappen.
Du musst irgendwie in deinem Callback an "$visit" kommen, da sollte es dann $visitor['customVariables'] geben. Irgendwie muss es ja Mechanismen geben um an den $visit zu kommen, denn sonst wird dem Hook ja nichts übergeben. So richtig tief bin ich aber nicht in den APIs, sorry
Allerdings müsste dann auch die benutzerdefinierte Variable schon vor dem Hook gesetzt sein. Schwierig, schwierig. Ansonsten muss der Log-Importer die variable ja auch im Request mitschicken. Dann steht sie vermutlich irgendwo als "_cvar": "_cvar — Visit scope custom variables. This is a JSON encoded string of the custom variable array (see below for an example value)."
In dem aktuell benutzten Hook isExcludedVisit
gibt es IMHO keine Möglichkeit an $visit
zu kommen. Der Hook bekommt nur eine Referenz auf einen bool übergeben, der sagt, ob der Besuch geloggt wird oder nicht. Evtl. kann man den Hook makeNewVisitObject
benutzen?
Die Hauptaufgabe des Plugins soll es ja sein, die Bots aus dem normalen Besucherlog auszuschließen, daher der Hook "isExcludedVisit". Ich habe jetzt 2 Stunden nach einer Möglichkeit gesucht, aus dem Import-Script an die CustomVariable "Bot" bzw "Not-bot" zu kommen - bisher ohne Erfolg. Ich bekomme ja nicht mal die SiteID übergeben.
Der Hook "makeNewVisitObject" greift aber erst später und dann kann ich den Bot nicht mehr sauber ausschließen.
Aktuell sehe ich keine sinnvolle Lösung für das Problem.
Möglicherweise hilft ein FeatureRequest in Piwik um beim Aufruf im den Hook "isExcludedVisit" den UserAgent und die siteID direkt übergeben zu bekommen. Vorhanden sind die Daten und die Änderung ist leicht (habe ich gerade getestet).
Zeile 93 in core/Tracker/VisitExcluded.php:
Piwik::postEvent('Tracker.isExcludedVisit', array(&$excluded, $this->idSite, $this->userAgent));
Beide Werte kommen dann auch sauber im Plugin an.
Update:
Besser direkt das Array "$this->request", da ist alles drin, was ich brauche:
Piwik::postEvent('Tracker.isExcludedVisit', array(&$excluded, $this->request, $this->userAgent));
Ich würde das sehr begrüßen und den Feature Request unterstützen.
Ich habe mal einen Issue bei Piwik aufgemacht: https://github.com/piwik/piwik/issues/10415
Piwik 2.16.3 enthält den erweiterten Hook.
Ich habe den Fix jetzt im master-branch eingestellt. Der lokale Test bei mir hat funktioniert. Hat jemand von euch Zeit, die Änderung zu testen bevor ich den Code freigebe?
Auch in meinem Test funktioniert soweit alles. Scheinbar ist "letzter Zugriff" immer die aktuelle Zeit beim Logimport. Ist das ein Bug oder so gewollt?
Aktuell ist das mit der "Zugriffszeit" erstmal so. Ich muss noch etwas suchen und testen, wie ich eine sinnvolle Zugriffszeit bekomme. Im Server-Log steht ja zumindest sekundengenau der Zugriff. Mal sehen, ob der immer im gleichen Format kommt und ob ich den einfach in einen Timestamp umwandeln kann. Das folgt dann aber im nächsten Release.
Hi,
Nachdem mit der neuen Version der BotTracker nun zu laufen scheint, bleiben jedoch die Tabellen leer.
Wir importieren alle 5 Minuten ein Logfile.
python /var/www/html/piwik/misc/log-analytics/import_logs.py --url=http://localhost/piwik/ --idsite=1 --recorders=4 --add-sites-new-hosts --enable-http-errors --enable-http-redirects --enable-static --enable-bots --enable-reverse-dns --log-format-name common_complete /var/log/varnish/varnish.log >/dev/null 2>&1
Liegt es evtl. am Custom Format?
www.anwalt.de 66.249.75.100 - - [02/Nov/2015:10:40:11 +0100] "GET http://www.anwalt.de/verzeichnis/rechtsanwaelte.php?stadt=Willich&thema=Instandhaltungspflicht&cityid=6720&distance=30&lat=51.264961&lon=6.551767&p=3&sr=664567 HTTP/1.1" 200 12303 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
www.anwalt.de 66.249.75.92 - - [02/Nov/2015:10:40:34 +0100] "GET http://www.anwalt.de/verzeichnis/rechtsanwaelte.php?stadt=Ilsede&thema=Kaufvertrag&cityid=7262&pid=7 HTTP/1.1" 200 6568 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
Gruß
Sascha