Foutopsporing in je access logs
Algemeen
Deze handleiding gaat er vanuit dat je JSON access logs gebruikt en werkt niet met de oude manier van logopslag. Op dit moment is dit opt-in en kan je dit aanvragen indien je hier gebruik van wilt maken.
Alle aanvragen voor je website worden opgeslagen in de logs map (/var/hpwsites/<u_gebruiker>/logs. Omdat deze log bestanden dagelijks roteren staat er in de access.log maar aan 1 dag data. Je kan tot 30 dagen terug in de tijd met deze bestanden.
Alle aanvragen worden via een vast-formaat JSON opgeslagen in je access.log. En bevat de volgende elementen:
- {
- "host": "www.example.local",
- "remote_addr": "1.1.1.1",
- "remote_user": "",
- "time_local": "2026-03-18T03:18:01+01:00",
- "req_method": "GET",
- "req_uri": "/example",
- "status": "200",
- "protocol": "HTTP/1.1",
- "body_bytes_sent": "24778",
- "request_time_secs": "0.216",
- "http_referer": "",
- "http_user_agent": "Mozilla/5.0 (Windows NT 6.3; x64) AppleWebKit/537.36 (KHTML, like Gecko) Edge/90.0.0.0 Safari/537.36",
- "http_x_forwarded_for": "",
- "hpw_trace_id": "2d92674ea8e0daf152c284b909fadad4",
- }
Basic: jq
De data in je access.log kun je heel eenvoudig doorzoeken met het 'JSON-zakmes': jq. Deze tool is ideaal voor simpele queries; als je eenmaal bekend bent met de syntax, vind je razendsnel de informatie die je zoekt. Omdat er online veel documentatie over jq beschikbaar is, beperken we ons hier tot een paar handige voorbeelden die je zelf naar wens kunt aanpassen:
Alle aanvragen met een status code 403:
- cat access.log | jq 'select(.status == "403")'
Zoek /wp-login.php aanvragen met een status code 500:
- cat access.log | jq 'select(.req_uri == "/wp-login.php" and .status == "500")'
Toon alleen de lijst met ip adressen voor aanvragen met een status code 200:
- 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 een standaard view (access_log) voor je aangemaakt. Deze view leest 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!
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;"
Specifieke HPW-trace-id zoeken (deze staat ook in de response headers):
- duckdb -c "SELECT * FROM access_log WHERE hpw_trace_id == 'b4a2e1dea03ad434443d19dfee6c240a';"
Related Articles
Mcrypt is verleden tijd: dit is wat je nu moet doen
In 2017 komt PHP 7.2 uit en met deze nieuwe versie verdwijnt de verouderde en onveilige PHP-Mcrypt module definitief. Mcrypt wordt al enige tijd afgeraden omdat het niet meer veilig en betrouwbaar is. Toch blijkt uit enkele steekproeven dat sommige ...
Bescherm je website tegen Clickjacking
Een tijd terug ontvingen we een melding via ons security bounty programma. Een oplettende deelnemer had ontdekt dat onze website gevoelig was voor clickjacking. Clickjacking is een techniek waarbij kwaadwillenden gebruikers ongemerkt laten klikken op ...
Canonical URL's en hoe je ze gebruikt
Het ontbreken van canonical links kan problemen opleveren bij de indexering door crawlers, omdat dit kan leiden tot een oneindig aantal pagina's dat geïndexeerd moet worden. Canonical URL's zijn een belangrijk concept in zoekmachineoptimalisatie ...
Optimaliseer je beveiliging met een security.txt policy
Bij LinQhost staat security altijd voorop. Toch kan het gebeuren dat er iets over het hoofd wordt gezien, hoe zorgvuldig je ook bent. Gelukkig zijn er ethische hackers, ook wel white hat hackers genoemd, die graag kwetsbaarheden opsporen en melden. ...
Waarom we geen toegang tot je root server geven
Bij LinQhost bieden we geen root- of sudo-toegang tot onze servers. Dit komt doordat we alleen managed hostingdiensten aanbieden. Dit betekent dat wij jouw server beheren en onderhouden, zodat we kunnen garanderen dat alles veilig, stabiel en ...