Cara Menghapus Log Menjalankan Kontainer Docker

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 dengan lebih efisien sambil mempertahankan data lama.

Memahami Masalah

Docker mengumpulkan log dari output standar dan aliran kesalahan proses latar depan kontainer. Itu docker logs perintah digunakan untuk mengambil log ini tetapi tidak membiarkan Anda menghapus baris lama.

Docker mendukung banyak driver logging yang berbeda sehingga tidak mungkin untuk menawarkan mekanisme pembersihan standar. Artikel ini berfokus pada standar json-file logging driver, tempat 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 json-file driver disimpan di bawah /var/lib/docker/containers direktori. 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 jernih isi log yang ada untuk menghindari pengaruh penulisan saat ini.

Menemukan Jalur File Log

Pertama, temukan jalur ke file log penampung target Anda. Anda dapat mengambil jalur file log untuk wadah yang disebut my-app dengan menjalankan perintah berikut:

$ docker inspect --format=".LogPath" my-app
/var/lib/containers/1380d936...-json.log

Menghapus File Log

Anda dapat menghapus konten log tanpa menghapusnya dengan menggemakan string kosong ke dalam kontennya. File akan dimiliki oleh root jadi 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)'

Interpolasi shell digunakan untuk secara dinamis mengambil jalur file log untuk my-app wadah. Anda dapat mengganti secara manual di jalur yang diambil sebelumnya.

Saat kamu berlari docker logs my-appAnda sekarang akan melihat keluaran kosong kecuali wadah telah melanjutkan penulisan baris untuk sementara.

Membatasi Keluaran Log

Itu docker logs perintah menerima beberapa argumen yang dapat digunakan untuk membatasi output dari log yang bising. Ini membantu mengurangi kebutuhan untuk membersihkan log sambil mencegah terminal Anda dibanjiri dengan baris lama setiap kali Anda mengakses file.

  • --tail – Bendera ini menginstruksikan Docker untuk hanya memancarkan sejumlah baris log lama tertentu, dimulai dengan yang terbaru.
  • --until dan --since – Bendera ini membatasi output ke garis log yang dipancarkan selama periode waktu tertentu. Mereka berguna saat Anda mengetahui perkiraan jangka waktu terjadinya suatu peristiwa.

Berikut adalah beberapa contoh:

Tampilkan 100 baris log terbaru

docker logs my-app --tail 100

Tampilkan baris log yang ditulis dalam satu jam terakhir

docker logs my-app --since 1h

Tampilkan hingga 100 baris log yang ditulis dalam satu jam terakhir

docker logs my-app --tail 100 --since 1h

Menyiapkan Rotasi Log

Secara teratur harus membersihkan file log dengan cara ini biasanya menandakan bahwa log aplikasi Anda terlalu bertele-tele atau terlalu banyak aktivitas untuk disimpan dalam satu file.

Banyak driver logging Docker, termasuk json-filememiliki dukungan rotasi log opsional yang dapat Anda aktifkan secara global untuk daemon Docker atau per container.

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"
    

Mulai ulang daemon Docker untuk menerapkan perubahan:

$ sudo service docker restart

Rotasi tingkat daemon berlaku untuk semua container yang baru dibuat. Perubahan tidak akan memengaruhi penampung yang sudah ada di host Anda.

Rotasi dapat dikonfigurasi untuk wadah individu menggunakan --log-opts bendera. Ini akan menggantikan pengaturan daemon Docker default Anda.

docker run --name app 
    --log-driver json-file 
    --log-opts max-size=8M 
    --log-opts max-file=5 
    app-image:latest

Ringkasan

Log kontainer Docker bisa menjadi berisik saat aplikasi yang 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. Itu docker logs command juga mendukung flag yang dapat membantu menjinakkan log yang sulit digunakan pada titik akses.

Leave a Comment