GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Panduan Lengkap Pemula untuk Docker Logging

Pengetahuan tentang logging dengan Docker dapat sangat membantu untuk kegiatan administrasi sistem sehari-hari, baik itu pemecahan masalah atau pemantauan dasar. Tanpa pelacakan log di Docker, mitigasi masalah akan jauh lebih sulit saat menyelidiki anomali.

Artikel ini mengeksplorasi beberapa informasi penting di area tersebut untuk mempermudah memahami cara mengelola file log terkait Docker di sistem Linux Anda.

Mari saya mulai dengan menjelajahi bagian paling dasar dan secara bertahap masuk lebih dalam ke beberapa hal spesifik.

Cara melihat log Docker

Anda dapat menggunakan docker logs perintah untuk mengambil apa pun yang terjadi dengan layanan di dalam container yang sedang berjalan.

Sintaksnya sederhana:

docker logs container_name_or_ID

Anda mungkin sudah tahu bahwa Anda dapat menggunakan docker ps perintah untuk melihat nama dan ID container yang sedang berjalan.

Mari kita ambil contoh dunia nyata. Saya telah menggunakan Nextcloud dengan Docker. Wadah tersebut diberi nama nextcloud, tidak mengejutkan.

Sekarang, untuk melihat log wadah bernama nextcloud , gunakan:

docker logs nextcloud

Berikut adalah versi terpotong dari output dari perintah di atas:

172.18.0.2 - - [23/Jul/2021:19:36:09 +0000] "HEAD /.env HTTP/1.1" 302 1571 "-" "python-requests/2.26.0"
172.18.0.2 - - [23/Jul/2021:19:49:52 +0000] "HEAD /c99.php HTTP/1.1" 302 1565 "-" "python-requests/2.26.0"
172.18.0.2 - - [24/Jul/2021:16:25:23 +0000] "HEAD /backup.tar HTTP/1.1" 302 1571 "-" "python-requests/2.26.0"
172.18.0.2 - - [24/Jul/2021:16:25:24 +0000] "HEAD /backup.zip HTTP/1.1" 302 1569 "-" "python-requests/2.26.0"
172.18.0.2 - - [25/Jul/2021:20:36:01 +0000] "GET / HTTP/1.1" 302 1590 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko; compatible; BW/1.1; bit.ly/2W6Px8S) Chrome/84.0.4147.105 Safari/537.36"
172.18.0.2 - - [25/Jul/2021:20:36:07 +0000] "GET /custom_apps/richdocumentscode/proxy.php?req=/hosting/capabilities HTTP/1.1" 200 721 "-" "Nextcloud Server Crawler"
172.18.0.2 - - [25/Jul/2021:20:36:04 +0000] "GET /login HTTP/1.1" 200 7501 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko; compatible; BW/1.1; bit.ly/2W6Px8S) Chrome/84.0.4147.105 Safari/537.36"

Terlalu banyak log? Hal baiknya adalah ada berbagai opsi yang membuat melihat log buruh pelabuhan jauh lebih mudah, seperti log di Linux.

Log Tail Docker untuk melihat hanya sejumlah baris tertentu

Perintah log Docker memiliki --tail atribut yang dapat digunakan dengan cara yang mirip dengan perintah tail.

Artinya, Anda dapat menggunakannya untuk menampilkan hanya sejumlah baris log Docker dari akhir.

Misalnya, untuk melihat 50 baris terakhir wadah, Anda dapat menggunakan:

docker logs --tail 50 container_name_or_ID

Anda dapat menggunakan perintah di atas dengan cara ini juga

docker logs -n=50 container_name_or_ID

Melihat log Docker secara real-time pada container langsung

Anda benar-benar dapat melihat log kontainer secara real time. Untuk “mengikuti” log, gunakan --follow atau -f atribut.

docker logs -f container_name_or_ID

Saat Anda menjalankan log buruh pelabuhan dengan opsi ikuti, Anda akan melihat bahwa baris log baru akan dilaporkan dari wadah seiring berjalannya waktu.

Untuk keluar, Anda cukup menggunakan Ctrl+C kombinasi tombol dan kembali ke prompt terminal.

