File::Tail - Logdateien beobachten und analysieren

| | Kommentare (0)

Ein wesentlicher Teil der Arbeit eines Systemadministrators ist die Analyse von Log-Dateien. Diese wichtige, aber auch oft langweilige und daher auch gern unterlassene Tätigkeit lässt sich mit File::Tail von Matija Grabnar automatisieren.

File::Tail funktioniert so ähnlich wie das UNIX/Linux Tool tail -f, daher auch der Name des Moduls.

Beispiel:

#!/usr/bin/perl
use strict;
use warnings;

use File::Tail;

my $logfile = '/var/log/messages';

### Defaults:
### maxinterval = 60 Sekunden
### interval = 10 Sekunden
### adjustafter = 10 Sekunden
### resetafter = adjustafter * maxinterval
### tail = 0 Nach der letzten Zeile starten
my $tail = File::Tail->new( $logfile ) or die $!;

my $line;
while ( defined( $line = $tail->read) ) {
	process_line( $line );
}

sub process_line {
	my ($line) = shift @_;
		# Machwas mit der Zeile
      	print "$line";
}

Das Programm starten und anschließend ein

$ logger  -i  'Hallo Welt'

in einem zweiten Terminal eingeben. Nach ca. 70 Sekunden (interval + maxinterval) sollte der neue Eintrag von File::Tail angezeigt werden.

Logrotate und File::Tail

File::Tail kann eigentlich gut damit umgehen, das die beobachtete Datei durch andere Programme, wie z.B. logrotate, verschoben und neu erstellt wird. Manchmal müssen dazu allerdings die Parameter maxintervall und adjustafter eingestellt werden. Optimale Werte erhält man nur durch Ausprobieren.

#!/usr/bin/perl
use strict;
use warnings;

use File::Tail;

my $logfile = '/var/log/messages';

### Defaults:
### maxinterval = 60 Sekunden
### interval = 10 Sekunden
### adjustafter = 10 Sekunden
### resetafter = adjustafter * maxinterval
### tail = 0 Nach der letzten Zeile starten
my $tail = File::Tail->new( name =>  $logfile,
                                # Die letzten 5 Zeilen beim Start ausgeben
                            tail => 5, 
                                # Datei alle 30 Sekunden pruefen 
                            maxinterval => 30,
 ) or die $!;

my $line;
while ( defined( $line = $tail->read) ) {
	process_line( $line );
}

sub process_line {
	my ($line) = shift @_;
		# Machwas mit der Zeile
      	print "$line";
}

Siehe auch:

Jetzt kommentieren

Über diese Seite

Diese Seite enthält einen einen einzelnen Eintrag von Thomas Fahle vom 30.06.09 14:05.

Screencast: Introduction to Catalyst by Dan Dascalescu ist der vorherige Eintrag in diesem Blog.

Parse::Syslog - Syslogdateien einfach parsen ist der nächste Eintrag in diesem Blog.

Aktuelle Einträge finden Sie auf der Startseite, alle Einträge in den Archiven.

Blog Roll

Powered by

Powered by Movable Type 5.2.10

Creative Commons-Lizenz

Creative Commons License
Dieses Weblog steht unter einer Creative Commons-Lizenz.