For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/manage-and-operate/observability/logs-data-platform/apache-logs.md.

Envoyer des logs depuis un logiciel - Apache

Voir en Markdown

Découvrez en temps réel ce qui se passe sur vos sites web.

Objectif

Les logs d'accès Apache sont très précieux. Ils montrent l'activité de vos visiteurs, le temps de livraison des pages, les résultats de code, l'agent utilisateur ayant accédé à vos sites web, etc. Logs Data Platform vous aide à analyser en profondeur cette information clé.

La ligne de log Apache par défaut ressemble à ceci :

51.255.160.250 - - [23/Jan/2016:19:33:03 +0100] "GET / HTTP/1.1" 200 14211 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"

Cette ligne donne déjà beaucoup d'informations, mais il peut être difficile d'extraire des données réellement utiles de logs en texte brut. Vous savez peut-être déjà qu'il existe de nombreuses façons d'exporter vos logs Apache : logstash, beats, graylog-collector, syslog-ng, rsyslog, le module apache gelf. Mais comme il reste encore beaucoup à explorer sur Logs Data Platform, commençons par quelque chose de simple.

Ce guide vous présente trois méthodes non intrusives pour envoyer des logs vers Logs Data Platform :

  • demander à Apache d'envoyer les entrées de log directement à la plateforme.
  • utiliser syslog-ng pour parser et envoyer tous vos logs
  • configurer filebeat avec le module apache

Prérequis

Pour suivre ce guide, vous aurez besoin de :

En pratique

Utiliser Apache pour envoyer les logs directement

Warning

La procédure suivante a l'avantage d'une configuration rapide mais n'est pas du tout recommandée en production, car elle peut bloquer le processus Apache en cas de trafic important. En production, veuillez utiliser une solution non bloquante comme la seconde solution de ce guide, ou celle-ci : Envoyer des logs vers Logs Data Platform avec Filebeat

Configuration globale d'Apache

Nous allons d'abord configurer Apache2 pour envoyer les logs de tous les Virtual Hosts vers un seul flux.

Warning

Si vous avez une configuration liée aux logs dans vos virtual hosts, vous devez la retirer ou vous rendre à la section suivante pour ajouter une configuration spécifique à un virtual host.

Nous utilisons la directive de format CustomLog pour transformer les logs Apache au format LTSV et les envoyer vers Logs Data Platform avec le jeton OVHcloud approprié. Notez que 3 champs sont obligatoires avec le format LTSV : host, message et time (au format RFC 3339). Reportez-vous aux exemples ci-dessous pour savoir comment renseigner ces champs. Veuillez créer le fichier /etc/httpd/conf-enabled/ldp.conf ou /etc/apache2/conf-enabled/ldp.conf (l'emplacement du fichier dépend de votre distribution et de votre version d'Apache) et insérez ce qui suit :

 LogFormat "X-OVH-TOKEN:XXXXXXXXXXX\tdomain:%V\thost:%h\tserver:%A\ttime:%{sec}t\tident:%l\tuser:%u\tmethod:%m\tpath:%U%q\tprotocol:%H\tstatus_int:%>s\tsize_int:%b\treferer:%{Referer}i\tagent:%{User-Agent}i\tresponse_time_int:%D\tcookie:%{cookie}i\tset_cookie:%{Set-Cookie}o\tmessage:%h %l %u %t \"%r\" %>s %b\n" combined_ltsv
 CustomLog "|/usr/bin/openssl s_client -connect <your_cluster>.logs.ovh.com:12201" combined_ltsv
 ErrorLog syslog:local1

Si vous devez envoyer vos logs vers un flux supplémentaire, vous devrez répéter cet extrait et changer le nom combined_ltsv du LogFormat de votre nouvel extrait vers un nouveau nom. Notez que vous devrez remplacer l'adresse et le port de <your_cluster>.logs.ovh.com par ceux qui vous ont été attribués (consultez la page Home pour les récupérer). Assurez-vous que le chemin complet d'openssl est correct pour votre système, sinon cela ne fonctionnera pas. Assurez-vous également que votre X-OVH-TOKEN est correctement renseigné. Ce tutoriel couvre uniquement l'envoi de vos logs d'accès vers Logs Data Platform. Pour envoyer vos logs d'erreur, vous devez configurer votre template syslog pour envoyer les logs vers Logs Data Platform. Enfin, vérifiez que vous n'utilisez aucune option CustomLog dans votre configuration VirtualHost, car la configuration VirtualHost est prioritaire sur la configuration globale.

Configuration VirtualHost

Si vous souhaitez envoyer uniquement les logs d'un VirtualHost spécifique, ou envoyer des informations spécifiques sur un VirtualHost, utilisez cette configuration pour envoyer les logs vers Logs Data Platform :

<VirtualHost *:80>
   ServerName www.example.com
   ServerAlias example.com
   DocumentRoot /var/www/www.example.com

   LogLevel warn
   ErrorLog /var/log/httpd/www.example.com_error.log
   CustomLog /var/log/httpd/www.example.com_access.log combined
   CustomLog "|/usr/bin/openssl s_client -connect `<your_cluster>`.logs.ovh.com:12201" "X-OVH-TOKEN:XXXXXXXXXXXXXX\tdomain:%V\thost:%h\tserver:%A\tident:%l\tuser:%u\ttime:%{sec}t\tmethod:%m\tpath:%U%q\tprotocol:%H\tstatus_int:%>s\tsize_int:%b\treferer:%{Referer}i\tagent:%{User-Agent}i\tresponse_time_int:%D\tcookie:%{cookie}i\tset_cookie:%{Set-Cookie}o\tmessage:%h %l %u %t \"%r\" %>s %b\n"
   ErrorLog syslog:local1
