Skip to content

Gzip logfiles doorzoeken

Oudere logfiles op een server worden door logrotate vaak ingepakt met gzip (bv. access.log.10.gz). Je hoeft die bestanden niet eerst uit te pakken om erin te zoeken: met zgrep doorzoek je ze direct.


Zoeken met zgrep

zgrep werkt hetzelfde als grep, maar dan op gzip-bestanden:

zgrep "zoekterm" example-hostname-nl-access.log.10.gz

Gewone en ingepakte logs tegelijk

zgrep kan ook gewone, niet-ingepakte bestanden lezen. Met een wildcard doorzoek je dus in één keer de actuele log én alle oudere, ingepakte logs:

zgrep "zoekterm" example-hostname-nl-access.log*

Handige opties

Omdat zgrep de opties van grep doorgeeft, werken de bekende grep-opties gewoon:

Optie Betekenis Voorbeeld
-i Niet hoofdlettergevoelig zoeken zgrep -i "error" access.log*
-c Alleen het aantal treffers per bestand tonen zgrep -c "POST /checkout" access.log*
-h Bestandsnaam niet tonen voor elke regel zgrep -h "192.168.1.10" access.log*
-v Regels tonen die de zoekterm niet bevatten zgrep -v "bot" access.log.2.gz
-E Zoeken met een uitgebreide reguliere expressie zgrep -E " 50[0-9] " access.log*

Handige varianten

Gebruik zcat om de inhoud uit te pakken naar de terminal en combineer het met andere commando's. Bijvoorbeeld de 10 IP-adressen met de meeste verzoeken:

zcat example-hostname-nl-access.log.*.gz | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

Wil je een ingepakte logfile rustig doorlezen? Gebruik zless:

zless example-hostname-nl-access.log.10.gz

Zoek binnen zless met ++slash++ gevolgd door je zoekterm, en sluit af met ++q++.

Sla de treffers op in een bestand om ze later te analyseren of te delen:

zgrep "zoekterm" example-hostname-nl-access.log* > ~/zoekresultaat.txt

Beschikbaarheid

zgrep, zcat en zless zijn standaard aanwezig op Linux-servers (Ubuntu/Debian) en op macOS. Je hoeft niets te installeren.