Sebagian besar opsi di docker logs sub-perintah dapat digabungkan untuk menghasilkan hasil yang diinginkan.

Misalnya, docker logs -f akan membanjiri layar dengan semua log dari awal. Anda tidak akan menginginkan itu. Yang dapat Anda lakukan adalah menggabungkan keduanya tail dan follow pilihan seperti ini:

docker logs -f --tail 20 container_name_or_ID

Perintah di atas akan menampilkan 20 baris terakhir dari log dan kemudian mengikuti log secara real time.

Saat memperbarui penampung aplikasi Anda dengan penskalaan, perintah di atas bisa sangat membantu sebelum Anda menghapus penampung lama.

Melihat stempel waktu di log Docker

Jika Anda juga ingin melihat stempel waktu entri log, Anda dapat menggunakan -t pilihan.

docker logs -t container_name_or_ID

Ini dapat dengan mudah digabungkan dengan opsi lain seperti --follow dan --tail .

Perintah di bawah ini akan menampilkan 10 baris terakhir dari file log dari wadah yang diberikan dengan stempel waktu yang dilampirkan pada masing-masingnya

docker logs -n=10 -t container_name_or_ID

Melihat log Docker dalam jangka waktu tertentu

Saat Anda menyelidiki suatu masalah, waktu dapat menjadi faktor penting, dalam hal ini --since dan --until flags terbukti sangat membantu.

Misalnya, jika Anda menyelidiki masalah yang terjadi dalam 24 jam terakhir, perintah berikut akan menampilkan konten yang dicatat dari apa pun yang terjadi hanya selama waktu itu:

docker logs --since 1440m -t container_name_or_ID

1440m dalam perintah di atas menunjukkan 24x60 menit. Menambahkan -t atau --timestamps flag memastikan baris yang dilaporkan diberi label dengan stempel waktu agar Anda dapat memahami insiden atau kesalahan dengan lebih mudah. Saya sarankan untuk menambahkannya saat menanyakan wadah apa pun.

Demikian pula, jika Anda memerlukan detail log setelah 24 jam pertama memulai penerapan, perintah yang setara adalah:

docker logs --until 1440m -t nextcloud

Selain menentukan waktu dalam menit, dua tanda di atas juga dapat digunakan dengan stempel waktu tertentu yang -t menghasilkan. Formatnya seperti 2021-07-28T06:20:00 .

docker logs --since 2021-07-28 -t container_name_or_ID

Perintah di atas akan menampilkan log mulai 28 Juli 2021.

Untuk ikhtisar lengkap log buruh pelabuhan, Anda juga dapat memeriksa halaman manualnya dengan man docker-logs.

Mengakses log Docker dari dalam wadah

Dalam beberapa kasus penggunaan yang menarik, Anda mungkin ingin menggunakan pendekatan hybrid, di mana Anda mengakses log khusus aplikasi dari dalam container.

Untuk melakukannya, Anda memasukkan wadah Docker:

docker exec -it container_name_or_ID sh

Dan kemudian Anda dapat menggunakan alat Linux biasa untuk mendapatkan log terkait aplikasi. Salah satu pendekatannya adalah mendapatkan ID proses dari layanan yang diinginkan menggunakan perintah ps:

ps aux

Dapatkan detail tentang proses ini:

cat /proc/PID_of_process/fd/1

Log layanan sistem buruh pelabuhan

Jika Anda ingin melihat log layanan Docker itu sendiri di host, Anda dapat menggunakan journalctl jika Anda menggunakan Ubuntu 16.04 atau lebih baru:

sudo journalctl -u docker
Cara Menggunakan Perintah journalctl untuk Menganalisis Log di LinuxPanduan pemula untuk menggunakan perintah journalctl untuk melihat, memfilter, dan menganalisis log jurnal di Linux. Buku Pegangan LinuxAbhishek Prakash

Di mana log Docker disimpan?

Anda harus menemukan log buruh pelabuhan di /var/lib/docker/containers direktori pada sistem host. Direktori ini berisi file log yang terkait dengan semua wadah di direktori masing-masing. Anda dapat mengidentifikasi direktori dengan ID penampung.

Saya menggunakan docker ps untuk menemukan 70f19fde9076 adalah ID penampung dari penampung Nextcloud.

