Si vous êtes responsable du fonctionnement des serveurs web, vous savez déjà qu’un accès facile aux messages de journal est essentiel pour résoudre les problèmes. Apache fournit une prise en charge complète de la journalisation, et sa configuration hautement personnalisable vous permet d’adapter sa journalisation à vos besoins exacts. Vous pouvez obtenir une visibilité sur vos serveurs web en enregistrant tout, de la demande initiale au processus de mappage D’URL et à la fin de la connexion., Et si cela ne suffisait pas, des modules tiers fournissent des fonctionnalités de journalisation supplémentaires telles que la prise en charge des temps d’exécution des applications, y compris les programmes PHP, Java et CGI.
dans cet article, je vais vous montrer comment utiliser les deux différents mécanismes de journalisation dans Apache et comment trouver les données dont vous avez besoindans vos journaux lors de l’enquête sur les problèmes.
la Directive ErrorLog
Les erreurs et les avertissements de diagnostic sur les serveurs web signifient généralement que les utilisateurs ne peuvent pas accéder aux pages et aux ressources dont ils ont besoin, et le premier endroit que tout administrateur recherchera est dans le journal des erreurs du serveur Apache., Ainsi, theErrorLog est le fichier journal Apache le plus important pour le dépannage. Il contient les informations dont vous aurez besoin pour comprendre pourquoi les erreurs se produisent et quels utilisateurs sont affectés.
l’emplacement du journal des erreurs est contrôlé avec la directive ErrorLog. Par défaut, vous pouvez le trouver dans un fichier (erreur.log) mais il est également possible d’envoyer le journal des erreurs à un démon syslog ou de le rediriger vers un programme utilisant Apachesupport pour les journaux pipés.,
la directive ErrorLogFormat vous permet de créer l’apparence des messages d’erreur wayserver et les données qu’ils contiennent en plus du message de logmessage émis par le code interne D’Apache. Apache envoie une plage de différentsmessages à error.journal, de sorte qu’il’ssometimes difficile de les différencier et de trouver celui que vous cherchez. En profitant de L’ErrorLogFormatdirective, vous serez en mesure de trouver les messages dont vous avez besoin plus rapidement.,
bien sûr, vous n’avez pas besoin de spécifier votre propre format, car un format par défaut est fourni par Apache, mais en utilisant ErrorLogFormat, vous pouvez créer des données de journal plus pertinentes et exploitables.,
Par exemple, la directive ErrorLogFormat suivante affiche un horodatage, la gravité du message de journal, L’ID de processus du serveur web, le fichier source et le journal où le journal a été généré, et enfin le message lui-même:
ErrorLogFormat " %F %M"
le format produit des messages d’erreur qui ressemblent à style printf() formatstrings., Cela montre à quel point les capacités de journalisation Apache sont flexibles—Apachefournit la possibilité de personnaliser l’endroit où les messages d’erreurs du serveur sont envoyés etvous permet de contrôler leur format, afin que vous puissiez inclure toutes les informations dont vous avez besoin.
la Directive CustomLog
chaque fois qu’un utilisateur visite votre site, Apachestores des informations sur les chemins auxquels il a accédé dans access.journal., Cela vous donne un moyen utile de surveiller des choses comme les sections les plus populaires de votre site, vous permet de voir les adresses à partir desquelles les utilisateurs se connectent et indique quels codes D’état HTTP ont été renvoyés par yourserver pour chaque demande. Les adresses de connexion et les codes D’état HTTP peuvent êtredes indices précieux lors du dépannage ultérieur et de l’enquête sur les problèmes.
tout comme le journal des erreurs, vous pouvez configurer leformat du journal d’accès en utilisant des chaînes de format avec la directive LogFormat., Chaque LogFormatoption nécessite un identifiant unique, vous pouvez donc créer plus d’un logformat pour stocker les messages de journal de différentes manières.
par exemple, voici un exemple de deux formats de journal différents écrivant chacun dans des fichiers séparés. Le premier format suit le format de journal commun (CLF est pris en charge par de nombreuses applications, il est donc souvent utilisé comme format de journalisation pour les serveurs web), et le second format affiche uniquement le référent et la demande D’URL:
Les entrées pour ces formats ressemblent à ceci:
access.log
127.0.0.1 - - "GET / HTTP/1.1" 200 11229
référent.,log
- -> /index.html
en combinant une directive LogFormat avec CustomLog,vous pouvez diriger les messages de journal vers différents fichiers.
non seulement vous pouvez écrire des messages de journal d’accès à plusieurs fichiers journaux, mais vous pouvez également conditionner l’écriture de messages de journal à un attribut de la demande. SetEnvIfdirective vous permet de définir environmentvariables si une condition est vraie. Ensuite, vous pouvez utiliser la clauseenv= dans vos directives CustomLog pour activer loggingonly si cette variable d’environnement est définie.
Voici un exemple de journalisation de toutes les requêtes de localhost vers un fichier dédié nommé local.,log:
SetEnvIf Remote_Addr "127\.0\.0\.1" localaddrCustomLog ${APACHE_LOG_DIR}/local.log common env=localaddr
Cette règle tire parti de la variable Apache Remote_Addr, qui enregistre l’adresse IP du client effectuant la demande. La liste complète des Apachevariables est disponible dans la documentation Apache. Si vous utilisez SolarWinds ® Papertrail™ search, vous pouvez utiliser ces variables pour résoudre rapidement les problèmes.
analyse des journaux D’erreur et D’accès
Une fois que vous avez écrit des messages de journal dans vos fichiers journaux, vous avez besoin d’un moyen de les extraire. Bien sûr, vous pouvez les envoyer directement à Papertrail où vous pouvez suivre, rechercher et analyser les journaux en direct et stockés., Si vous ne les envoyez pas à Papertrail, vous pouvez utiliser des outils de fichiers standard tels que cat, less et tail. Si vous utilisez la commande tail, elle imprime les 10 dernières lignes d’un fichier par défaut, mais vous pouvez contrôler exactement le nombre de lignes affichées avec le paramètre-N. Pour lire les 25 dernières lignes d’access.log, vous devez faire:
tail -n25 access.log
la fonction Papertrail live tailyour vous permet de suivre vos journaux et de voir en permanence les nouveaux événements au fur et à mesure qu’ils se produisent., Vous pouvez mettre en pause, rechercher et faire défiler l’historique du journal et même cliquer sur des éléments pour jumpto entrées de journal connexes, tels que tous ceux avec une adresse IP spécifique.
Si votre serveur Web reçoit beaucoup de trafic, il est difficile de rechercher manuellement dans vos journaux en raison de leur taille. Au lieu de cela, vous devez vous tourner vers la syntaxe de recherche de la solution Papertrail, qui vous permet de créer des expressions puissantes correspondant aux chaînes que vous essayez de trouver., Voici un exemple de chaîne de recherche pour trouver tous les messages contenant 404 codes D’état HTTP:
HTTP 404
Si vous travaillez avec des fichiers journaux à partir de sources multiples telles que PHP, Apache ou JSON, il peut être intéressant de regarder un outil de gestion de journaux comme Papertrail.
Conclusion
gérer efficacement les serveurs Web signifie que vous devez être capable de comprendre leur comportement et leurs performances. Lorsque les utilisateurs commencent à signaler des pages qui ne se chargent pas ou que les connexions s’interrompent, vous avez besoin d’un moyen de regarder sous le capot de vos serveurs web pour voir ce qui se passe., Les messages de connexion exploitables sont la clé pour maintenir votre site opérationnel.
Apache fournit un tas d’options pour stocker les messages de journal dans les fichiers. Avec les directives ErrorLog et CustomLog, vous pouvez personnaliser l’endroit où les messages sont écrits et leur format. Le fractionnement des messages logmessages en plusieurs fichiers est possible avec plus d’une directive, et avec la prise en charge d’Apache pour les variables d’environnement, vous pouvez profiter de conditionalstatements pour choisir exactement quand les messages de journal doivent être écrits.