Mergelog: logbestanden samenvoegen en sorteren op datum

Mergelog is een lichtgewicht C-programma waarmee logbestanden in Common Log Format (CLF) van meerdere webservers kunnen worden samengevoegd en chronologisch gesorteerd. Het programma is met name geschikt voor omgevingen waarin meerdere webservers achter een round-robin DNS of een load balancer draaien.

Naast Mergelog wordt zmergelog meegeleverd, waarmee ook gzip-gecomprimeerde logbestanden kunnen worden verwerkt.

Kenmerken

  • Samenvoegen van meerdere webserver-logbestanden
  • Chronologisch sorteren van logregels
  • Ondersteuning voor Common Log Format (CLF)
  • Verwerking van gzip-gecomprimeerde logbestanden via zmergelog
  • Geschikt voor grote logbestanden
  • Ideaal voor centrale loganalyse met bijvoorbeeld Webalizer

Vereisten

Voordat je begint, zorg ervoor dat:

  • FreeBSD is geïnstalleerd.
  • De FreeBSD Ports Collection beschikbaar is.
  • Webalizer (optioneel) is geïnstalleerd wanneer de samengevoegde logs geanalyseerd moeten worden.
  • De externe server toegankelijk is via FTP (of pas het voorbeeld aan naar SCP/SFTP).

Installatie

Installeer Mergelog via de FreeBSD Ports Collection.

cd /usr/ports/www/mergelog
make install clean

Controleer vervolgens of het programma correct is geïnstalleerd.

which mergelog

De uitvoer is vergelijkbaar met:

/usr/local/bin/mergelog

Webalizer configureren

Wanneer Webalizer wordt gebruikt, moet deze de loggegevens via stdin kunnen lezen.

Open het configuratiebestand.

ee /usr/local/etc/webalizer.conf

Zoek de bestaande instelling:

#LogFile /var/log/httpd-access.log

Wijzig deze naar:

LogFile -

Hierdoor leest Webalizer de loggegevens uit een pipe of een samengevoegde logstroom.


Logbestanden ophalen vanaf een tweede server

Stap 1 – Directory aanmaken

Maak een directory aan waarin de externe logbestanden worden opgeslagen.

mkdir -p /var/log/merge

Stap 2 – Downloadscript maken

Maak het script aan.

ee /usr/sbin/merge-logfile.sh

Voeg de volgende inhoud toe.

#!/bin/sh

SOURCE_DIR=/
DEST_DIR=/var/log/merge

USER=log
PASSWORD="markhost"
REMOTE_BOX=192.168.1.142

ACCESS_LOG=httpd-access.log
SSL_LOG=httpd-ssl_request.log

cd "$DEST_DIR" || exit 1

ftp -in <<EOF
open $REMOTE_BOX
user $USER $PASSWORD
binary
cd $SOURCE_DIR
get $ACCESS_LOG
get $SSL_LOG
bye
EOF

Maak het script uitvoerbaar.

chmod +x /usr/sbin/merge-logfile.sh

Voer het script uit.

/usr/sbin/merge-logfile.sh

Logbestanden samenvoegen

Maak een tweede script.

ee /usr/sbin/mergelog.sh

Voeg toe:

#!/bin/sh

/usr/local/bin/mergelog \
    /var/log/httpd-access.log \
    /var/log/merge/httpd-access.log

Maak ook dit script uitvoerbaar.

chmod +x /usr/sbin/mergelog.sh

Voer het script uit.

/usr/sbin/mergelog.sh

Resultaat controleren

Controleer of de uitvoer correct is samengesteld.

head /var/log/merged-access.log

Of controleer de meest recente logregels.

tail /var/log/merged-access.log

Automatiseren met cron

Om de logbestanden automatisch op te halen en samen te voegen kan een cronjob worden toegevoegd.

Open de crontab.

crontab -e

Voeg bijvoorbeeld toe:

*/15 * * * * /usr/sbin/merge-logfile.sh && /usr/sbin/mergelog.sh

Hiermee worden de logbestanden iedere 15 minuten opgehaald en samengevoegd.


Veelvoorkomende problemen

FTP-verbinding mislukt

Controleer:

  • IP-adres van de externe server.
  • Firewallregels.
  • FTP-gebruikersnaam en wachtwoord.
  • Toegangsrechten op de logbestanden.

Geen uitvoerbestand

Controleer of:

  • beide logbestanden bestaan;
  • Mergelog correct is geïnstalleerd;
  • de gebruiker schrijfrechten heeft op /var/log/merge.

Logregels staan niet op volgorde

Controleer of alle servers dezelfde tijdzone gebruiken en of de systeemtijd via NTP wordt gesynchroniseerd.


Aanbevolen verbeteringen

De bovenstaande voorbeelden gebruiken FTP omdat dit overeenkomt met de oorspronkelijke configuratie. Voor productieomgevingen wordt echter SFTP of SCP met SSH-sleutels aanbevolen. Deze protocollen versleutelen zowel de verbinding als de authenticatie en zijn aanzienlijk veiliger dan FTP.


Zie ook

Add a Comment

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *