Cara Menemukan Log Kontainer Pada Docker

· 5 min read
Cara Menemukan Log Kontainer Pada Docker
Photo by Adam Nowakowski / Unsplash

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.

gambar

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.....