Apache en Docker: ¿Cómo puedo "acceder.log"?

17

Recién estoy comenzando con Docker y richt, ahora estoy tratando de descubrir cómo configurar mi primer entorno Apache 2 / PHP dockerizado. Hasta ahora he estado usando máquinas virtuales Linux completas, donde usé archivos de registro que se escriben en / var / log / apache2, luego uso "logrotate" para saltar a un nuevo archivo cada día.

Los archivos de registro se utilizaron principalmente para la detección inmediata de errores (es decir, iniciar sesión en el servidor y usar menos para abrir los archivos actuales access.log y error.log) y para fail2ban.

Si estoy en lo cierto, eso no es posible en un entorno Docker, principalmente porque generalmente no puede iniciar sesión en los contenedores para echar un vistazo a los registros. También se perderán registros si se retira el contenedor.

Entonces: ¿Cuál es el método más común para trabajar con / emular / reemplazar access.log / error.log en esa situación? ¿Cuáles son las soluciones comunes para los entornos de producción y desarrollo?

Mis ideas hasta ahora incluyen el uso de un recurso compartido NFS (lento y puede causar colisiones de nombre de archivo si no es cuidadoso), y logstash (¿no estoy seguro de si vale la pena el esfuerzo y es factible para sitios más pequeños o incluso entornos de desarrollo?) Pero estoy seguro de que las personas inteligentes ¿Has encontrado mejores soluciones?

No estoy seguro si hace la diferencia, pero actualmente estoy basando mi imagen de Docker en php: 5.6-apache .

BlaM
fuente

Respuestas:

13

Todavía puede usar el docker exec -it <your container name> /bin/bashcomando para ingresar a su contenedor y hacer su trabajo habitual. O tal vez puede cambiar /bin/basha su comando o script .shde su comando para ejecutarlo.

Para sacar su archivo del contenedor, use docker cp <container name:/path/to/file> </your local machine/path/>

Y para su trabajo diario, puede usar cronpara cronjob esos comandos. Le recomiendo encarecidamente que tenga un alias de sus comandos frecuentes de acoplador. Para que pueda usar docker felizmente con algunas teclas.

El docker logs <container name/id>comando es para ver el registro de la ejecución de la imagen del acoplador. Muestra la salida de redireccionamiento a stdout.

Fony Lew
fuente
Además, docker attach <container name>es la buena manera de ver stdout desde su contenedor. Pero tenga en cuenta que si hace ctrl + d o ctrl + c, TERMINARÁ (sigkill) su tarea en curso. Por lo tanto, debe separarlo correctamente utilizando la tecla de escape ctrl+p+q. Si solo quieres usar shell en tu contenedor, prefiero usar el execcomando anterior.
Fony Lew el
6

¿Qué tal escribir acceso y registro de errores en stderr y stdout?

https://mail-archives.apache.org/mod_mbox/httpd-users/201508.mbox/%3CCABx2=D-wdd8FYLkHMqiNOKmOaNYb-tAOB-AsSEf2p=ctd6sMdg@mail.gmail.com%3E

https://gist.github.com/afolarin/a2ac14231d9079920864

EJECUTAR ln -sf / dev / stdout /var/log/nginx/access.log

EJECUTAR ln -sf / dev / stderr /var/log/nginx/error.log

Sin embargo, el registro centralizado con ELK permitiría un monitoreo más proactivo. Pero ya pensaste en eso tú mismo.

JayMcTee
fuente
1

Hasta ahora he encontrado que se mencionan varias veces " registros de la ventana acoplable ".

Soy un absoluto Docker newb, por lo que podría contener la solución a mi problema, pero hasta ahora no he entendido completamente el concepto detrás de ese comando.

Docker parece mantener todos los resultados estándar en archivos JSON en / var / lib / docker / container / y me da la oportunidad de acceder a ellos a través del comando logs.

Hasta ahora no estoy seguro de cómo usar realmente la salida.

BlaM
fuente
1

Tal vez esta característica no existía cuando se hizo la pregunta, pero con el argumento run -v puede montar un directorio en el host en un directorio en el contenedor.

docker run -v [host_dir]:[container_dir]

De esta manera, los archivos de registro (u otros) sobrevivirán cuando se elimine el contenedor y puede acceder a los archivos como si apache estuviera instalado en el host en lugar de en un contenedor.

Alternativamente, podría de alguna manera enviar archivos de registro modificados a una ubicación central. La pila de Kibana usa filebeat para lograr esto, pero debería ser posible ejecutar filebeat de forma independiente si no le importa el resto de la pila.

Erik Lievaart
fuente
1
Docker había vinculado volúmenes de montaje hace tres años.
womble
0
root@my_docker:~ # ls -l /var/log/apache2/
total 0
lrwxrwxrwx 1 root root 11 Jul 17 04:55 access.log -> /dev/stdout
lrwxrwxrwx 1 root root 11 Jul 17 04:55 error.log -> /dev/stderr
lrwxrwxrwx 1 root root 11 Jul 17 04:55 other_vhosts_access.log -> /dev/stdout
root@my_docker:~ #

la imagen de Docker que elegí solo vinculaba todos los archivos * .log a / dev / stdout y / dev / stderr, por lo que no pude leerlos.

Después de eliminar los archivos y reiniciar Apache, puedo obtener los registros de / var / log / en la ventana acoplable.

docker-compose exec apache bash -c "tail -f /var/log/apache2/*.log"
Ohad Cohen
fuente
0

En el archivo de configuración de apache puede agregar:
CustomLog / dev / stdout
ErrorLog / dev / stderr

y para ver los registros use el siguiente comando:
registros de docker container_id

S.Bao
fuente