Ada jawaban singkat dan ada jawaban panjang. Jawaban singkatnya, yang akan memenuhi kebutuhan Anda dalam sebagian besar kasus, adalah:
/var/lib/docker/containers/<container_id>/<container_id>-json.log
Dari sini Anda perlu mengirimkan log ke lokasi pusat , dan mengaktifkan rotasi log untuk kontainer Docker Anda.
Di mana Log Kontainer Docker Disimpan secara Default?
Anda lihat, secara default, kontainer Docker mengeluarkan log ke aliran keluaran stdout dan stderr . Kontainer tidak memiliki kewarganegaraan , dan log disimpan di host Docker dalam file JSON secara default .
Mengapa?
Driver logging default adalah json-file . Apa itu driver logging?
Driver logging adalah mekanisme untuk mendapatkan informasi dari container Anda yang sedang berjalan. Berikut penjelasan lebih rinci dari dokumen Docker . Ada beberapa driver log berbeda yang dapat Anda gunakan kecuali file json default, seperti syslog, journald , fluentd, atau logagent .
Log ini dikeluarkan dari aliran keluaran, dianotasi dengan asal log, baik stdout atau stderr, dan stempel waktu. Setiap file log hanya berisi informasi tentang satu kontainer dan dalam format JSON. Ingat, satu file log per kontainer .
Anda menemukan file log JSON ini di /var/lib/docker/containers/
direktori pada host Docker Linux. Itu <container_id>
ini adalah id dari container yang sedang berjalan.
/var/lib/docker/containers/<container_id>/<container_id>-json.lo
Jika Anda tidak yakin id mana yang terkait dengan kon mana, Anda dapat menjalankannya docker ps
perintah untuk mencantumkan semua container yang sedang berjalan. Id penampung terletak di kolom pertama.
docker ps
[Output]
CONTAINERID IMAGE COMMAND CREATED STATUS PORTS NAMES
cf74b6fce535 foo_image "node app.js" X min ago Up X min 3000/tcp foo_app
Sekarang Anda tahu di mana log kontainer disimpan, dan Anda dapat terus memecahkan masalah dan men-debug masalah apa pun yang muncul.
Di sinilah peran logging . Anda mengumpulkan log dengan agregator log dan menyimpannya di tempat yang akan tersedia selamanya. Menyimpan log pada host Docker berbahaya karena dapat menumpuk seiring waktu dan memakan ruang disk Anda. Itu sebabnya Anda harus menggunakan lokasi pusat untuk log Anda dan mengaktifkan rotasi log untuk kontainer Docker Anda.
Men-debug Masalah Docker dengan Log Kontainer
Docker memiliki API khusus untuk bekerja dengan log. Namun perlu diingat, ini hanya akan berfungsi jika Anda menggunakan driver log file json. Saya sangat menyarankan untuk tidak mengubah driver log! Mari kita mulai melakukan debug.
Pertama-tama, untuk membuat daftar semua container yang sedang berjalan, gunakan docker ps
memerintah.
docker ps
Lalu, dengan perintah Anda dapat membuat daftar log untuk wadah tertentu.
docker logs <container_id>
Seringkali Anda akan menelusuri log-log ini secara real-time, atau memeriksa beberapa baris log terakhir.
Menggunakan --follow
atau -f
akan tail -f
(ikuti) log kontainer Docker:
docker logs <container_id> -f
Perintah --tail
akan menunjukkan jumlah baris log terakhir yang Anda tentukan:
docker logs <container_id> --tail N
Perintah -t
atau --timestamp
akan menampilkan stempel waktu dari baris log:
docker logs <container_id> -t
Itu --details flag akan menampilkan detail tambahan tentang baris log:
docker logs <container_id> --details
Namun bagaimana jika Anda hanya ingin melihat log tertentu? Untungnya, grep juga berfungsi dengan log Docker.
docker logs <container_id> | grep pattern
Perintah ini hanya akan menampilkan kesalahan:
docker logs <container_id> | grep -i error
Setelah aplikasi mulai berkembang, Anda cenderung mulai menggunakan Docker Compose. Jangan khawatir, ia juga memiliki perintah logs.
docker-compose logs
Ini akan menampilkan log dari semua layanan dalam aplikasi yang ditentukan dalam file konfigurasi Docker Compose.
Menyimpan Log Kontainer Docker di Lokasi Pusat Menggunakan Pengirim Log
Dengan berkembangnya infrastruktur Anda, Anda hanya dapat mengandalkan penggunaan Docker API untuk memecahkan masalah log. Anda perlu menyimpan semua log di tempat yang aman, sehingga Anda dapat menganalisis dan memecahkan masalah apa pun setelah kejadian tersebut.
Anda memerlukan aliran log yang stabil sehingga Anda bisa mendapatkan wawasan yang dapat ditindaklanjuti tentang apa yang terjadi pada container Docker Anda. Menyiapkan rotasi log hanyalah langkah pertama.
Dengan menyimpan log di satu tempat, Anda juga dapat mengatur peringatan yang memberi tahu Anda jika ada yang rusak, atau kapan pun Anda mengalami perilaku tidak terduga.
Log kontainer dapat berupa campuran pesan teks biasa dari skrip awal dan log terstruktur dari aplikasi, sehingga menyulitkan Anda untuk mengetahui peristiwa log mana yang termasuk dalam kontainer dan aplikasi tertentu.
Meskipun driver log Docker dapat mengirimkan log ke alat manajemen log , sebagian besar driver log Docker tidak mengizinkan Anda mengurai log kontainer. Anda memerlukan alat terpisah yang disebut pengirim log, seperti Logagent , Logstash atau rsyslog untuk menyusun dan memperkaya log sebelum mengirimkannya.
Solusinya adalah dengan memiliki wadah yang didedikasikan khusus untuk penebangan dan pengumpulan kayu. Anda menyebarkan kontainer logging khusus dalam lingkungan Docker Anda. Ini akan secara otomatis mengumpulkan log dari semua penampung, serta memantau, menganalisis, dan menyimpan atau meneruskannya ke lokasi pusat.
Hal ini mempermudah pemindahan container antar host dan menskalakan infrastruktur Anda dengan mudah. Ini juga memungkinkan Anda mengumpulkan log melalui berbagai aliran, termasuk peristiwa log, data Docker API, statistik, dll.
Inilah yang saya sarankan Anda gunakan. Sejauh ini, cara pengumpulan log yang paling andal dan nyaman adalah dengan menggunakan driver file json dan menyiapkan pengirim log untuk mengirimkan log. Anda selalu memiliki salinan log lokal di server Anda dan Anda mendapatkan keuntungan dari manajemen log terpusat .
Jika Anda menggunakan Sematext Logagent, ada beberapa langkah sederhana yang harus diikuti untuk mulai mengirim log ke Sematext. Setelah membuat Aplikasi Log , jalankan perintah ini di terminal.
docker pull sematext/logagent
docker run -d --restart=always --name st-logagent \
-e LOGS_TOKEN=YOUR_LOGS_TOKEN \
-e LOGS_RECEIVER_URL="https://logsene-receiver.sematext.com" \
-v /var/run/docker.sock:/var/run/docker.sock \
sematext/logagent
Ini akan mulai mengirimkan semua log kontainer ke Sematext.
Anda dapat membaca selengkapnya tentang cara kerja Logagent dan cara menggunakannya untuk memantau log di postingan kami di Docker Container Monitoring dengan Sematext .
Kesimpulan
Ini dia, jawaban singkat dan panjang tentang di mana log Docker Container disimpan. Secara default, Docker menggunakan driver log file json yang menyimpan log di direktori khusus pada host:
/var/lib/docker/containers/<container_id>/<container_id>-json.log
Jawaban panjangnya, dan yang saya sarankan Anda lakukan, adalah menyiapkan container logging khusus yang akan menyusun dan memperkaya log container Anda, lalu mengirimkannya ke lokasi pusat. Hal ini membuat pemecahan masalah dan pencarian log menjadi lebih mudah. Tapi, Anda juga mendapat peringatan yang merupakan poin utamanya. Anda ingin mengetahui kerusakan apa yang terjadi sebelum pengguna Anda melakukannya.
Sebelumnya diterbitkan di https://sematext.com/blog/docker-logs-location
Sekian dan Terimakasih.....