Apache und MySql über die Schulter gesehen

Profiling ist zwar wichtig, doch erst im Praxiseinsatz zeigt sich, was eine Applikation wirklich taugt. Da ist es nützlich, zur Laufzeit ein Auge auf den Webserver zu haben, hier an Apache und MySql dargestellt.

Apache
Dank der CustomLog-Direktive kann man ein Log erstellen, das die Anfrage und die Antwortzeit des Webservers beinhaltet:

LogFormat “%U %T” Zeitfresser
CustomLog /foo/bar Zeitfresser

Aus der Logformate-Dokumentation: %T: The time taken to serve the request, in seconds. %U: The URL path requested, not including any query string.

Das Log wird in eine MySql-Datenbank importiert (möglichst nicht auf dem Produktionsserver) und ausgewertet. Dazu benötigt man lediglich eine simple SQL-Abfrage:

SELECT url, (SUM(time) / COUNT(url)) AS koeff
FROM bots
WHERE time >3
GROUP BY url
HAVING COUNT(url) >1000
ORDER BY koeff DESC

Zu deutsch: berechne die Zeit, die pro Anfrage benötigt wird. Betrachtet werden dabei nur Anfragen, die länger als 3 Sekunden benötigen und nur solche, die öfter als 1000 mal gestellt wurden. Das Ergebnis ist der Preis, den man pro Anfrage zahlen muss. Je höher desto teurer und schmerzhafter. Jetzt weiß man exakt, welche Dateien Optimierungsbedarf haben.

MySql
Was das Zeitfresser-Log für Apache, ist das Slow Query Log für MySql - mit dem Unterschied, das MySql dies sozusagen mitliefert. Per Konfigurationsdatei oder auf der Kommandozeile übergeben, listet das Slow Query Log alle Anfragen an den MySql-Server, länger als per long_query_time definiert laufen. Das Log lässt sich per mysqldumpslow auf der Kommandozeile auswerten - oder im Editor lesen ;)

Mit dem Zeitfresser- und dem Slow Query Log bekommt man widerspenstige Webapplikationen recht schnell in den Griff. Zu beachten ist allerdings, das jede Messung das System ebenfalls belastet. Man sollte nur messen, wenn man bemerkt, das das System träge ist.

Die Matrix kommt

Die Shadowrun-Matrix kommt ;)

beamZone: Kostenlose Handy-Downloads in der Umgebung - Golem.de

Update:

Wie Golem [berichtet][1] plant Nokia eine Handyschale mit der auf RFID-Technologie basiernder NFC-Unterstützung. NFC — kurz für Near Field Communication — ist eine Technik zum Datenaustausch auf kurze Distanzen, einige Zentimeter bis zu wenigen Metern.

Mittels NFC lassen sich Daten zwischen zwei oder mehreren Endgeräten — je nach Implementierung verschlüsselt oder im Klartext — austauschen. [Die Idee dabei ist][2]:

Evolving from a combination of contactless identification (RFID) and interconnection technologies, NFC technology bridges today’s connectivity gap. It enables the simple transfer of information — from phone numbers to electronic transactions — and allows people to interact with their environment without needing to navigate complicated menus or perform complex set-up procedures.

Im Golem.de-Forum wird das etwas [pragmatischer beschrieben][3]:

Wenn man über RFID kommunizieren will, kann man dann auch eigene Etiketten, z.B. in der neuen Jacke, entsprechend umlabeln und zur Grußkarte mutieren lassen?

Das könnte durchaus eine Anwendung sein.

[1]: http://www.golem.de/0411/34493.html
[2]: http://www.nfc-forum.org/aboutnfc/index.html
[3]: http://forum.golem.de/phorum/read.php?f=14&i=18199&t=18196

Housekeeping

Mein Linkdump erfüllt die Funktion eines Web Logs im Sinne einer kommentieren Bookmarksammlung - ich dumpe Links, die mich zum Zeitpunkt des Dumpens interessieren.

Interessieren mich aber heute noch alle 500 Links im Dump?

Wenn mich ein Link nicht mehr interessiert, warum ihn behalten? Er ist keine Information, sondern nurmehr ein Datum.

Also folgende Idee: einmal pro Tag erscheint eine Wiedervorlage. Die vier ältesten Einträge des Linkdumps werden mir präsentiert. Wenn sie mich immer noch fesseln - vielleicht ja auch aus anderen Gründen, was eine Rekommentierung rechtfertigen würde - redumpe ich sie; wenn nicht, werden sie gelöscht.

