Pernahkah anda menghadapi situasi di mana fail telah dipadamkan tetapi ruang tersebut tidak dikeluarkan dalam persekitaran Linux? Artikel pendek ini akan memperkenalkan senario masalah ini dan penyelesaian yang sepadan.
Salah satu pelayan aplikasi kami, sistem pengendalian ialah Red Hat Linux, pemantauan penggera, /opt/applog penggunaan sistem fail melebihi ambang, kapasiti keseluruhan ialah 50G, tetapi kapasiti fail sebenar ialah 20G, apakah ruang 30G yang tinggal?
Kami tahu bahawa dalam persekitaran Linux, semuanya wujud dalam bentuk fail Sistem memperuntukkan deskriptor fail untuk setiap aplikasi di latar belakang, yang menyediakan deskriptor fail untuk interaksi antara aplikasi dan sistem pengendalian antara muka ialah fail, ia akan mengambil ruang Pada masa ini, anda boleh menggunakan perintah lsof, yang boleh menyenaraikan fail yang sedang dibuka oleh sistem.
>lsof COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ... filebeat 111442 app 1r REG 253,3 209715229 1040407 /opt/applog/E.20171016.info.012.log filebeat 111442 app 2r REG 253,3 209715254 385080 /opt/applog/E.20171015.info.001.log (deleted) ...
Maksud setiap medan dalam tajuk adalah seperti berikut:
PERINTAH: Nama proses
PID: pengecam proses
PENGGUNA: pemilik proses
FD: Deskriptor fail, aplikasi mengenal pasti fail melalui deskriptor fail. Seperti cwd, txt, dsb.
JENIS: jenis fail, seperti DIR, REG, dll.
PERANTI: Nyatakan nama cakera
SAIZ: Saiz fail
NODE: nod indeks (pengenalan fail pada cakera)
NAMA: Nama sebenar fail yang dibuka
Dapat dilihat bahawa dalam beberapa baris, NAMA ditanda (dipadamkan)
/opt/applog/E.20171015.info.001.log (dipadamkan)
Maksudnya ialah fail telah dipadamkan, tetapi pemegang fail yang terbuka belum ditutup Lihat nama COMMAND ialah filebeat, dan pemilik proses PENGGUNA Ini adalah proses pengumpulan log kami telah menghidupkan proses filebeat.
Pengenalan kepada platform pengumpulan log
Platform pembalakan sumber terbuka tradisional, ELK, terdiri daripada tiga alatan sumber terbuka: ElasticSearch, Logstash dan Kiabana, antaranya:
Rajah penggunaan biasa, seperti ditunjukkan di bawah
Apakah filebeat yang disebutkan di atas? Apa kaitan dengan ELK?
Terdapat pengenalan oleh pakar hebat Rao Chenlin (pengarang "ELKstack Authoritative Guide") tentang Zhihu, yang sangat bernas dan dipetik daripada https://www.zhihu.com/question/54058964/answer/137882919
Oleh kerana logstash dikendalikan oleh jvm dan menggunakan banyak sumber, penulis kemudiannya menggunakan golang untuk menulis logstash-forwarder yang ringan dengan fungsi yang lebih sedikit tetapi penggunaan sumber yang rendah. Walau bagaimanapun, pengarang hanyalah seorang Selepas menyertai Ringkasnya, filebeat ialah ejen proses untuk pengumpulan log, bertanggungjawab untuk mengumpul fail log aplikasi. Untuk masalah saya di atas, sebab mengapa terdapat sebilangan besar pemegang fail (dipadam) dan tidak dikeluarkan adalah kerana ruang cakera adalah sangat terhad, tugasan telah ditambah buat sementara waktu untuk memadam log 12 jam yang lalu setiap jam Dalam erti kata lain, tugas yang dijadualkan akan memadamkan beberapa fail secara automatik yang sedang dibuka oleh filebeat pada masa ini, jadi fail ini menjadi fail yang tidak dikeluarkan, jadi fail sebenar dipadamkan, tetapi ruang tidak dikeluarkan. Penyelesaian 1: Untuk melepaskan ruang yang diduduki dengan cepat, kaedah yang paling langsung ialah membunuh -9 proses filebeat, pada masa itu ruang akan dilepaskan. Tetapi ini bukan penyelesaian asas Tugas berjadual juga akan memadamkan fail ini yang dibuka oleh filebeat, menyebabkan ruang menjadi penuh. Penyelesaian 2: Iaitu, jika fail tidak dikemas kini dalam tempoh masa tertentu, pemegang fail yang dipantau akan ditutup. Iaitu, apabila nama fail berubah, termasuk menamakan semula dan memadam, fail akan ditutup secara automatik. Menggabungkan kedua-dua parameter ini, mengikut keperluan aplikasi, jika fail tidak dikemas kini dalam masa 30 minit, pemegangnya perlu ditutup Jika fail itu dinamakan semula atau dipadam, pemegangnya perlu ditutup dekat_lebih tua: 30m Ia boleh memenuhi keperluan asas pengumpulan log filebeat dan pemadaman tetap fail sejarah.
Fail konfigurasi Filebeat filebeat.yml sebenarnya mempunyai dua parameter:
Penerangan: Tutup lebih lama menutup pengendali fail yang tidak diubah suai lebih lama kemudian rentetan masa seperti 2j (2 jam), 5m (5 minit) boleh digunakan.
Nota: Pilihan ini menutup fail, sebaik sahaja nama fail berubah Pilihan konfigurasi ini hanya dicadangkan pada tetingkap Filebeat memastikan fail yang dibacanya terbuka dialih keluar sepenuhnya sehingga juga Filebeat menutup pembacaan fail selepas ignore_older Pada masa ini tiada fail baharu dengan nama yang sama boleh dibuat sebaliknya boleh berlaku selepas penggiliran fail permulaan fail baharu dilangkau, kerana bacaan bermula pada penghujung Kami mengesyorkan agar pilihan ini dibiarkan palsu tetapi menurunkan nilai ignore_older untuk mengeluarkan fail dengan lebih cepat.
force_close_files: benar
Atas ialah kandungan terperinci Mengapa ruang tidak dikeluarkan selepas memadam fail?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!