Het Apache log registreert gebeurtenissen die werden afgehandeld door de Apache webserver inclusief verzoeken van andere computers, reacties verzonden door Apache, en interne acties op de Apache server. Deze sectie van de gids legt de basisprincipes van Apache logging uit, inclusief de soorten logs die door Apache worden gegenereerd, waar ze worden opgeslagen en hoe ze te interpreteren. We behandelen ook geavanceerde onderwerpen zoals het instellen van aangepaste logformaten en het configureren van modules om rijkere gegevens te krijgen.,
typen Apache Logs
Apache genereert twee soorten logs: access logs en error logs.
Toegangslog
Het toegangslog bevat informatie over aanvragen die op de webserver binnenkomen. Deze informatie kan omvatten welke pagina ‘ s mensen bekijken, de successtatus van aanvragen, en hoe lang de server duurde om te reageren. Hier is een voorbeeld van een typische toegangslog:
Error Log
Het error log bevat informatie over fouten die de webserver heeft ondervonden bij het verwerken van verzoeken, zoals ontbrekende bestanden., Het bevat ook diagnostische informatie over de server zelf. Hier is een voorbeeld van een foutlogboek:
File does not exist: /var/www/favicon.ico
Loglocaties
standaard slaat Apache toegangs-en foutlogboeken op in afzonderlijke bestanden op de server. De exacte locatie hangt af van uw besturingssysteem., U kunt de locatie van uw Besturingssysteem vinden door op de volgende links te klikken:
Debian/Ubuntu/Linux Mint
Redhat/Fedora/CentOS configuratie
OpenSUSE
Apache Logs configureren
Apache heeft een zeer configureerbaar logboekraamwerk waarmee u het logboekgedrag globaal of voor elke virtuele host kunt aanpassen. Er zijn verschillende richtlijnen die u kunt gebruiken om het logboekgedrag te veranderen. Enkele van de meest voorkomende richtlijnen zijn de log level en log format richtlijnen, die we in meer detail zullen uitleggen.,
Log level Directive
deLogLevel
directive bepaalt het minimale niveau van de ernst van gebeurtenissen die worden gelogd naar een specifieke bestemming. Het ernstniveau geeft aan hoe belangrijk de gebeurtenis is en kan variëren van “Emerg” tot “Trace8”, waarbij “Emerg” gebeurtenissen vertegenwoordigt die tot instabiliteit kunnen leiden, en “Trace8” berichten op trace-niveau vertegenwoordigt. Bijvoorbeeld, LogLevel crit
zal logs met “Crit”, “Alert” en “Emerg” ernst toestaan, maar zal alle andere niveaus negeren.,
Logformaat
de LogFormat
richtlijn regelt de opmaak en opmaak van loggebeurtenissen. Apache gebruikt standaard het Common Log Format (CLF), maar u kunt uw eigen format string opgeven om de velden in elk logboek te wijzigen.
u kunt ook deCustomLog
richtlijn gebruiken om de locatie van het logbestand te wijzigen. In Linux schrijft Apache gewoonlijk logs naar de/var/log /apache2 of/var/log / httpd directory ‘ s afhankelijk van je besturingssysteem en virtuele host overrides., U kunt ook een LogFormat string definiëren na de bestandsnaam, die alleen de format string zal toepassen op dit bestand.
bijvoorbeeld, de volgende configuratie schrijft logs naar logs/access_log
met behulp van het standaard” common ” formaat. De logs / submap is relatief aan de map die is opgegeven in de ServerRoot directive:
LogFormat "%h %l %u %t \"%r\" %>s %b" commonCustomLog "logs/access_log" common
CustomLog” logs/access_log ” common
u kunt een volledige lijst met velden vinden in de Apache log documentatie., We raden aan om ten minste de volgende vijf velden te gebruiken, omdat deze belangrijk zijn voor het monitoren van de serverstatus en voor het oplossen van problemen:
-
%>s
– de HTTP-statuscode voor de aanvraag. Dit toont de uiteindelijke aanvraagstatus na een interne omleiding; gebruik voor de oorspronkelijke status %s. -
%U
– het URL-pad dat wordt gevraagd, met uitzondering van extra URL-parameters zoals een query-tekenreeks. -
%a
– het IP-adres van de client die het verzoek doet., Dit is handig voor het identificeren van verkeer van een bepaalde bron. -
%T
– hoe lang het duurde om het verzoek in seconden te verwerken. Dit is handig voor het meten van de snelheid van uw site. Gebruik %D om dezelfde meting uit te voeren in microseconden. -
%{UNIQUE_ID}e
– ook bekend als het verzoek-ID, Dit logt een unieke identificatie bij elke aanvraag. Dit is handig voor het traceren van een verzoek van Apache naar uw webapplicatie server.,
Nickames toewijzen
LogFormat
strings kunnen nickames toegewezen worden, die u vervolgens kunt gebruiken met een CustomLog
directive om logs te schrijven in het opgegeven formaat. Hiermee kunt u hetzelfde logformaat gebruiken voor meerdere logbestanden zonder dat u het formaat telkens opnieuw hoeft te definiëren. Dit is vooral handig bij het gebruik van verschillende logbestanden voor meerdere virtuele hosts.
bijvoorbeeld, laten we een voorbeeldformaat maken en het “vhost_combined” noemen.,”We zullen dan een CustomLog
directive aanmaken die logs naar een bestand schrijft met behulp van het vhost_combined formaat.
LogFormat "%v:%p %h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" vhost_combinedCustomLog /var/log/apache2/vhost.log vhost_combined
formatteren als JSON
uw logboeken opslaan als platte tekst maakt ze gemakkelijk te scannen voor het geval u ooit uw logbestanden moet lezen. Dit maakt het echter moeilijk om tools zoals log management oplossingen te gebruiken om uw logs te lezen, omdat deze tools moeten weten hoe uw logs worden geformatteerd. De meeste log management oplossingen ondersteunen het standaard Apache log formaat, maar als dit niet het geval is, moet je overwegen om een gestructureerd formaat zoals JSON te gebruiken.,
JSON (kort voor JavaScript Object Notation) is een flexibel formaat voor het opslaan van gestructureerde gegevens. JSON slaat een verzameling van Nestbare naam / waarde paren, zodat u bijna elk gegevenstype en structuur op te slaan. JSON is ook effectief zelf-documenteren, omdat de naam van de sleutel beschrijft de gegevens die het bevat. JSON ondersteunt vele basisgegevenstypen, waaronder strings, numbers, booleans, arrays en null-waarden.,
Hier is een voorbeeld van een LogFormat
die logs opslaat in JSON-formaat:
LogFormat "{ \"time\":\"%t\", \"remoteIP\":\"%a\", \"host\":\"%V\", \"request\":\"%U\", \"query\":\"%q\", \"method\":\"%m\", \"status\":\"%>s\", \"userAgent\":\"%{User-agent}i\", \"referer\":\"%{Referer}i\" }"
standaard virtuele Host overschrijvingen
virtuele Hosts (vhosts) worden gebruikt om meer dan één website op één Apache-server te draaien. U kunt een aparte logboekconfiguratie definiëren voor elke vhost, die voorrang krijgt boven de Algemene logboekconfiguratie. Zo kun je bijvoorbeeld elke website in een aparte directory loggen. Het verlaten van deze parameters uit standaardwaarden voor de Globale logging configuratie.
bijvoorbeeld, de volgende configuratie is voor een vhost bij voorbeeld.,com. Logs worden geschreven naar afzonderlijke access.log
en error.log
bestanden in de /var/www/example.com/logs
Map:
de volgende secties tonen de standaard configuratie bestandslocaties en richtlijnen gebruikt in verschillende Linux distributies.
Debian/Ubuntu/Linux Mint
op Debian-gebaseerde distributies kan de standaard vhost-configuratie voor niet-versleutelde sites (poort 80) worden gevonden op . De standaard vhost configuratie voor sites versleuteld met SSL/TLS (poort 443) is op /etc/apache2/sites-available/default-ssl.conf
.,
tabel met standaardrichtlijnen
* geconditioneerde omgevingsvariabele. Biedt ondersteuning voor meerdere Apache server instances.
** omgevingsvariabele. Wordt gebruikt om dynamisch het initiële logpad in te stellen.
Red Hat/Fedora/CentOS
Op Red Hat-gebaseerde distributies bevindt het hoofdinstellingenbestand zich op /etc/httpd/conf/httpd.conf
. U kunt extra vhost-configuratiebestanden plaatsen in de /etc/httpd/conf.d
map, die automatisch wordt gelezen door de server bij het starten.
tabel met standaardrichtlijnen
* afhankelijk van geladen log_config_module.,
* * afhankelijk van geladen logio_module.
OpenSUSE
In OpenSUSE bevindt de standaard vhost-configuratie voor niet-versleutelde sites (poort 80) zich op /etc/apache2/default-vhost.conf
, terwijl de standaardconfiguratie voor sites die versleuteld zijn met SSL/TLS zich bevindt op /etc/apache2/default-vhost-ssl.conf
.
tabel met standaardrichtlijnen
* afhankelijk van geladen log_config_module.
* * afhankelijk van geladen logio_module.
* * * afhankelijk van geladen mod_ssl.,
Log-gerelateerde Modules
De Apache webserver biedt een aantal modules die de manier waarop Apache werkt veranderen of de mogelijkheden ervan uitbreiden. De volgende modules voegen het logboekgedrag toe of wijzigen het op nuttige manieren.
mod_log_config
Dit is de basis logging module die Apache gebruikt, en degene die we behandeld in deze sectie van de gids.
mod_log_debug
Deze module biedt extra opties voor het loggen van debugberichten., U kunt bijvoorbeeld gebeurtenissen opslaan op een specifiek URL-pad, aanvragen registreren nadat ze zijn verwerkt, berichten van een specifieke client registreren als ze leiden tot time-outs, en meer. Merk op dat deze module experimenteel is en mogelijk niet in je Apache distributie zit.
bijvoorbeeld, de volgende configuratie registreert het IP-adres van een client wanneer deze een specifiek pad aanvraagt:
mod_log_forensic
Deze module maakt loggen mogelijk voor en na het verwerken van een verzoek. Aan elke ingang is een unieke ID toegewezen, die kan worden gebruikt om gebeurtenissen tussen het forensische logboek en het normale logboek te traceren., De forensische logger ondersteunt echter geen aangepaste formaten. Deze module vervangt ook de mod_unique_id module.
zodra de module is ingeschakeld, kunt u het sleutelwoord forensic
gebruiken om aan te geven welk logbestand het forensische log is. U kunt ook het %{forensic-id}
patroon gebruiken in andere LogFormat
strings om forensische gegevens toe te voegen aan normale logs. Hier gebruiken we /var/www/example.com/logs/forensic.log
:
elke regel in het forensische log begint met een ” + ” of ” – ” teken., “+”geeft de regel van het invoerlogboek voor dit specifieke verzoek aan, en” – ” geeft de volgende vermeldingen voor hetzelfde verzoek aan.
bijvoorbeeld, het volgende invoerlogboek werd gegenereerd door http://localhost aan te roepen met behulp van het standaard logformaat:
het eindelogboek uit dezelfde aanvraag verschijnt als:
-3264:55958cb4:0
als een eindelog niet in de log voorkomt, is de aanvraag niet voltooid.
mod_logio
Deze module voegt de mogelijkheid toe om het aantal verzonden en Ontvangen bytes per verzoek te loggen., Dit omvat ontvangen, verzonden en overgedragen bytes (combinatie van ontvangen en verzonden). De module houdt ook nauwkeurig rekening met veranderingen in grootte als gevolg van SSL-en TLS-versleuteling. Deze module vereist mod_log_config en wordt standaard meegeleverd in Apache.
Deze module voegt de LogIOTrackTTFB On|Off
richtlijn toe, die de mogelijkheid om de tijd tot eerste byte (TTFB) te volgen aan / uitschakelt. TTFB is de hoeveelheid tijd vanaf het moment dat een verzoek wordt ontvangen tot het moment waarop het antwoord voor het eerst naar de client wordt verzonden., U kunt dan %^FB
gebruiken om de ttfb-meting op te nemen in een LogFormat
tekenreeks.
mod_filter
Deze module biedt contextgevoelige filters aan de uitvoerketen door een willekeurig aantal filterproviders te registreren. mod_filter is niet specifiek voor logging, maar maakt het mogelijk om specifieke verzoeken te extraheren op basis van de filterprovider. De context containers omvatten: main apache config, vhost config, binnen directory tags, en .htaccess-bestanden.,
het gebruik van deze module maakt het mogelijk om verzoeken te filteren die items bevatten zoals bepaalde injectiecriteria, en van welk IP-adres het afkomstig is.
Deze module wordt standaard geleverd in veel van de pakketdistributies, maar vereist mogelijk inschakelen. Om te loggen, plaatst de FilterTrace-richtlijn informatie in het foutlogboek.,li> FilterDeclare
– verklaart een slimme filter
FilterProtocol
– zorgt ervoor dat de mod_filter te hanteren response headers correctFilterProvider
– registers filter providersFilterTrace
– zorgt voor het debuggen/diagnostische informatie om een fouten log boek vóór provider verwerkingin Het volgende voorbeeld is van toepassing filteren in een vhost context container voorwaardelijk op filter en omvat de modules:
mod_unique_id:
Deze module bouwt een omgevingsvariabele en een unieke id voor elk verzoek., Het is vaak opgenomen in pakket distributies, maar kan vereisen inschakelen. Deze unieke identificatie wordt naar het toegangslog geschreven.
deze module is vervangen door mod_log_forensic voor forensische doeleinden, maar wordt nog steeds ondersteund voor anderen.
In tegenstelling tot de forensische identifier, wordt de unieke identifier doorgegeven aan de Application handler via de omgevingsvariabele UNIQUE_ID. Hiermee kunnen applicatieontwikkelaars een aanvraag via de webserver traceren naar de toepassingsserver. Het kan nuttig zijn voor het debuggen van een verzoek.,
Apache draait dochterprocessen af om verzoeken af te handelen, en een dochter instantie verwerkt meerdere verzoeken tegelijk. Daarom is het soms wenselijk om een unieke identificatiecode te gebruiken om een enkele aanvraag te identificeren voor meerdere serverinstanties en dochterprocessen.
eenmaal ingeschakeld, geeft de module standaard een identifier aan de Application handler.,
bijvoorbeeld:
UNIQUE_ID: Vaf3en8AAQEAAAtoQlAAAAAA
de identifier is opgebouwd uit een 32-bits IP-adres, 32-bits proces-ID, 32-bits tijdstempel gekoppeld aan een 16-bits teller voor een strakkere resolutie dan een 32-bits thread index van één seconde. De tijdstempel component is UTC om problemen met zomertijd aanpassingen te voorkomen. De application handler dient de identifier alleen te behandelen als een ondoorzichtig token en niet te ontleden in bestanddelen.
zie het. Analyseer het. Inspecteer het. Los het op
zie wat belangrijk is.
START gratis proefperiode