Jika saya melihat ke direktori tempat log buruh pelabuhan disimpan:

[email protected]:~$ sudo ls -lh /var/lib/docker/containers

total 16K
drwx------ 4 root root 4.0K Jul 27 18:48 0efe12b28562c42619e533ad5f524d56740a7a3739d9e082c758bac95ae2a46f
drwx------ 4 root root 4.0K Jul 27 18:57 12c55f365f93ecb7f91e40bc130ddc2409216a61bbb244cd045a22b4513416d3
drwx------ 4 root root 4.0K Jul 27 18:58 70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e
drwx------ 4 root root 4.0K Jul 27 18:57 a436399ef16a3efc0a909b9c3f725938e595e0b8fd34644b13f28b2c9bcb4ed7

Saat ini ada empat container yang berjalan, dan Anda dapat melihat bahwa container ketiga cocok dengan container yang perlu kita periksa (dimulai dengan 70f19fde9076 ).

Jika Anda memeriksa isi direktori ini, Anda dapat melihat bahwa file log kami ada di sana!

[email protected]:~$ sudo ls -lh /var/lib/docker/containers/70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e

total 192K
-rw-r----- 1 root root 150K Jul 27 18:58 70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e-json.log
drwx------ 2 root root 4.0K Jul 19 17:10 checkpoints
-rw------- 1 root root 5.5K Jul 27 18:58 config.v2.json
-rw-r--r-- 1 root root 1.5K Jul 27 18:58 hostconfig.json
-rw-r--r-- 1 root root   13 Jul 27 18:58 hostname
-rw-r--r-- 1 root root  198 Jul 27 18:58 hosts
drwx------ 3 root root 4.0K Jul 19 17:10 mounts
-rw-r--r-- 1 root root   79 Jul 27 18:58 resolv.conf
-rw-r--r-- 1 root root   71 Jul 27 18:58 resolv.conf.hash

Oleh karena itu, file log yang sesuai adalah 70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e-json.log yang merupakan file yang sama dengan yang Anda baca ketika saya menjalankan docker logs perintah di awal.

Biarkan saya segera memverifikasi bahwa:

[email protected]:~$ sudo cat /var/lib/docker/containers/70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e/70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e-json.log

{"log":"172.18.0.2 - - [23/Jul/2021:19:36:09 +0000] \"HEAD /.env HTTP/1.1\" 302 1571 \"-\" \"python-requests/2.26.0\"\n","stream":"stdout","time":"2021-07-23T19:36:09.837857567Z"}
{"log":"172.18.0.2 - - [23/Jul/2021:19:49:52 +0000] \"HEAD /c99.php HTTP/1.1\" 302 1565 \"-\" \"python-requests/2.26.0\"\n","stream":"stdout","time":"2021-07-23T19:49:52.996108799Z"}
{"log":"172.18.0.2 - - [24/Jul/2021:16:25:23 +0000] \"HEAD /backup.tar HTTP/1.1\" 302 1571 \"-\" \"python-requests/2.26.0\"\n","stream":"stdout","time":"2021-07-24T16:25:23.445225166Z"}
{"log":"172.18.0.2 - - [24/Jul/2021:16:25:24 +0000] \"HEAD /backup.zip HTTP/1.1\" 302 1569 \"-\" \"python-requests/2.26.0\"\n","stream":"stdout","time":"2021-07-24T16:25:24.772881041Z"}
{"log":"172.18.0.2 - - [25/Jul/2021:20:36:01 +0000] \"GET / HTTP/1.1\" 302 1590 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko; compatible; BW/1.1; bit.ly/2W6Px8S) Chrome/84.0.4147.105 Safari/537.36\"\n","stream":"stdout","time":"2021-07-25T20:36:03.678967877Z"}
{"log":"172.18.0.2 - - [25/Jul/2021:20:36:07 +0000] \"GET /custom_apps/richdocumentscode/proxy.php?req=/hosting/capabilities HTTP/1.1\" 200 721 \"-\" \"Nextcloud Server Crawler\"\n","stream":"stdout","time":"2021-07-25T20:36:07.404618408Z"}
{"log":"172.18.0.2 - - [25/Jul/2021:20:36:04 +0000] \"GET /login HTTP/1.1\" 200 7501 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko; compatible; BW/1.1; bit.ly/2W6Px8S) Chrome/84.0.4147.105 Safari/537.36\"\n","stream":"stdout","time":"2021-07-25T20:36:07.619020402Z"}

