Docker'daki Apache: “access.log” u nasıl edinebilirim?


17

Docker ve richt ile yeni başladım, şimdi ilk dockerized Apache 2 / PHP ortamımı nasıl kuracağımı anlamaya çalışıyorum. Şimdiye kadar, / var / log / apache2'ye yazılan günlük dosyalarını kullandıktan sonra her gün yeni bir dosyaya atlamak için "logrotate" komutunu kullandığım tam Linux VM'leri kullanıyorum.

Günlük dosyaları temel olarak anında hata tespiti için kullanılır (yani sunucuda oturum açın ve geçerli access.log ve error.log dosyalarını açmak için daha az kullanın) ve fail2ban için kullanılır.

Doğruysam, bu bir Docker ortamında uygulanamaz - çünkü genellikle günlüklere bakmak için kapsayıcılara giriş yapamazsınız. Kap kaldırılırsa günlükler de kaybolacaktır.

Bu durumda / emulate / replace access.log / error.log ile çalışmak için en yaygın yöntem nedir? Hem üretim hem de geliştirme ortamları için ortak çözümler nelerdir?

Şu ana kadarki fikirlerim arasında NFS paylaşımı (yavaş ve dikkatli değilse dosya adı çarpışmalarına neden olabilir) ve logstash (daha küçük siteler veya hatta geliştirici ortamlar için çabaya değip değmeyeceğinden emin değil misiniz?) daha iyi çözümler buldunuz mu?

Bir fark yaratıp yaratmadığından emin değilim, ancak şu anda Docker görüntümü php: 5.6- apache'ye dayandırıyorum .

Yanıtlar:


13

docker exec -it <your container name> /bin/bashKonteynerinize girmek ve normal işinizi yapmak için hala komutu kullanabilirsiniz . Ya da yürütmek /bin/bashiçin komutunuzu veya komutunuzun komut dosyasını değiştirebilirsiniz .sh.

Dosyanızı kapsayıcıdan çıkarmak için docker cp <container name:/path/to/file> </your local machine/path/>

Ve günlük işiniz için, cronbu komutları cronjob ile kullanabilirsiniz . Sık sık docker komutlarınızı takma ad almanızı şiddetle tavsiye ederim. Docker'ı birkaç anahtarla mutlu bir şekilde kullanabilmem için.

docker logs <container name/id>Komut liman işçisi görüntünün yürütme günlüğünü görüntüleme içindir. Stdout'a yönlendirme çıkışını gösterir.


Ayrıca docker attach <container name>, konteynırınızdan stdout'u görmenin iyi bir yoludur. Ancak, ctrl + d veya ctrl + c yaparsanız, devam eden görevinizi Feshedeceğini (sigkill) unutmayın. Bu yüzden kaçış tuşunu kullanarak doğru şekilde ayırmanız gerekir ctrl+p+q. Sadece konteynerinize kabuk eklemek istiyorsanız, execyukarıdaki komutu kullanmayı tercih ederim .
Fony Lew


1

Şimdiye kadar " docker günlükleri " birkaç kez söz bulundu .

Ben mutlak bir Docker yeniyim, bu yüzden benim sorunumun çözümü olabilir - ama şimdiye kadar bu komutun arkasındaki kavramı tam olarak anlamadım.

Docker, JSON dosyalarındaki tüm stdout çıktılarını / var / lib / docker / container / dizininde tutuyor gibi görünüyor ve bana loglar komutuyla erişme şansı veriyor.

Şimdiye kadar çıktıyı gerçekten nasıl kullanacağımdan emin değilim.


1

Belki soru sorulduğunda bu özellik yoktu, ancak run'in -v argümanıyla, ana bilgisayardaki bir dizini kaptaki bir dizine bağlayabilirsiniz.

docker run -v [host_dir]:[container_dir]

Bu şekilde, günlük (veya diğer) dosyalar kapsayıcı silindiğinde hayatta kalır ve dosyalara, bir kapsayıcı yerine ana makineye apache yüklenmiş gibi erişebilirsiniz.

Alternatif olarak, değiştirilmiş günlük dosyalarını bir şekilde merkezi bir konuma aktarabilirsiniz. Kibana yığını bunu başarmak için dosya atışı kullanır, ancak yığının geri kalanını önemsemiyorsanız dosya atımını bağımsız olarak çalıştırmak mümkün olmalıdır.


1
Docker üç yıl önce bağlama hacimlerini bağlamıştı.
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:~ #

docker görüntü Ben sadece * .log dosyaları / dev / stdout ve / dev / stderr bağlı, bu yüzden onları okuyamadı.

dosyaları kaldırdıktan ve apache yeniden başlattıktan sonra günlükleri docker / var / log / alabilirsiniz.

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

0

Apache yapılandırma dosyasına şunları ekleyebilirsiniz:
CustomLog / dev / stdout
ErrorLog / dev / stderr

ve günlükleri görmek için aşağıdaki komutu kullanın:
docker logs container_id

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.