Apache Logdateien Namensauflösung



ChrisServer

New Member
Hallo,

ich suche ein Script, das die IP-Adressen in Apache-Logdateien auflöst und die Namen einfach hinter die IP-Adressen schreibt. Bedingung: die Adressen müssen gecached werden. Wenigstens pro Lauf.

Chris
 
Sowas ist doch schnell selbst geschrieben. Das sollte sogar fast komplett in Bash ohne großartige externals zu schaffen sein.
Für den DNS Cache würde sich ein Standard DNS Cache (Bind, PowerDNS, unbound, ...) anbieten.
 
@dotme: genau was ich gesucht habe. danke.

@Firewire2002: jein, ich hab so ein script geschrieben, aber ohne cache. und bei meiner internetverbindung dauert das eeewwwwiiiiiiigggg. vielleicht müsste ich lokal einen anderen dns einrichten oder so. aber mit "cachendem" Script ist das viel einfacher. trotzdem thx.
 
Warum lässt Du das Apache nicht direkt selbst beim schreiben des Logs erledigen?
Hint: Dynamische IPs sind schneller neu vergeben als Du nachträglich auflösen kannst...
 
Warum lässt Du das Apache nicht direkt selbst beim schreiben des Logs erledigen?

Ja, könnte ich eigentlich. Der Server hat nur wenige Zugriffe. Da kann es zu keinen Problemen kommen. Müsste ja sowieso recht schnell gehen...

Hint: Dynamische IPs sind schneller neu vergeben als Du nachträglich auflösen kannst...

Daran hab ich gar nicht gedacht. Wobei es mir in diesem Fall primär nur um den Provider geht...
 
Code:
HostnameLookups On
LogFormat "%a %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
 
Warum lässt Du das Apache nicht direkt selbst beim schreiben des Logs erledigen?
Das will man normalerweise nicht, weil der Request-verarbeitende Prozess/Thread erst weitermachen kann, wenn die Client-IP-Adresse aufgelöst und in die Logdatei geschrieben wurde.
 
Der Timeout hierfür ist extrem kurz (nicht spürbar) und wenn die Auflösung fehl schlägt wird einfach die IP eingetragen. Das ist selbst bei hochfrequentierten Websites kein Problem, zumal man das Ganze für wiederkehrende Client-Hosts mit einem Resolver-Cache zusätzlich beschleunigen kann.
 
Der Timeout hierfür ist extrem kurz (nicht spürbar)
Das stimmt so in der Allgemeinheit nicht. Du hast (abgesehen vom Timeout des Resolvers) keine zugesicherte Laufzeit für eine DNS-Auflösung. Gerade bei stark frequentierten Seiten wird man daher die Auflösung der Client-IP-Adressen erst nachgelagert für die schönen Webstatistiken durchführen und nicht schon während des Requests.

zumal man das Ganze für wiederkehrende Client-Hosts mit einem Resolver-Cache zusätzlich beschleunigen kann.
Wenn man schon vorher weiß, welche Clients auf die Seite(n) zugreifen werden, reicht eine einfach Lookup-Table und man muss sich nicht den Stress via DNS machen. ;)
 
Naja, wer langsame und/oder weit entfernte Nameserver in seine resolv.conf einträgt, hat IMHO selbst schuld ;)

Ansonsten ist httpd-2.2.17/srclib/apr/network_io/unix/sockaddr.c#585 dafür zuständig.
 
Das streite ich nicht ab, dennoch sind die paar Milisekunden verschmerzbar, es geht hier ja nicht um "Realtime"-Anwendungen.
Ich habe bei Hetzner mit diesem Setup circa 4-6 Milisekunden zusätzliche Verzögerung, das ist mit minimal optimiertem und komprimiertem Content (HTML/CSS/JS/Grafiken) deutlich und spürbar kompensiert.
Datenbankabfragen saugen oft deutlich mehr, als diese Hostname-Lookups.

Egal, es muss jeder für sich selbst entscheiden, wie zuverlässig seine Logs und deren Auswertung sein sollen.
 
Back
Top