J'exécute Apache2 dans un conteneur Docker et je ne veux rien écrire sur le disque, en écrivant les journaux sur stdout et stderr. J'ai vu quelques façons différentes de le faire ( Supervisord et stdout/stderr , Journal d'accès Apache à stdout ) mais cela ressemble à des hacks. N'y a-t-il aucun moyen de le faire par défaut?
Pour être clair, je ne veux pas réduire le journal, car cela entraînera l'écriture de choses sur le disque dans le conteneur.
ErrorLog /dev/stderr
TransferLog /dev/stdout
travaille sur ubuntu et centos pour moi
Que diriez-vous de placer cela dans votre Dockerfile après l'installation du package Apache2?
RUN ln -sf /proc/self/fd/1 /var/log/Apache2/access.log && \
ln -sf /proc/self/fd/1 /var/log/Apache2/error.log
En supposant que c'est le chemin des journaux. C'est pour Ubuntu 14.04 et fonctionne également pour Ubuntu 16.04.
Remarque: si vous êtes certain que les liens symboliques /dev/stdout
ou /proc/stderr
sont là, vous pouvez également les utiliser. Je préfère le chemin vers le vrai fichier car il est garanti présent.
Pas spécifiquement une réponse demandée mais peut-être une meilleure façon, selon votre scénario, serait de ne pas vous connecter du tout à stdout/stderr. Il suffit de diriger les journaux vers cat au format JSON. Cela supprimerait la nécessité de différencier les flux car le json pourrait avoir les données nécessaires pour les distinguer. par exemple quelque chose dans le sens de ce qui suit. Cela peut ensuite être ingéré beaucoup plus facilement dans quelque chose comme graylog
GlobalLog "| cat - " gelf
ErrorLog "| cat - "
LogFormat "{ \"Apache_log\": \"ACCESS\", \"app_name\": \"Apache\", \"Connection\": \"%{X-Forwarded-Proto}i:%{X-Forwarded-Port}i \", \"X-Forwarded-For\": \"%{X-Forwarded-For}i\", \"version\": \"1.1\", \"vhost\": \"%V\", \"short_message\": \"%r\", \"timestamp\": %{%s}t, \"level\": 6, \"user_agent\": \"%{User-Agent}i\", \"source_ip\": \"%a\", \"duration_usec\": %D, \"duration_sec\": %T, \"request_size_byte\": %O, \"http_status\": %s, \"http_request_path\": \"%U\", \"http_request\": \"%U%q\", \"http_method\": \"%m\", \"http_referer\": \"%{Referer}i\", \"X-Powered-By\": \"%{X-Powered-By}i\" }" gelf
ErrorLogFormat "{ \"app_name\": \"Apache\", \"Apache_log\": \"ERROR\", \"time\":\"%{%Y-%m-%d}tT%{%T}t.%{msec_frac}tZ\", \"function\" : \"[%-m:%l]\" , \"process\" : \" [pid %P:tid %T] \" , \"message\" : \"%M\" ,\ \"referer\"\ : \" %{Referer}i \" }"
Il existe également un module de journalisation gelf, vous pouvez donc diffuser directement d'Apache vers un serveur de type graylog si vous le souhaitez