- cat access.log | jq -r 'select(.status == "200") | .remote_addr'
Om de resultaten als 1 lijn terug te krijgen, kan je de -c parameter bij jq gebruiken!
Advanced: DuckDB
Het uitvoeren van complexe zoekopdrachten in grote logbestanden kan veel resources van de server vergen, wat invloed kan hebben op de prestaties van je website.
Vind je de syntax van
jq te ingewikkeld? Dan kun je op onze HPW-servers ook gebruikmaken van DuckDB. Hiermee kun je met een vertrouwde SQL-syntax geavanceerde zoekacties uitvoeren op je logbestanden! Er is uitstekende
documentatie te vinden op de site van DuckDB en ook staat de SQL syntax
gedocumenteerd.
Ook voor DuckDB geven we hieronder een paar handige voorbeelden die de kracht van deze tool laten zien. Normaal gesproken moet je in DuckDB handmatig het pad naar je access.log definiëren, maar wij hebben alvast 2 standaard views voor je aangemaakt: access_log en access_logs Deze views lezen automatisch de logs van de juiste locatie in. Je hoeft de DuckDB-commando's dus niet per se in de logmap zelf uit te voeren!
De access_log view leest alleen de access.log uit (loopt van 03:00 uur tot de 03:00 uur de volgende dag). Wil je ook de log archieven (tot 30 dagen terug) doorzoeken gebruik dan de access_logs view. Het gebruik van deze view kan wel veel meer resources gebruiken in het geval dat de logbestanden erg groot zijn.
Top 10 bezoekers:
- duckdb -c "SELECT remote_addr, count(*) FROM access_log GROUP BY 1 ORDER BY 2 DESC LIMIT 10;"
Alle 404's tussen 04:00 en 05:00:
- duckdb -c "SELECT * FROM access_log
WHERE status = '404'
AND CAST(timestamp AS TIME) BETWEEN '04:00:00' AND '05:00:00'
AND CAST(timestamp AS DATE) = current_date;"
De top 10 404 veroorzakers:
- duckdb -c "SELECT remote_addr, count(*) AS aantal_404 FROM access_log WHERE status = '404' GROUP BY remote_addr ORDER BY aantal_404 DESC LIMIT 10;"
POST requests niet afkomstig vanuit NL:
- duckdb -c "SELECT req_uri FROM access_log WHERE req_method = 'POST' and country != 'NL' LIMIT 10;"
Specifieke HPW-trace-id zoeken (deze staat ook in de response headers):
- duckdb -c "SELECT * FROM access_log WHERE hpw_trace_id == 'b4a2e1dea03ad434443d19dfee6c240a';"