Saya baru saja mulai dengan Docker dan richt sekarang saya mencoba mencari cara untuk mengatur lingkungan Apache 2 / PHP dockerized pertama saya. Sampai sekarang saya telah menggunakan VM Linux penuh, di mana saya menggunakan file-file log yang ditulis ke / var / log / apache2, kemudian menggunakan "logrotate" untuk melompat ke file baru setiap hari.
File log terutama digunakan untuk deteksi kesalahan langsung (mis. Log on ke server dan gunakan lebih sedikit untuk membuka file access.log dan error.log saat ini) dan untuk fail2ban.
Jika saya benar, hal itu tidak dapat dilakukan di lingkungan Docker - terutama karena Anda biasanya tidak dapat masuk ke wadah untuk melihat log. Log juga akan hilang jika wadah dihapus.
Jadi: Apa metode yang paling umum untuk bekerja dengan / meniru / mengganti access.log / error.log dalam situasi itu? Apa solusi umum untuk lingkungan produksi dan pengembangan?
Ide saya sejauh ini termasuk menggunakan berbagi NFS (lambat dan dapat menyebabkan tabrakan nama file jika tidak hati-hati), dan logstash (tidak yakin apakah itu sepadan dengan usaha dan praktis untuk situs yang lebih kecil atau bahkan lingkungan dev?) Tapi saya yakin orang pintar telah datang dengan solusi yang lebih baik?
Tidak yakin apakah itu membuat perbedaan, tetapi saat ini saya mendasarkan gambar Docker saya di php: 5.6-apache .
sumber
docker attach <container name>
adalah cara yang baik untuk melihat stdout dari wadah Anda. Tetapi harap berhati-hati bahwa Jika Anda melakukan ctrl + d atau ctrl + c, itu akan MENGHENTIKAN (sigkill) tugas Anda yang sedang berlangsung. Jadi, Anda harus melepaskannya dengan benar menggunakan kunci melarikan dirictrl+p+q
. Jika Anda hanya ingin shell ke wadah Anda, saya lebih suka menggunakanexec
perintah di atas.Bagaimana dengan menulis akses dan kesalahan log ke stderr dan 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
Namun, logging terpusat dengan ELK akan memungkinkan pemantauan yang lebih proaktif. Tapi Anda sudah memikirkannya sendiri.
sumber
Sejauh ini saya telah menemukan " buruh pelabuhan " disebutkan beberapa kali.
Saya seorang pemula Docker absolut, sehingga mungkin memegang solusi untuk masalah saya - tapi sejauh ini saya belum sepenuhnya memahami konsep di balik perintah itu.
Docker tampaknya menyimpan semua stdout output dalam file JSON di / var / lib / docker / container / dan memberi saya kesempatan untuk mengaksesnya melalui perintah log.
Sejauh ini saya tidak yakin bagaimana cara benar-benar menggunakan output.
sumber
Mungkin fitur ini tidak ada ketika pertanyaan diajukan, tetapi dengan argumen run's -v Anda dapat me-mount direktori pada host ke direktori dalam wadah.
Dengan cara ini file log (atau lainnya) akan bertahan ketika wadah dihapus dan Anda dapat mengakses file seolah-olah apache diinstal pada host daripada dalam wadah.
Atau, Anda dapat mendorong file log yang dimodifikasi ke lokasi pusat. Tumpukan Kibana menggunakan filebeat untuk mencapai hal ini, tetapi harus dimungkinkan untuk menjalankan filebeat secara independen jika Anda tidak peduli dengan sisa stack.
sumber
gambar buruh pelabuhan yang saya pilih hanya menautkan semua file * .log ke / dev / stdout dan / dev / stderr, jadi saya tidak bisa membacanya.
setelah menghapus file dan me-restart apache saya bisa mendapatkan log dari / var / log / di buruh pelabuhan.
sumber
Dalam file konfigurasi apache Anda dapat menambahkan:
CustomLog / dev / stdout
ErrorLog / dev / stderr
dan untuk melihat log gunakan perintah di bawah ini:
buruh pelabuhan log container_id
sumber