Squid und Logstalgia

Logstalgia (auch als Apache-Pong bekannt) ist schon was nettes. Leider kann es nur mit apache-Logfiles umgehen was den Einsatzbereich in Umgebungen in denen Squid verwendet wird schwierig macht.

Logstalgia kann nur mit ncsa-Formaten, wie sie Webserver wie Apache anliefern, umgehen. Squid hingegen hat ein eigenes, für den Einsatzzweck optimiertes Logfile-Format.

Es wäre zwar auch möglich Squid im ncsa-Format loggen zu lassen, aber dadurch verliert man wertvolle Informationen zum Caching.

Deshalb steht Squid-Logfile-Support auch auf der Wunschliste der Logstalgia-User.

Doch auch dafür gibt es jetzt eine Lösung: squid2ncsa.pl (3.04 KB)

Das Perl-Script habe ich aus dem Script squid2common.pl von Martin Gleeson zusammengeschustert.

Es nimmt auf der Standardeingabe das Squid-Logfile entgegen, wandelt es in ncsa um und gibt es auf der Standardausgabe wieder aus. Als Zuckerl macht es auch noch DNS-Lookups für die anfragenden Hosts.

Verwendet wird es so:  tail -f /var/log/squid/access.log | ./squid2ncsa.pl

Damit steht einer Weiterleitung an Logstalgia nichts mehr im Wege.

 

#!/usr/bin/perl
################################################################################
#
# squid2ncsa :       convert native squid log files into ncsa common
#                    logfile format in realtime
#
# Usage: squid2ncsa.pl
#
# Written by :       Martin Seitl (martin@seitl.at)
#
# Inspired by Martin Gleesons squid2common.pl
#
# Version History
# ~~~~~~~~~~~~~~~
# Version 0.1  2012-03-29
###############################################################################
$gmtoffset = "+0100";  ###### Offset from GMT
$address_type=2;
$vhostname = "squid";

%months = ( '0','Jan', '1','Feb', '2','Mar', '3','Apr', '4','May', '5','Jun',
          '6','Jul', '7','Aug', '8','Sep', '9','Oct', '10','Nov', '11','Dec');

%longmonths = ( '0','January', '1','February', '2','March', '3','April',
                '4','May', '5','June', '6','July', '7','August',
                '8','September', '9','October', '10','November',
                '11','December');

while (<>) {
@line = split(/\s+/,$_,10);

                        $time = $line[0];
                        $elapsed = $line[1];
                        $host = $line[2];
                        $codes = $line[3];
                        $size = $line[4];
                        $htype = $line[5];
                        $url = $line[6];
                        $ident = $line[7];
                        $hiercodes = $line[8];
                        $ContentType = $line[9];

                        ($seconds,$milliseconds) = split(/\./,$time);
                        ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($seconds);
                        $year += 1900;
                        if($mday < 10){ $mday = "0" . "$mday";} if($hour<10){ $hour="0" . "$hour";}
                        if($min < 10){ $min = "0" . "$min"; } if($sec<10){ $sec="0" . "$sec"; }

                        $www_date = "$mday/$months{$mon}/$year:$hour:$min:$sec $gmtoffset";

                        ($squidcode,$httpcode) = split(/\//,$codes);


                # convert IP into hostname
                if( $hosts{$host} ) { $name = $hosts{$host};}
                else
                {
                        if($host =~ /\d+\.\d+\.\d+\.\d+/)
                        {
                                @address = split(/\./,$host);
                                $addpacked = pack('C4',@address);
                                ($name,$aliases,$addrtype,$length,@addrs)
                                        = gethostbyaddr($addpacked,$address_type);
                                $name = $host if(!$name);
                        }
                        else
                        {
                                if ( $name eq "") { $name = $host; }
                                else { $name = $host; }
                        }
                        $name = "\L$name";

                }       
    print $vhostname.' '.$name.' - - ['.$www_date.'] "'.$htype.' '.$url.' HTTP/1.0" '.$httpcode.' '.$size.'"-" "-"';
    print "\n";
  }


Datum: 12.05.2012

Der Artikel hat dir gefallen? Dann bitte teile ihn:
(Die Buttons sind absichtlich ausgegraut, um deine Privatspähre zu schützen - Ein Klick darauf und sie werden aktiv)