Isi lognya sama, tetapi karena saya membaca file log langsung dari Host, ini memiliki banyak jargon dibandingkan dengan docker logs perintah yang digunakan sebelumnya.

Mengaktifkan Rotasi Log untuk Docker (JSON)

Secara default, untuk logging berbasis file JSON, rotasi log di Docker dinonaktifkan.

Ini dapat menimbulkan masalah dengan ruang disk jika file log bertambah besar ukurannya. Instance Ghost berbasis Docker kami melihat file lognya berukuran hingga 20 GB. Anda ingin menghindari situasi seperti itu dengan mengaktifkan rotasi log.

Untuk mengaktifkan rotasi log untuk Docker, edit /etc/docker/daemon.json berkas:

sudo nano /etc/docker/daemon.json

Tambahkan baris berikut dan simpan file:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3" 
  }
}

Mulai ulang daemon Docker:

sudo systemctl restart docker

Pengaturan di atas tentu saja relevan dengan instalasi Docker generik, yang memiliki logging JSON yang ditetapkan sebagai default. Jadi perhatikan bahwa setiap mekanisme logging lainnya (tercantum di bawah) memiliki caranya sendiri dalam mengimplementasikan rotasi.

Sepatah kata tentang driver logging

Apakah Anda melihat "json" di nama file log dari sebelumnya? Itu karena File JSON adalah driver logging default di Docker.

Selain JSON, ada banyak mekanisme logging lain yang dapat dipilih juga:

  • Berkas lokal
  • Loginry
  • Format Diperluas Graylog (GELF)
  • Syslog
  • Amazon Cloudwatch Logs(AWS)
  • Pelacakan Peristiwa di Windows(ETW)
  • Lancar
  • Log Proyek Google Cloud (GCP)
  • Jurnal
  • Splunk
  • Logstash

Untuk penerapan skala besar, GELF , AWS , GCP dan Fluentd direkomendasikan karena mereka menerapkan pendekatan terpusat. Namun untuk skala kecil, JSON melakukan pekerjaan dengan baik, sementara Lokal , Syslog dan Jurnal juga cukup cocok. Syslog dan Logstash sangat membantu jika analisis log yang kompleks menjadi persyaratan. ETW khusus untuk Windows, sedangkan Splunk difokuskan pada pencatatan jarak jauh.

Mulai dari Docker Engine 20.10, fitur baru yang disebut “dual-logging” telah diperkenalkan yang memastikan eksekusi docker logs perintah serta melakukan rotasi log terlepas dari driver logging yang berlaku.

Ringkasan

Dalam artikel ini, saya telah memulai dengan dasar-dasar cara melihat log untuk container Docker apa pun, baik di tingkat container maupun sistem host. Saya juga telah menunjukkan kepada Anda cara menemukan lokasi fisik file log khusus kontainer yang berada di sistem host Anda. Saya secara singkat menunjukkan kepada Anda cara memeriksa log untuk layanan Docker di host itu sendiri.

Kemudian, saya telah membahas driver logging dengan fokus pada mekanisme default dan juga menyoroti fitur logging ganda yang baru.

Saya harap petunjuk-petunjuk ini membantu Anda dalam kegiatan pemantauan atau pembelajaran harian Anda. Lebih banyak pemikiran dan saran sangat diharapkan! Silakan bagikan di bagian komentar di bawah.


Docker
  1. Cara Menjalankan Nginx dalam Wadah Docker:Panduan Langkah demi Langkah

  2. Panduan pemula untuk melongo

  3. Siapkan MongoDB di Docker

  1. Panduan Cepat untuk Menggunakan Docker Compose

  2. Panduan Lengkap Pemula untuk LVM di Linux

  3. Panduan Lengkap untuk Self-hosting Rocket.Chat Dengan Docker

  1. Panduan pemula untuk izin Linux

  2. Apa itu Kubernetes? Panduan Lengkap

  3. Grep Regex:Panduan Lengkap