Kontainer Docker yang berjalan lama dapat dengan cepat mengakumulasi sejumlah besar baris log. Ini menghabiskan kapasitas penyimpanan dan mengurangi kinerja saat mengakses dan memfilter data. Meskipun Docker menyertakan alat terintegrasi untuk melihat log, tidak ada mekanisme bawaan untuk membersihkannya.
Dalam artikel ini Anda akan mempelajari cara menghapus log dari container Docker yang sedang berjalan, tanpa memulai ulang atau menggantinya. Anda juga akan melihat beberapa teknik untuk menangani log besar secara lebih efisien sambil mempertahankan data lama.
Akar Masalah
Docker mengumpulkan log dari output standar dan aliran kesalahan proses latar depan container. Perintah log docker digunakan untuk mengambil log ini tetapi tidak memungkinkan Anda menghapus baris lama.
Docker mendukung banyak driver logging yang berbeda sehingga tidak mungkin untuk menawarkan mekanisme pembersihan standar. Artikel ini berfokus pada driver logging file json standar, di mana baris log disimpan dalam file JSON di sistem file host container Anda. Lihat dokumentasi driver penyimpanan Anda jika Anda perlu membersihkan log yang dialirkan ke host jarak jauh. File
Log yang dibuat oleh driver file json disimpan di bawah direktori /var/lib/docker/containers. Setiap kontainer mendapatkan file lognya sendiri yang digunakan sepanjang masa pakainya. Tidak ada rotasi log yang dikonfigurasi secara default.
Menghapus file log saja bukanlah solusi yang efektif. Docker mengharapkan file tersedia terus-menerus dan tidak akan membuat ulang secara otomatis jika dihapus. Lebih aman untuk menghapus konten log yang ada agar tidak memengaruhi penulisan saat ini.
Cara Menemukan Path
File LogPertama, temukan jalur ke file log penampung target Anda. Anda dapat mengambil jalur file log untuk wadah yang disebut aplikasi-saya dengan menjalankan perintah berikut:
$ docker inspect --format=`{{.LogPath}}` my-app /var/lib/containers/1380d936... -json.logMengosongkan File Log
Anda dapat menghapus konten log tanpa menghapusnya dengan menggemakan string kosong ke dalam kontennya. File akan dimiliki oleh root sehingga Anda harus melakukan operasi ini di shell root. Perintah berikut akan mengosongkan file log untuk Anda:
$ sudo sh -c `echo "" > $(docker inspect --format="{{.LogPath}}" my-app)`
Shell interpolasi digunakan untuk secara dinamis ambil jalur file log untuk wadah aplikasi-saya. Anda dapat menggantinya secara manual di jalur yang diambil sebelumnya.
Ketika Anda menjalankan log buruh pelabuhan aplikasi-saya, Anda sekarang akan melihat keluaran kosong kecuali wadah telah melanjutkan penulisan baris di interim.
Membatasi/Limiting Log Output
Perintah log buruh pelabuhan menerima beberapa argumen yang dapat digunakan untuk membatasi output dari log yang bising. Ini membantu mengurangi kebutuhan untuk membersihkan log sekaligus mencegah terminal Anda dibanjiri dengan baris lama setiap kali Anda mengakses file.
--tail – Bendera ini menginstruksikan Docker untuk memancarkan hanya sejumlah tertentu baris log lama, dimulai dengan yang paling baru-baru ini.--sampai dan --sejak – Bendera ini membatasi output ke baris log yang dipancarkan selama periode waktu tertentu. Mereka berguna ketika Anda mengetahui perkiraan jangka waktu terjadinya suatu peristiwa.
Berikut beberapa contohnya:
Menampilkan 100 baris log terbaru
docker log aplikasi saya --tail 100
Menampilkan baris log yang ditulis dalam satu jam terakhir
docker mencatat aplikasi saya -- sejak 1h
Menampilkan hingga 100 baris log yang ditulis dalam satu jam terakhir
docker mencatat aplikasi saya --tail 100 --sejak 1h
Menyiapkan Rotasi Log
Terbiasa membersihkan file log dengan cara ini biasanya menandakan bahwa log aplikasi Anda terlalu bertele-tele atau terlalu banyak banyak aktivitas untuk disimpan dalam satu file.
Banyak driver logging Docker, termasuk file json, memiliki dukungan rotasi log opsional yang dapat Anda aktifkan secara global untuk daemon Docker atau pada basis per-kontainer. Pengaturan
Daemon dikonfigurasi di /etc/docker/ daemon.json. Berikut adalah contoh yang memutar log kontainer setelah mencapai 8MB. Hingga lima file akan disimpan setiap saat, dengan yang lama secara otomatis dihapus saat rotasi baru terjadi.
{ "log-opts": { "max-size": "8m", "max-file": "5" } }
Restart daemon Docker untuk menerapkan perubahan:
$ sudo service docker restart
Daemon-level rotation berlaku untuk semua container yang baru dibuat. Perubahan tidak akan memengaruhi container apa pun yang sudah ada di host Anda.
Rotation dapat dikonfigurasi untuk container individual menggunakan flag --log-opts. Ini akan menimpa default Docker daemon settings.
docker run --name app --log-driver json-file --log-opts max-size=8M --log-opts max-file=5 app-image :latestSummary
Docker log kontainer bisa berisik saat aplikasi sibuk menulis output yang ekstensif. Akses ke log verbose berguna untuk debugging tetapi mereka menghabiskan ruang penyimpanan, mempersulit penyaringan data, dan dapat mengurangi kinerja.
Anda dapat membersihkan file log sesuai permintaan dengan menggunakan perintah shell untuk mengosongkan kontennya. Namun praktik yang lebih baik adalah mengatur rotasi log sehingga ini terjadi secara otomatis setelah file mencapai ukuran tertentu. Perintah docker logs juga mendukung flag yang dapat membantu menjinakkan log yang berat pada titik access.
Itulah berita seputar
Cara Menghapus Log Menjalankan Kontainer Docker, semoga bermanfaat.
Disadur dari HowToGeek.com.