Bawa file besar melewati terowongan dan penghitung antarmuka naik sebesar ukuran file. Tidak ada yang dalam angka itu berarti volume yang sama mencapai disk. Tiga pengukuran berbeda dibandingkan dalam diskusi ini, dan ketiganya menjawab tiga pertanyaan berbeda: berapa banyak lalu lintas yang melewati lapisan jaringan, berapa byte yang dibaca dan ditulis proses melalui panggilan sistem, dan berapa banyak pekerjaan yang mencapai lapisan penyimpanan.

Membandingkan yang pertama dengan yang ketiga adalah kesalahan yang lazim, dan itu menghasilkan entah masalah disk hantu atau rencana kapasitas yang mengabaikan penulisan yang benar-benar terjadi. Ketiganya dapat dipisahkan, dan masing-masing punya penggunaan yang tepat.

Tiga angka yang dicampuradukkan

Penghitung antarmuka menggambarkan lalu lintas yang ditangani pada lapisan jaringan. Itu adalah angka yang tepat untuk lebar pita, untuk ukuran terowongan, dan untuk model penagihan yang memberi harga pada transit.

Penghitung karakter proses menggambarkan byte yang dipindahkan melalui panggilan baca dan tulis pada deskriptor apa pun, termasuk pipa, terminal, dan perangkat karakter. Itu adalah angka yang tepat untuk menanyakan seberapa sibuk sebuah proses di batas panggilan sistem, dan itu bukan tagihan penyimpanan.

Penghitung penyimpanan menggambarkan byte yang coba dipindahkan kernel ke atau dari perangkat blok. Itu adalah angka yang tepat untuk perencanaan kapasitas, dengan catatan bahwa kernel mendokumentasikan batas akuntansinya sendiri: pembacaan yang di-cache tidak menjadi pembacaan penyimpanan, dan penulisan yang kemudian dibatalkan tidak menjadi penulisan perangkat yang selesai.

MeasurementQuestion it answers
Interface bytesHow much traffic crossed this layer
rchar and wcharHow much data the process moved through system calls
read_bytes and write_bytesHow much work reached the storage layer

Mengapa deskriptor file bukan penulisan disk

VPN ruang pengguna bertukar paket dengan kernel melalui perangkat TUN, yang merupakan perangkat karakter, bukan file biasa. Membacanya menyerahkan paket; menulisnya menyuntikkan paket. Tidak ada halaman isi file yang disiapkan untuk penyimpanan, dan tidak ada jalur sistem file yang terlibat.

Itulah sebabnya terowongan yang sibuk dapat menunjukkan penghitung karakter yang sangat besar dengan hampir tidak ada penghitung penyimpanan. Proses itu benar-benar memindahkan byte tersebut, dan kernel benar-benar tidak memerlukan disk untuk melakukannya.

cat /proc/$(pgrep -n openvpn)/io
ip -s link show tun0

Bacalah keluaran pertama sebagai kumulatif sejak proses dimulai, bukan sebagai laju. Yang kedua memberikan pandangan antarmuka atas lalu lintas yang sama. Selisih besar antara keduanya memang diharapkan dan tidak menunjukkan kebocoran, antrean, atau konfigurasi yang salah.

Dari mana byte itu sebenarnya berasal

Keluaran persisten punya anggarannya sendiri, dan anggaran itu digerakkan oleh operasi, bukan oleh muatan. Tingkat log yang bertele-tele, daftar klien yang sering berubah, atau galat yang berulang dalam simpal ketat dapat menghasilkan penulisan besar sementara terowongan membawa sangat sedikit.

File status adalah cuplikan yang ditulis ulang pada interval tertentu, jadi biayanya bergantung pada interval dan pada berapa banyak rekaman yang dikandungnya. Itu bukan salinan berjalan dari lalu lintas setiap klien, dan memperpendek interval mengubah volume penulisan tanpa mengubah volume lalu lintas.

Kepemilikan penting ketika Anda mencari penulisan itu. Jika layanan menyerahkan pesan kepada daemon pencatat, jurnal atau file log ditulis oleh daemon itu, dan byte muncul dalam akuntansi daemon itu, bukan dalam penghitung proses VPN sendiri. Melihat hanya proses VPN tidak menjelaskan aktivitas disk maupun ketiadaannya.

Kontributor lain mudah terlewat: pembacaan sertifikat dan konfigurasi saat mulai, kait yang menulis rekamannya sendiri, plugin akuntansi, dump kerusakan, dan beban kerja tak terkait pada host yang sama. Tidak satu pun darinya boleh diperkirakan dengan menyamakan lalu lintas terowongan dengan byte yang ditulis.

Membaca setiap penghitung dengan benar

Tiga perincian menentukan apakah sebuah perbandingan berarti sesuatu. Identitas proses penting, karena layanan yang dimulai ulang mengatur ulang penghitungnya. Interval waktu penting, karena angka kumulatif dan grafik per detik adalah pengukuran berbeda. Dan satuan penting, karena ukuran file log saat ini juga bukan laju.

grep -E 'rchar|wchar|read_bytes|write_bytes' /proc/$(pgrep -n openvpn)/io
du -sh /var/log/openvpn 2>/dev/null
journalctl --disk-usage

Jika Anda mencurigai penulisan muatan sungguhan, carilah komponen yang tugasnya menyimpan muatan: alat tangkap paket, proksi yang meng-cache isi, plugin yang mengarsipkan. Semuanya menghasilkan lalu lintas penyimpanan yang berskala dengan apa yang diminta mereka catat, dan termasuk keputusan kebijakan terpisah tentang retensi dan akses.

Merencanakan kapasitas dengan angka yang tepat

Ukurlah jalur paket dengan angka jaringan: laju melalui, pemrosesan kriptografis, dan perpindahan memori. Ukurlah penyimpanan dengan pilihan keteramatan yang benar-benar Anda ambil: tingkat log, retensi, interval status, dan tangkapan apa pun yang sengaja diaktifkan.

Menjaga kedua anggaran itu terpisah juga mempermudah membaca insiden. Disk penuh dengan lalu lintas terowongan yang sedang menunjuk ke log, tangkapan, atau sesuatu yang tak terkait, dan penghitung antarmuka tidak akan pernah menjelaskannya. Tautan jenuh dengan log yang sunyi menunjuk ke arah sebaliknya.

Perbandingan yang layak dilakukan adalah antara pengukuran sejenis. Byte antarmuka terhadap byte antarmuka sepanjang waktu memberi tahu Anda tentang jalur. Penulisan penyimpanan terhadap kapasitas penyimpanan memberi tahu Anda tentang retensi. Perbandingan silang, lalu lintas terhadap disk, hanya tampak bermakna dan tidak pernah benar-benar bermakna.

Artikel terkait