</VirtualHost>

Voici ce que vous voyez sur Graylog lorsque vous envoyez vos logs. Les logs sont déjà correctement parsés et vous pouvez immédiatement lancer des recherches spécifiques dessus :

apache Logs

Utiliser un template syslog-ng

Si vous avez déjà syslog-ng sur votre hôte et que vous souhaitez profiter de ses fonctionnalités (rotation des logs, reconnexion automatique, destinations multiples). Voici les extraits de configuration vous permettant d'utiliser ce logiciel.

Configuration Apache

 LogFormat "X-OVH-TOKEN:XXXXXXXXXXX\tdomain:%V\thost:%h\tserver:%A\ttime:%{sec}t\tident:%l\tuser:%u\tmethod:%m\tpath:%U%q\tprotocol:%H\tstatus_int:%>s\tsize_int:%b\treferer:%{Referer}i\tagent:%{User-Agent}i\tresponse_time_int:%D\tcookie:%{cookie}i\tset_cookie:%{Set-Cookie}o\tmessage:%h %l %u %t \"%r\" %>s %b\n" combined_ltsv
 CustomLog /var/log/httpd/access.log combined_ltsv
 ErrorLog syslog:local1

La configuration est assez similaire à celle utilisée dans la première partie de ce document. Le seul changement est le chemin du fichier de log.

Configuration Syslog-ng

 source s_apache {
     file("/var/log/httpd/access.log" flags(no-parse));
 };

 template t_apache_access_log {
     template("type:apache-access.log\tX-OVH-TOKEN:XXXXXXXXXXXXXXXX\ttime:${APACHE.TIMESTAMP}\thost:${HOST}\tremote_ip:${APACHE.CLIENT_IP}\trequest:${APACHE.REQUEST_URL}\tstatus_code:${APACHE.REQUEST_STATUS}\treponse_size:${APACHE.CONTENT_LENGTH}\treferer:${APACHE.REFERER}\tuser_agent:${APACHE.USER_AGENT}\tmessage:${MSG}\n");
     template_escape(no);
 };

 destination dt_apache_access_ldp {
     tcp("XXX.logs.ovh.com"
         port(12201)
         tls(ca_dir("/etc/ssl/certs"))
         ts_format("rfc3339") template(t_apache_access_log)
         keep-alive(yes)
         so_keepalive(yes)
         log-fifo-size(30000)
     );
 };

 parser p_apache {
     csv-parser(columns("APACHE.CLIENT_IP", "APACHE.IDENT_NAME", "APACHE.USER_NAME",
 "APACHE.TIMESTAMP", "APACHE.REQUEST_URL", "APACHE.REQUEST_STATUS",
 "APACHE.CONTENT_LENGTH", "APACHE.REFERER", "APACHE.USER_AGENT")
     flags(escape-double-char,strip-whitespace)
     delimiters(" ")
     quote-pairs('""[]')
     );
 };

 log {
     source(s_apache);
     parser(p_apache);
     destination(dt_apache_access_ldp);
 };

Pour rester concis, cet extrait ne contient que les parties pertinentes pour le fichier de log d'accès. Le tutoriel syslog-ng couvre la configuration pour tout fichier syslog (comme le fichier de log d'erreur). Cette configuration n'est valable que pour syslog-ng 3.8+.

Format des logs Apache

Si vous souhaitez utiliser votre propre format de log et inclure des informations utiles, voici un aide-mémoire pour vous (notez que les labels suivent les conventions de nommage des champs).

Label recommandéÀ proposChaîne de format Apache mod_log_configChaîne de format nginx
timeHeure de réception de la requête%t$time_local
hostHôte distant%h$remote_addr
forwardedforEn-tête X-Forwarded-For%{X-Forwarded-For}i$http_x_forwarded_for
identLogname distant%l
userUtilisateur distant%u$remote_user
reqPremière ligne de la requête%r$request
methodMéthode de la requête%m$request_method
uriURI de la requête%U%q$request_uri
protocolProtocole demandé (généralement « HTTP/1.0 » ou « HTTP/1.1 »)%H$server_protocol
statusCode de statut%>s$status
size_intTaille de la réponse en octets, en-têtes HTTP exclus.%B (ou '%b' pour la compatibilité avec le format combined)$body_bytes_sent
reqsize_intOctets reçus, requête et en-têtes inclus.%I (mod_log_io requis)$request_length
refererEn-tête Referer%{Referer}i$http_referer
uaEn-tête User-Agent%{User-agent}i$http_user_agent
vhostEn-tête Host%{Host}i$host
reqtime_microsec_intLe temps nécessaire pour traiter la requête, en microsecondes%D
reqtime_intLe temps nécessaire pour traiter la requête, en secondes%T$request_time
cacheEn-tête X-Cache%{X-Cache}o$upstream_http_x_cache
runtime_numTemps d'exécution pour le traitement d'une requête, par exemple l'en-tête X-Runtime pour un serveur d'application ou le temps de traitement SQL pour un serveur de base de données.%{X-Runtime}o$upstream_http_x_runtime
apptime_numTemps de réponse du serveur upstream-$upstream_response_time

La liste complète des formats de log utilisables dans Apache est décrite ici mod_log_config.html

Utiliser Filebeat

Les dernières versions de Filebeat disposent d'un module dédié pour Apache2. Cette solution est prête à l'emploi à configurer et est plus adaptée à la production. La procédure complète de son installation est décrite sur cette page dans le cas d'usage des logs Apache.

Aller plus loin

Cette page vous a-t-elle aidé ?