TCP-RT adalah alat pemantauan TCP yang menggunakan instrumentasi kernel untuk mengidentifikasi request dan response dalam koneksi TCP serta menangkap metrik terkait, seperti waktu penerimaan request dan waktu pemrosesan layanan. TCP-RT berlaku untuk skenario dengan hanya satu request dan response konkuren per koneksi, seperti layanan HTTP/1.1, MySQL, atau Redis. TCP-RT memerlukan Alibaba Cloud Linux 2 (versi kernel 4.19.91-21.al7 atau lebih baru) atau Alibaba Cloud Linux 3. Alibaba Cloud Linux 3 (versi kernel 5.10.134-17 atau lebih baru) menyediakan versi baru TCP-RT yang menambahkan dukungan untuk protokol HTTP/TLS sekaligus mempertahankan semua fitur versi sebelumnya.
Untuk membedakan antar versi, dokumen ini menggunakan tcp_rt.ko untuk merujuk ke versi lama dan tcprt untuk versi baru. Perbedaan utamanya sebagai berikut:
tcp_rt.ko: Digunakan sebagai modul kernel.
tcprt: Digunakan dengan
systemctldan file konfigurasi, serta menyediakan fitur tambahan.
Gunakan tcprt bila memungkinkan.
Cara kerja
Mode lokal (perspektif server)
Saat layanan TCP menangani satu request dan response konkuren, garis waktu ditunjukkan pada gambar berikut.
Request ke-N yang dikirim oleh client ke server diberi label ReqN dan terdiri dari dua paket: ReqN-1 dan ReqN-2. Server mencatat waktu kedatangan paket pertama sebagai T0 dan waktu kedatangan paket kedua sebagai T1. Setelah menerima seluruh request, server memprosesnya dan mengirim dua paket respons: RspN-1 dan RspN-2. Server mencatat waktu pengiriman paket respons pertama sebagai T2. Setelah client menerima respons, client mengirim ACK kembali ke server. Server mencatat waktu penerimaan ACK terakhir sebagai T3.
Berdasarkan timestamp tersebut, TCP-RT menghitung metrik berikut:
upload_time: Waktu saat pengguna memulai request upload.
process_time: Waktu pemrosesan server.
Ini adalah interval antara waktu server menerima paket request terakhir dan waktu server mulai mengirim paket respons pertama.
download_time: Waktu download data.
Ini adalah interval antara waktu server mulai mengirim paket respons dan waktu server menerima ACK terakhir dari client. Metrik ini penting untuk respons data berukuran besar.
Mode peer (perspektif client)
Saat layanan TCP menangani satu request dan response konkuren, garis waktu ditunjukkan pada gambar berikut.
Request ke-N (ReqN) yang dikirim dari client ke server terdiri dari dua paket data: ReqN-1 dan ReqN-2. Server mencatat waktu penerimaan paket pertama sebagai T0 dan waktu penerimaan paket kedua sebagai T1. Setelah menerima dan memproses request, server mengirim dua paket respons, RspN-1 dan RspN-2, ke client. Server mencatat waktu pengiriman paket respons pertama sebagai T2. Setelah menerima paket respons, client mengirim ACK ke server, dan server mencatat waktu penerimaan ACK terakhir sebagai T3.
Berdasarkan timestamp tersebut, TCP-RT menghitung metrik berikut:
upload_time: Waktu saat pengguna membuat request upload.
process_time: Waktu pemrosesan server.
Ini adalah interval antara waktu client mengirim paket request terakhir dan waktu client menerima paket respons pertama.
download_time: Waktu download data.
Ini adalah interval antara waktu client menerima paket respons pertama dan waktu client menerima paket respons terakhir.
Rincian output
TCP-RT mengumpulkan metrik layanan TCP dalam mode kernel dan mengeluarkan metrik dalam format yang dijelaskan pada tabel berikut.
Jenis file | Metode output | Waktu output |
File log | Output melalui
|
|
File stats | Data diagregasi berdasarkan port (port server atau port client) dan dioutput ke file | Output terjadi secara periodik. Interval default adalah satu menit. |
Mode parsing
TCP-RT mendukung beberapa mode parsing yang dapat Anda konfigurasi. Untuk informasi lebih lanjut, lihat Menggunakan TCP-RT.
default: Mode default.
Mem-parsing aliran TCP generik yang mengikuti pola request/response, seperti HTTP, Redis, atau MySQL.
http: Mode parsing HTTP yang ditingkatkan.
Mode ini dibangun berdasarkan mode default dan melaporkan metrik round-trip time (RTT) dan jendela kemacetan. Mode ini juga mendeteksi proses HTTP “Expect: 100-continue” dan mencatat request 100-continue beserta responsnya sebagai catatan
R.C. Untuk informasi lebih lanjut, lihat Format output.HTTPS yang Ditingkatkan
Mode ini dibangun berdasarkan mode http dan menambahkan dukungan untuk parsing pesan Transport Layer Security (TLS).
Parsing jabat tangan TLS: Mendeteksi fase jabat tangan TLS 1.2 dan TLS 1.3 serta menandainya dalam log output. Untuk informasi lebih lanjut, lihat Format output.
Untuk TLS 1.2 (jabat tangan empat arah), dua catatan
R.Hdihasilkan.Untuk TLS 1.3 (jabat tangan tiga arah), satu catatan
R.Hdihasilkan, termasuk durasi jabat tangan.
Parsing pesan Alert “Close Notify”: Pesan ini dicatat sebagai catatan
R.A. Untuk informasi lebih lanjut, lihat Format output.
Mode parsing untuk tcp_rt.ko tidak dapat dikonfigurasi dan hanya mendukung mode default.
Format output
Definisi TASK dan siklus hidup TCP.
TASK merepresentasikan satu siklus request dan response lengkap.
Siklus hidup TCP berisi beberapa TASK.
Format file log
Dalam file log, setiap kolom dalam suatu catatan merepresentasikan sepotong informasi. Gambar berikut menunjukkan contoh entri log.
Kolom-kolom tersebut dijelaskan dari kiri ke kanan sebagai berikut:
Nomor versi. Nilainya bisa V6 atau V7.
V6: Versi default.
V7: Versi ini muncul untuk catatan tipe R yang dihasilkan berdasarkan konfigurasi tertentu dengan field tambahan. Ini mencakup catatan berikut:
Log R dalam mode parsing http atau https menggunakan V7 karena mencakup field tambahan di akhir.
Format log R yang diperluas, seperti R.C, R.Z, R.A, R.H, dan R.F, menggunakan V7. Untuk informasi lebih lanjut, lihat tabel berikut.
Identifikasi tipe catatan. Nilainya bisa R, E, W, N, atau P.
R: Catatan ini dihasilkan saat request mencapai server lokal dan siklus request dan response selesai dalam layanan TCP.
E: Catatan ini dihasilkan saat koneksi ditutup.
W: Catatan ini dihasilkan saat koneksi ditutup selama transmisi respons.
N: Catatan ini dihasilkan saat koneksi ditutup selama penerimaan request.
P: Catatan ini dihasilkan saat server lokal mengirim request ke server remote dan siklus request dan response selesai dalam layanan TCP.
Bagian detik dari waktu mulai TASK.
Bagian mikrodetik dari waktu mulai TASK.
Alamat IP remote dari koneksi TCP.
Port remote dari koneksi TCP.
Alamat IP lokal dari koneksi TCP.
Port lokal dari koneksi TCP.
Field tambahan disertakan berdasarkan tipe catatan. Untuk informasi lebih lanjut, lihat tabel berikut.
ID Skenario | Deskripsi field |
R | Catatan ini menunjukkan awal dan akhir normal TASK. Satu koneksi TCP dapat memiliki beberapa catatan R.
|
R.C | Catatan Hanya didukung oleh tcprt (V7). Dapat muncul dalam mode parsing http/https. Formatnya sesuai dengan catatan R. Menunjukkan bahwa TASK dipicu oleh request “Expect: 100-continue” (tidak termasuk data aplikasi). |
R.Z | Catatan Hanya didukung oleh tcprt (V7). Dapat muncul dalam mode parsing https. Formatnya sesuai dengan catatan R. Menunjukkan bahwa TASK termasuk dalam jabat tangan TLS 1.3 0-RTT. |
R.A | Catatan Hanya didukung oleh tcprt (V7). Dapat muncul dalam mode parsing https. Formatnya sesuai dengan catatan R. Menunjukkan bahwa TASK berisi pesan Alert |
R.H | Catatan Hanya didukung oleh tcprt (V7). Dapat muncul dalam mode parsing https. Catatan R dapat mencakup field tambahan di akhir. Menunjukkan bahwa TASK termasuk dalam fase jabat tangan TLS. Untuk TLS 1.3 (jabat tangan tiga arah), log melaporkan durasi jabat tangan dalam mikrodetik. Format field tambahan: |
R.F | Catatan Hanya didukung oleh tcprt (V7). Muncul saat Menunjukkan bahwa TASK memicu statistik waktu penyelesaian berdasarkan ambang batas byte. Berdasarkan ambang batas byte yang ditentukan dalam file konfigurasi, aliran data respons dibagi menjadi beberapa langkah, dan volume data plus waktu penyelesaian untuk setiap langkah ditambahkan ke catatan (satuan: byte dan us). Format field tambahan: |
P | Catatan ini menunjukkan awal dan akhir normal TASK. Satu layanan TCP dapat memiliki beberapa catatan P. Catatan P ditambahkan dalam V6 untuk menangkap request client outbound. Catatan ini hanya muncul jika
|
E | Catatan ini menunjukkan penutupan koneksi TCP. Setiap koneksi TCP memiliki tepat satu catatan E. Koneksi dengan
|
N | Catatan ini muncul saat koneksi TCP ditutup selama penerimaan segmen request. Satu koneksi dapat memiliki nol atau satu catatan N.
|
W | Catatan ini muncul saat koneksi TCP ditutup selama transmisi segmen respons. Satu koneksi dapat memiliki nol atau satu catatan W.
|
Jenis log yang diperluas menggunakan format
R.x, di manaxdapat berupa satu karakter atau kombinasi karakter. Misalnya,R.AFmenunjukkan bahwaAdanFkeduanya berlaku.Log
R.AdanR.Cmenggunakan volume data respons sebagai kriteria dan mungkin memiliki false positive minor.Untuk metrik dalam tabel di atas yang menunjukkan jumlah data yang dikirim oleh TASK, jika TASK tersebut merupakan yang terakhir dalam koneksi, nilai
snd_nxtdikurangi satu selama pemrosesan normal untuk memperhitungkan penutupan koneksi (FIN). Namun, jika koneksi ditutup secara abnormal, misalnya TASK menerima pesan terminasi abnormal (RST) setelah TASK selesai dan koneksi dihentikan sebagai respons terhadapreset, jumlah data aktual yang dikirim adalah satu byte lebih besar dari nilai yang ditampilkan. Biasanya, nilai parameter yang terkait dengan jumlah data yang dikirim oleh task sudah benar, dan margin kesalahan hanya satu byte.
Tiga fase waktu ditunjukkan dalam Cara kerja:
Catatan R melaporkan total waktu (T0 hingga T3), delay upload (upload_time, T0 hingga T1), dan delay layanan (process_time, T1 hingga T2). Waktu download (download_time) dapat dihitung menggunakan rumus berikut:
download_time = total_time - upload_time - process_time
Format file stats
Kolom-kolom tersebut dijelaskan dari kiri ke kanan sebagai berikut:
Timestamp saat catatan dioutput.
Field cadangan. Nilainya selalu
all.Nomor port.
Durasi total rata-rata TASK yang diperoleh dari catatan R.
Delay layanan rata-rata TASK yang diperoleh dari catatan R.
Tingkat kehilangan paket dalam permil (‰).
RTT rata-rata dalam mikrodetik (us).
Permil (‰) TASK yang ditutup selama transmisi request.
Jumlah data rata-rata yang dikirim per TASK.
Delay upload rata-rata TASK.
Jumlah data rata-rata yang diterima per TASK.
Jumlah TASK yang termasuk dalam statistik.
tcprt versus tcp_rt.ko perbedaan versi
Item perbandingan | tcprt | tcp_rt.ko |
Path file log | Sama | |
Format log | tcprt memperluas format log sekaligus menjaga kompatibilitas mundur. | |
Manajemen fitur |
|
|
Konfigurasi fitur | File konfigurasi:
| Parameter modul:
|
Persyaratan sistem | Alibaba Cloud Linux 3 (versi kernel |
|
Fitur |
| Hanya mendukung mode parsing default. |
Penggunaan fitur
Pilih salah satu metode berikut berdasarkan lingkungan Anda:
tcprt
Untuk Alibaba Cloud Linux 3 (versi kernel 5.10.134-17 atau lebih baru).
tcp_rt.ko
Untuk Alibaba Cloud Linux 2 (versi kernel 4.19.91-21.al7 atau lebih baru).
Alibaba Cloud Linux 3.
Karena keduanya berbagi path file log yang sama, Anda tidak dapat menjalankannya secara bersamaan. Anda hanya dapat menggunakan salah satu pada satu waktu.
tcprt
Instalasi dan konfigurasi.
Instal tcprt.
sudo yum install -y tcprtKonfigurasi tcprt.
Buka file
/etc/tcprt-bpf/tcprt.yaml.sudo vim /etc/tcprt/tcprt.yamlTekan
iuntuk memasuki mode edit dan konfigurasikan parameter sesuai kebutuhan.File konfigurasi memiliki tiga bagian: global, per-port, dan init. Bagian-bagian tersebut dijelaskan dalam tabel berikut.
Global
Parameter
Deskripsi
Nilai
Default
peer
Mode pencocokan port tcprt default.
false: Mencocokkan port lokal.
true: Mencocokkan port remote.
true/false
Kosong
stats
Aktifkan output log stats.
enable/disable
disable
stats_interval
Interval output stats. Satuan: s.
Bilangan bulat
60
first_frame_bytes
Ambang batas byte untuk statistik waktu penyelesaian. Satuan: byte.
Daftar hingga 4 bilangan bulat
Kosong
per port.
Bagian ini berupa daftar yang kosong secara default. Setiap elemen mendefinisikan konfigurasi port.
Parameter
Deskripsi
Nilai
Default
port
Nomor port atau range.
Bilangan bulat yang merepresentasikan nomor port.
Dua bilangan bulat yang dipisahkan koma: interval tertutup range port.
Tidak ada
peer
Mode pencocokan untuk port ini (atau range).
true/false
Konfigurasi peering global
mode
Mode parsing protokol. default sesuai dengan perilaku tcp_rt.ko.
default/http/https
default
first_frame
Aktifkan statistik waktu penyelesaian berdasarkan ambang batas byte.
enable/disable
disable
Inisialisasi.
Parameter
Deskripsi
Nilai
Default
log_buf_num
Jumlah sub-buffer untuk file log.
Bilangan bulat
8
log_buf_size
Ukuran setiap sub-buffer log. Satuan: byte.
Ukuran maksimum file log adalah
log_buf_num * log_buf_size.Bilangan bulat
262144
stats_buf_num
Jumlah sub-buffer untuk file stats.
Bilangan bulat
8
stats_buf_size
Ukuran setiap sub-buffer stats. Satuan: byte.
Ukuran maksimum file stats adalah
stats_buf_num * stats_buf_size.Bilangan bulat
16384
Setelah mengedit file, tekan tombol
Esc, masukkan:wq, lalu tekan tombolEnteruntuk menyimpan file.Jalankan layanan untuk memuat konfigurasi secara otomatis.
sudo systemctl start tcprt(Opsional) Anda dapat mengaktifkan startup otomatis saat boot.
sudo systemctl enable tcprt
Uninstal tcprt.
sudo yum remove tcprtKetik
ydan tekan tombol Enter untuk mengonfirmasi peng-uninstalan.
Contoh konfigurasi tcprt
Parameter peer diatur ke false untuk mencocokkan port lokal secara default. Dua konfigurasi port ditambahkan:
Port 443 (pencocokan eksak): Parsing HTTPS diaktifkan untuk mencocokkan port lokal. Fitur first_frame (waktu penyelesaian berdasarkan ambang batas byte) diaktifkan dengan ambang batas 100, 2000, dan 20000 byte.
Range port 56789 hingga 56800: Parsing TCP default digunakan untuk mencocokkan port remote.
Fitur stats dinonaktifkan.
Ukuran buffer default digunakan untuk log dan stats.
global:
peer: false
stats: disable
stats_interval: 60
first_frame_bytes: [100, 2000, 20000, 0]
per-port:
-
port: 443
mode: https
first_frame: enable
-
port: 56789,56800
mode: default
peer: true
init:
log_buf_num: 8
log_buf_size: 262144
stats_buf_num: 8
stats_buf_size: 16384Waktu penyelesaian byte dilacak menggunakan paket ACK. Dalam praktiknya, satu paket ACK dapat mengakui sejumlah besar data, seperti puluhan kilobyte. Oleh karena itu, volume data yang dicatat mungkin melebihi ambang batas byte yang dikonfigurasi.
tcp_rt.ko
Muat dan konfigurasi modul.
Anda dapat menggunakan salah satu metode berikut.
Konfigurasi parameter saat memuat modul.
Muat modul tcp_rt dan konfigurasikan parameter.
Misalnya, muat modul tcp_rt dan konfigurasikan lports ke 80.
sudo modprobe tcp_rt lports=80Verifikasi konfigurasi.
sudo cat /sys/module/tcp_rt/parameters/lports
Muat modul lalu konfigurasi parameter.
Muat modul.
sudo modprobe tcp_rtSetelah modul dimuat, konfigurasikan parameter di direktori /sys/module/tcp_rt/parameters/.
Contoh: Pantau port lokal 80.
sudo sh -c 'echo 80 > /sys/module/tcp_rt/parameters/lports'Verifikasi konfigurasi.
sudo cat /sys/module/tcp_rt/parameters/lportsParameter dan perintah dijelaskan dalam tabel berikut.
Parameter
Deskripsi
Default
Perintah
stats
Aktifkan output stats:
0: Tidak.
1: Ya.
0
echo 0 > statsstats_interval
Interval output stats. Satuan: s.
60
echo 60 > stats_intervallports
Port server lokal yang dipantau (maksimal 6).
Tidak ada
echo 80,800,8080 > lportspports
Port remote dari koneksi TCP.
Tidak ada
echo 80,800,8080 > pportslports_range
Range port server lokal. Dua angka per range. Perintah contoh mengonfigurasi 80–100 dan 1000–2000.
Tidak ada
echo 80,100,1000,2000 >lports_rangepports_range
Range port remote. Dua angka per range. Perintah contoh mengonfigurasi 80–100 dan 1000–2000.
Tidak ada
echo 80,100,1000,2000 >pports_rangelog_buf_num
Ukuran maksimum file log adalah
log_buf_num * 256 k. Hanya dapat dikonfigurasi saat memuat modul.8
modprobe tcp_rt log_buf_num=10stats_buf_num
Ukuran maksimum file stats adalah
stats_buf_num * 16 k. Hanya dapat dikonfigurasi saat memuat modul.8
modprobe tcp_rt stats_buf_num=10
Lepas modul.
Jalankan perintah berikut untuk menonaktifkan modul
tcp-rt. Dengan demikian, koneksi baru tidak akan menggunakan TCP-RT.sudo echo 1 > /sys/kernel/debug/tcp-rt/deactivateJalankan perintah berikut untuk memverifikasi bahwa tidak ada koneksi yang menggunakan modul
tcp-rt.lsmodJika nilai
Used byuntuk modultcp-rtadalah0, tidak ada koneksi yang menggunakantcp-rt.Jika tidak ada koneksi yang menggunakan modul
tcp-rt, jalankan perintah berikut untuk meng-uninstal modultcp-rt.sudo rmmod tcp_rt
FAQ
Ukuran file log berbeda dari konfigurasi
Perintah seperti ls -l mungkin menunjukkan ukuran file yang lebih besar dari ukuran yang dikonfigurasi. Hal ini normal. File log disimpan dalam filesystem virtual /sys. Oleh karena itu, perintah ls -l tidak mencerminkan penggunaan ruang disk aktual karena file-file ini tidak mengonsumsi ruang disk. Ukuran yang ditampilkan merepresentasikan volume log kumulatif dan meningkat seiring waktu. Untuk memeriksa ukuran log aktual, Anda dapat mengarahkan log ke file biasa dan memeriksa file tersebut.
Gambar berikut menunjukkan contoh pengaturan default (2 MB). Jika Anda menggunakan perintah cat untuk mengarahkan konten log ke file, ukuran aktual file tersebut kira-kira 2 MB, sesuai harapan.
