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
- Webalizer
- Common Log Format (CLF)
- zmergelog
- Cron
- NTP
- Mergelog website