Vier Links sind überschaubar und in 5-10 Minuten zu erledigen - länger sollte das Housekeeping nicht dauern. Wären es mehr, müsste man mehr Entscheidungen treffen, bräuchte mehr Zeit, müsste mehr Informationen verarbeiten, würde abgelenkt - kurz man wäre weniger effektiv und die Entscheidungen vielleicht sogar falsch: Ach Mist, das ist mir jetzt zu viel. [Redumpe|Lösche] ich sie halt einfach alle.

Genau das will ich aber nicht. Ich möchte in der Lage sein, mir die Links in Ruhe anzusehen und ihre Inhalte zu erfassen um eine begründete Entscheidung zu treffen, ob ich sie redumpe oder nicht. Diese Sorgfalt bin ich mir selbst schuldiig, schließlich möchte aus meinen Linkdump einen Nutzen ziehen können.

PS: Die Sieben ist vielleicht eine magische Zahl, aber nicht immer effektiv.

Webanalyse - Ein Erfahrungsbericht

Nach Visitors habe ich mir dieses Wochenende das Tool Webanalyse angeschaut.

Webanalyse visualisiert und loggt den Traffic live. Das ist spannend zu beobachten und gibt Aufschluss über Klickpfade einzelner User - es sei denn sie kommen über einen Proxy.

Webanalyse benötigt nichts weiter als einen PHP-fähigen Webserver und ein Verzeichnis, in dem es seine Logs ablegen darf. Daneben müssen in jede Datei, die Webanalyse erfassen soll, zwei Zeilen PHP-Code eingefügt werden. Natürlich kann man dies auch per auto\_prepend\_file erledigen.

Pro Tag legt Webanalyse eine Logdatei an - zusätzlich hält es Dateien mit Informationen über Browser und Betriebssysteme vor. Sofort nach der Installation beginnt Webanalyse, Daten zu sammeln - parallel zum Serverlog speichert Webanalyse prinzipiell die gleichen Daten. Man sieht auf einen Blick die aktuellen Besucher als Hostname bzw. IP-Adresse sowie eine Landesflagge, ein Icon für den verwendeten Browser, den Referer sowie einen Link auf die Klickpfad-Auswertung. Daneben gibt es die üblichen Pie-Charts.

Große Besucherströme verlangsamen Webanalyse im Betrieb spürbar. Auf phpBB.de wuchs das Log im Laufe des Tages so stark an, das die 30 Sekunden, die PHP-Skripte laufen dürfen bevor sie abgebrochen werden, bald nicht mehr ausreichten, die Live-Auswertung zu generieren.

Die Stärken von Webanalyse sind die Live-Auswertung und die Analsye der Klickpfade. Für weniger besuchte Sites kann es auch als Log Analyser dienen, für gutbesuchte hingegen ist es unbrauchbar. Eine Version, die nur die letzten x Minuten auswertet wäre ideal für solche Sites. Wenn Webanalyse dann noch einen Offline-Modus hätte, in dem man Apache-Logs auswerten könnte, wäre es ein sehr mächtiges und vielseitiges Tool.

Das Internet ist manchmal auch nur ein Dorf. Grüße an Beate und Danke für die deutsche Übersetzung von Webanalyse.

Am nächsten Wochenende teste ich den von Kossatsch vorgeschlagenen chCounter.

Categorize it - not

Seit längerem denke ich darüber nach, wie sinnlos meine Kategorien bzw. Kategorien im Allgemeinen sind. Für den Leser erschweren sie das Browsing und auch die Findability: in welcher Kategorie könnte denn der gesuchte Inhalt stecken? Auch für den Betreiber führen sie zu immer neuem Kopfzerbrechen: in welcher Kategorie lege meinen Inhalt ab?

Welchen Nutzen haben sie also? Strukturierung könnte man sagen. Aber welchen Nutzen hat eine Strukturierung auf einer Website, deren Perzeption vor allem eine zeitliche ist? In einem Blog/in Blog-ähnlichen System sind die neusten Inhalte am interessantesten. Das man daneben auch ältere Inhalte nützlich finden kann, ist eine andere Baustelle.

Die Zugriffsauswertung auf WWWorker (und auf viele anderen Blogs bestimmt auch) belegt, das die Startseite und die Feeds am häufigsten abgerufen werden, gefolgt von CSS und Graphiken/Bildern. Danach kommen - mit deutlichem Abstand - Zugriffe auf einzelne Artikel, die von Suchergebnisseiten bzw. durch direkte Verlinkung herrühren. Die (Kategorien-) Archive findet man in der Liste der Zugriffe zumeist ganz unten.

Für den Leser ist die Information, in welcher Kategorie der Autor einen Inhalt abgelegt hat, höchstens nice too know - und für mich als Blogger eigentlich überhaupt nicht interessant, sobald ich einen Inhalt gespeichert habe. Bis dahin muss ich hier aber deutlich zuviel Gehinrschmalz investieren. Wichtig ist schließlich nur noch, das ich den Eintrag wiederfinden kann.

Dazu brauche ich Kategorien nicht, solange es nicht um mehrere hundert Inhalte mit ähnlichen Inhalten geht, die sich aber in ihrer Bedeutung essentiell unterscheiden, wie das vielleicht in einem Intranet oder einem großen Portal ist. Man denke an das Intranet eines großen Unternehmens, in dem Organigramme der Abteilungen abgelegt sind. Sucht man das Organigramm einer bestimmten Abteilung, ist es gut, wenn es unter dieser Abteilungs-Kategorie abgelegt ist. Wäre das nicht der Fall, bekäme man zig Organigramme und hätte keine Ahnung, welches davon das passende ist.

Kategorien sind auch nützlich, um Informationsflüsse zu kanalisieren, wie man das in Zeitschriften und Foren tut. In Zeitungen hingegen stellt sich ein ähnliches Kategorienproblem wie in Blogs: einerseits unterscheidet man nach Aktualität (die neusten, wichtigsten Inhalte ganz oben und vorne), andererseits nach Ressorts, die auf der Startseite jedoch nur ganz klein und nebensächlich in Erscheinung treten.

Aus diesen Überlegungen heraus habe ich die Kategorien auf dem WWWorker entmachtet. Dazu habe ich in einem ersten Schritt die Links auf die Kategorienarchive vom Index entfernt: über das Icon neben jeder Headline gelangt man weiterhin dorthin. In einem zweiten Schritt werde ich die Kategorien gänzlich entfernen.

Back to the basics - Web Log aka Linkdump

Das soll kein Aufhänger zu einer Diskussion über die Bedeutung des Wortes Weblog werden. So wie ich Blogs hier beschreibe sehe ich sie - das heisst nicht, das andere das ebenfalls tun müssen oder sollen.

Ich stehe vor dem Problem, das ich viele Links durchaus spannend finde und sie speichern - eigentlich bloggen - möchte. Nur empfinde ich es als langweilig bzw. wenig schöpferisch, meinen Blog mit blossen Links zu füllen. Lieber blogge ich eine zeitlang nichts, als kommentarlos oder mit nur einem Satz Links zu bloggen. Ich nutze meinen Blog eher als WebCMS um Artikel zu schreiben - es ist weit mehr als nur ein Web Log im ursprünglichen Sinn.

Daher entstand Anfang des Jahres der Linkdump. Per Bookmarklet lege ich dort Links ab, mehrere am Tag. Tatsächlich ist mein Linkdump ein Web Log im eigentlichen Sinn: regelmäßige, zeitlich geordnete Web-Positionsangaben.

Wer den Dump schon kennt, wird feststellen, das er sich etwas verändert hat. Aus einer recht lieblosen Linkliste ist ein etwas hübscherer und mit mehr Metadaten versehener Blog geworden, der fast schon wie ein richtiger Blog aussieht. Die Einträge werden pro Tag gruppiert und man hat die Möglichkeit, zusätzlich zu den Links einen Kommentar zu erfassen. Abgesehen davon indiziert der Linkdump die ersten 4096 Bytes jedes Dokuments, liest automatisch <title> aus und sendet Trackback-Pings, wenn er eine passende URL findet. Dank MySql 4.x kann im Dump die Volltextsuche genutzt werden, inkl. Trunkierung und boolschen Ausdrücken. Chique, was ;)

Es stehen durchaus noch einige Features auf meiner Wunschliste - das Ding könnte also noch ein richtiger Blog werden, nur eben viel kleiner als andere ;)