Fitur access log Classic Load Balancer (CLB) dirancang untuk load balancing Lapisan 7 dan terintegrasi dengan Simple Log Service (SLS) guna meningkatkan efisiensi analisis log serta troubleshooting dalam pengembangan bisnis, pengujian, dan analisis perilaku pengguna.
Ikhtisar
CLB access logs
Fitur access log Classic Load Balancer (CLB) menangkap informasi detail mengenai semua permintaan yang dikirim ke instans CLB, termasuk waktu permintaan, alamat IP client, latensi, path permintaan, dan respons server. Sebagai titik masuk publik, CLB menangani volume permintaan yang tinggi. Anda dapat menggunakan access log untuk menganalisis perilaku pengguna, memahami distribusi traffic, dan melakukan troubleshooting masalah.
Setelah mengaktifkan fitur access log, Anda dapat menyimpan, mengumpulkan, dan menganalisis access log di Logstore Simple Log Service (SLS). Konfigurasi access log dapat dinonaktifkan kapan saja.
Fitur access log CLB gratis, tetapi Simple Log Service dikenakan biaya. Untuk informasi lebih lanjut, lihat Ikhtisar penagihan Simple Log Service.
Batasan
-
Fitur access log hanya tersedia untuk load balancing Lapisan 7 (pendengar HTTP dan HTTPS) pada CLB.
-
Pendengar Lapisan 4 (TCP/UDP) tidak mendukung fitur access log. Harap konfigurasikan logging langsung pada server backend Anda, misalnya menggunakan access log Nginx atau framework logging tingkat aplikasi.
-
Pastikan nilai Header HTTP tidak mengandung
||. Jika tidak, field log mungkin tidak sejajar saat proses parsing.
Prasyarat
-
Anda telah membuat instans CLB.
-
Anda telah membuat kelompok vServer, menambahkan server backend ke kelompok vServer tersebut, dan men-deploy aplikasi pada server backend.
-
Anda telah mengonfigurasi pendengar HTTP atau pendengar HTTPS untuk instans CLB.
-
Anda telah mengaktifkan Simple Log Service.
Konfigurasi access logs
Masuk ke Konsol CLB.
-
Pada panel navigasi kiri, pilih .
-
Pada bilah navigasi atas, pilih wilayah tempat instans CLB dideploy.
-
Jika ini pertama kalinya Anda menggunakan fitur ini, klik Authorize. Pada halaman Authorize Access to Cloud Resources, klik Confirm.
CatatanOtorisasi ini hanya perlu dilakukan sekali.
Jika Anda adalah Pengguna RAM, Akun Alibaba Cloud utama harus terlebih dahulu memberikan izin yang diperlukan kepada Anda. Untuk informasi lebih lanjut, lihat Otorisasi Pengguna RAM untuk menggunakan fitur access log CLB.
-
Pada halaman Access Log (Layer 7), temukan instans CLB target, lalu klik Configure di kolom Actions.
-
Pada panel Log Settings, atur Project dan Logstore, lalu klik OK.
-
Project: Project adalah unit manajemen sumber daya di SLS yang digunakan untuk isolasi dan kontrol resource. Kami menyarankan menggunakan Project berbeda untuk aplikasi berbeda.
-
Logstore: Logstore adalah unit untuk mengumpulkan, menyimpan, dan mengkueri data log di SLS. Kami menyarankan membuat Logstore terpisah untuk jenis log berbeda dalam satu aplikasi yang sama.
-
Select Logstore: Ini akan mengaktifkan dasbor analisis preset untuk Logstore yang dipilih secara default. Jika indeks sudah dikonfigurasi untuk Logstore tersebut, konfigurasi indeks yang ada akan ditimpa.
-
Catatan-
Pastikan Project berada di wilayah yang sama dengan instans CLB dan namanya unik secara global.
-
Setelah dikonfigurasi, Project dan Logstore SLS mungkin memerlukan beberapa menit hingga muncul di Konsol SLS. Data log tidak hilang selama periode ini. Jika belum terlihat, refresh halaman setelah beberapa saat.
Setelah Anda mengonfigurasi logging akses untuk load balancer, Anda dapat mengkueri dan mengambil informasi log dengan menggunakan field berikut di SLS.
Parameter
Deskripsi
body_bytes_sent
Ukuran badan HTTP yang dikirim ke client, dalam byte.
client_ip
Alamat IP client.
client_port
Port client yang mengirim permintaan.
host
Host diambil dari sumber pertama yang tersedia dalam urutan berikut: parameter permintaan, header Host, dan alamat IP server backend yang memproses permintaan.
http_host
Isi header Host dalam permintaan.
http_referer
Header Referer dari permintaan HTTP.
http_user_agent
Header User-Agent dari permintaan HTTP.
http_x_forwarded_for
Header X-Forwarded-For dari permintaan HTTP.
http_x_real_ip
Header X-Real-IP dari permintaan HTTP.
read_request_time
Waktu yang dibutuhkan load balancer untuk membaca permintaan. Satuan: milidetik.
request_length
Panjang permintaan, termasuk baris awal, header HTTP, dan badan HTTP.
request_method
Metode permintaan.
request_time
Waktu dari saat load balancer menerima byte pertama permintaan hingga mengirim byte terakhir respons. Satuan: detik.
request_uri
URI permintaan yang diterima oleh load balancer.
scheme
Skema permintaan. Nilai yang valid: http dan https.
server_protocol
Versi HTTP dari permintaan yang diterima oleh load balancer, seperti HTTP/1.0 atau HTTP/1.1.
slb_vport
Port pendengar load balancer.
slbid
ID instans load balancer.
ssl_cipher
Paket sandi yang digunakan untuk membangun koneksi SSL, seperti ECDHE-RSA-AES128-GCM-SHA256.
ssl_protocol
Protokol yang digunakan untuk membangun koneksi SSL, seperti TLSv1.2.
status
Kode status dalam respons dari load balancer.
tcpinfo_rtt
Waktu round-trip (RTT) koneksi TCP client. Satuan: mikrodetik.
time
Waktu saat entri log dicatat.
upstream_addr
Alamat IP dan port server backend.
upstream_response_time
Waktu dari saat koneksi ke server backend dibangun hingga koneksi ditutup setelah respons diterima. Satuan: detik.
upstream_status
Kode status respons yang diterima load balancer dari server backend.
vip_addr
Alamat IP virtual (VIP).
write_response_time
Waktu yang dibutuhkan load balancer untuk menulis respons. Satuan: milidetik.
-
Catatan penggunaan
client_ip dan http_x_forwarded_for
Saat menganalisis sumber permintaan dalam access log SLS, kedua field ini memiliki makna berbeda:
-
client_ip: Alamat IP sumber yang membangun koneksi ke CLB, sebagaimana diamati oleh CLB pada lapisan jaringan. Jika tidak ada proxy di depan client, ini adalah alamat IP client sebenarnya. Jika client berada di belakang proxy, ini adalah alamat IP egress proxy terdekat. -
http_x_forwarded_for: Nilai asli headerX-Forwarded-Fordalam permintaan inbound yang diterima oleh CLB. Nilai ini ditulis oleh client atau proxy upstream, dapat dipalsukan, dan hanya untuk referensi.
Untuk menganalisis sumber permintaan dalam access log, gunakan client_ip.
Jika Anda perlu mendapatkan alamat IP client sebenarnya pada server backend (bukan menganalisisnya dalam access log), perhatikan bahwa pendengar Lapisan-7 CLB secara default meneruskan alamat IP client sebenarnya dalam header X-Forwarded-For. Untuk informasi lebih lanjut, lihat Mengambil alamat IP client dengan pendengar Lapisan 7 CLB.
Mengidentifikasi aturan pengalihan mana yang menangani permintaan
Access log tidak mencatat ID kelompok server atau nama aturan pengalihan lalu lintas. Untuk menentukan aturan pengalihan mana yang menangani permintaan tertentu, korelasikan nilai request_uri dan http_host dalam log dengan aturan pengalihan yang dikonfigurasi di Konsol CLB. Berdasarkan hal ini, Anda dapat memverifikasi apakah aturan pengalihan bekerja sesuai harapan:
-
Mengidentifikasi aturan pengalihan yang tidak aktif: Kueri jumlah kali aturan pengalihan dicocokkan dalam rentang waktu tertentu dengan menggabungkan
slbid,request_uri, dan rentang waktu. Jika hasilnya0, aturan tersebut tidak mencocokkan permintaan apa pun selama periode tersebut. Evaluasi apakah perlu membersihkannya berdasarkan kebutuhan bisnis Anda.slbid: <instance-ID> and request_uri: <forwarding-rule-path> | select count(*) as hit_count -
Memverifikasi bahwa pengalihan sesuai ekspektasi: Bandingkan nilai
upstream_addr(alamat IP dan port server backend tempat permintaan benar-benar dialihkan) dalam log dengan anggota kelompok server pendengar terkait di Konsol CLB, untuk memastikan permintaan dialihkan ke server backend yang dimaksud.
Intersepsi kebijakan TLS
Koneksi yang diblokir oleh kebijakan keamanan TLS tidak menyelesaikan proses jabat tangan TLS dan karena itu tidak menghasilkan entri access log. Access log hanya mencatat permintaan yang berhasil membangun koneksi dengan CLB.
Kueri access logs
Setelah Anda mengonfigurasi fitur access log, Anda dapat mengkueri log di Konsol SLS.
Masuk ke Konsol CLB.
-
Pada panel navigasi kiri, pilih .
-
Pada bilah navigasi atas, pilih wilayah tempat instans CLB dideploy.
-
Pada halaman Access Log (Layer 7), temukan instans target, lalu klik View Logs di kolom Actions. Anda akan diarahkan ke Konsol SLS.
-
Setelah SLS dikonfigurasi, Anda dapat melihat entri log untuk client mana pun yang telah mengakses instans CLB.
-
Masukkan pernyataan SQL untuk mengkueri access log tertentu.
Sebagai contoh, jalankan pernyataan SQL berikut untuk menemukan 20 client teratas. Hasilnya dapat membantu Anda menganalisis sumber traffic dan menginformasikan keputusan bisnis.
* | select http_user_agent, count(*) as pv group by http_user_agent order by pv desc limit 20Sebagai contoh, jalankan pernyataan SQL berikut untuk mengkueri permintaan akses dari rentang alamat IP tertentu dengan memfilter log berdasarkan alamat IP sumber dan kode status respons.
* | select * where client_ip like '172.17.%' and status=200Memfilter log ketika beberapa instans CLB berbagi Logstore
Jika beberapa instans CLB berbagi Logstore SLS yang sama, kueri yang hanya difilter berdasarkan domain atau port dapat menghasilkan hasil yang tidak lengkap atau menyesatkan. Untuk mempersempit log ke instans CLB dan pendengar tertentu, gabungkan field
slbid(ID instans) danslb_vport(port pendengar) dalam kueri Anda.Sebagai contoh, untuk mengkueri error 5xx untuk instans dan port pendengar tertentu, jalankan pernyataan SQL berikut:
slbid: <instance-ID> and slb_vport: <port> and status: 5*Jika kueri Anda tidak menghasilkan data, verifikasi hal berikut:
-
Nilai
slbidharus persis sesuai dengan ID instans yang ditampilkan di Konsol CLB (bukan nama instans). -
Nilai
slb_vportharus sesuai dengan nomor port pendengar (misalnya,80atau443). -
Perluas rentang waktu kueri, karena entri log mungkin ditulis dengan sedikit penundaan.
CatatanPerhatikan hal berikut mengenai perilaku refresh log dan entri dengan timestamp yang sama:
-
Perilaku refresh log: Statistik indeks field di SLS diperbarui secara real time saat entri log ditulis. Tidak ada interval refresh tetap. Jika Anda mengganti rentang waktu kueri di konsol, klik tombol kueri untuk memuat ulang hasilnya.
-
Beberapa entri dengan timestamp yang sama: Jika Anda melihat beberapa entri log yang memiliki nilai
timeyang sama, ini merupakan perilaku yang diharapkan dan menunjukkan bahwa client mengirim beberapa permintaan dalam satu detik yang sama. Ini adalah pola normal untuk client frekuensi tinggi dan bukan indikasi kesalahan sistem. Jika Anda menentukan bahwa permintaan berulang tersebut tidak normal, konfigurasikan kebijakan kontrol akses untuk membatasi alamat IP sumber.
-
Kueri log secara terprogram menggunakan SDK atau API SLS
Data access log CLB disimpan di Logstore dalam Simple Log Service (SLS). Selain melalui konsol, Anda dapat mengkueri data log secara terprogram menggunakan SDK atau API SLS tanpa perlu masuk ke konsol. Untuk langkah-langkah detail dan contoh kode, lihat Quickstart: Upload dan analisis log dengan SDK SLS.
API sisi CLB seperti DescribeAccessLogsDownloadAttribute hanya digunakan untuk mengelola konfigurasi unduh log dan tidak dapat digunakan untuk mengkueri data log.
Analisis access logs
Anda dapat menggunakan dasbor di SLS untuk menganalisis access log. Dasbor menyediakan visualisasi data dan wawasan yang kaya.
-
Pada halaman SLS, klik ikon
di panel navigasi kiri, lalu klik Dashboard. -
Klik nama dasbor yang sesuai dengan access log instans CLB Anda, seperti slb_layer7_access_center_en, untuk melihat laporan analisis.
Analisis traffic bisnis
Selain dasbor, Anda dapat menulis pernyataan SQL untuk skenario bisnis umum berikut.
Menghitung permintaan berdasarkan port pendengar
Untuk menghitung jumlah total permintaan yang ditangani oleh instans CLB dan port pendengar tertentu:
slbid: <instance-ID> and slb_vport: <port> | select count(*) as total_requests
Menampilkan pangsa traffic domain
Untuk menghitung pangsa traffic setiap domain berdasarkan field http_host dan request_length:
* | select http_host, sum(request_length) as total_bytes, round(sum(request_length) * 100.0 / sum(sum(request_length)) over(), 2) as traffic_pct group by http_host order by total_bytes desc
Menampilkan distribusi traffic server backend
Untuk mengidentifikasi server backend mana yang menerima permintaan terbanyak dan memperkirakan distribusi traffiknya menggunakan upstream_addr dan request_length:
* | select upstream_addr, count(*) as request_count, sum(request_length) as total_bytes group by upstream_addr order by request_count desc limit 20
Identifikasi permintaan tidak normal
Access log CLB mencatat semua permintaan eksternal yang melewati instans load balancer. Jika Anda menemukan permintaan dari sumber tidak dikenal dalam log, Anda dapat menggunakan field kunci berikut untuk menentukan apakah permintaan tersebut merupakan permintaan eksternal tidak normal dan mengambil tindakan perlindungan yang sesuai.
Field kunci
Gabungkan field log berikut untuk menentukan apakah permintaan berasal dari client tidak normal:
-
client_ip: Alamat IP client yang mengirim permintaan. Jika alamat IP tersebut tidak termasuk dalam sistem bisnis Anda atau rentang alamat IP internal Alibaba Cloud, permintaan tersebut berasal dari client eksternal. Anda dapat menggunakan tool pencarian IP untuk memastikan sumbernya lebih lanjut. -
request_uri: Path URI permintaan. Jika muncul path yang tidak terkait dengan bisnis Anda (seperti path probe atau scan, atau path API layanan cloud lain), permintaan tersebut biasanya merupakan permintaan eksternal tidak normal. -
request_method: Metode HTTP dari permintaan. Jika bisnis Anda hanya menggunakan permintaan GET tetapi log menunjukkan banyak permintaan PUT atau DELETE, periksa adanya perilaku tidak normal. -
http_user_agent: Identifier User-Agent dari permintaan. Tool otomatis atau crawler sering menggunakan header User-Agent tertentu, seperticurlataupython-requests, yang berbeda dari permintaan browser normal.
Sebagai contoh, Anda dapat menggunakan pernyataan SQL berikut di SLS untuk mengkueri permintaan tidak normal dari alamat IP yang tidak diharapkan:
* | select client_ip, request_method, request_uri, count(*) as cnt group by client_ip, request_method, request_uri order by cnt desc limit 50
Batasi IP sumber tidak normal
Setelah Anda mengonfirmasi alamat IP sumber permintaan tidak normal, Anda dapat menggunakan fitur kontrol akses CLB untuk mengonfigurasi blacklist dan memblokir permintaan selanjutnya dari alamat IP tersebut. Lakukan langkah-langkah berikut:
-
Pada panel navigasi kiri Konsol CLB, pilih Access Control.
-
Buat kelompok kebijakan kontrol akses dan tambahkan alamat IP sumber tidak normal yang telah diidentifikasi ke dalamnya.
-
Ikat kelompok kebijakan tersebut ke pendengar Anda sebagai blacklist. CLB kemudian akan menolak semua permintaan dari alamat IP yang masuk daftar hitam alih-alih meneruskannya ke server backend.
Nonaktifkan access logs
Anda dapat menonaktifkan fitur access log untuk berhenti mengumpulkan access log CLB.
Menonaktifkan logging akses untuk instans CLB tidak menghapus Project atau Logstore terkait. Log historis instans tersebut tidak langsung dihapus, dan Anda masih dapat mengelolanya di SLS.
Masuk ke Konsol CLB.
-
Pada panel navigasi kiri, pilih .
-
Pada bilah navigasi atas, pilih wilayah tempat instans CLB dideploy.
-
Pada halaman Access Log (Layer 7), temukan instans target, lalu klik Disable Logging di kolom Actions.
-
Pada kotak dialog yang muncul, klik OK untuk menonaktifkan logging akses untuk instans tersebut.
Dokumen terkait
-
Untuk mempelajari lebih lanjut tentang Simple Log Service, lihat Apa itu Simple Log Service?.
-
Jika Anda mencurigai server backend tidak sehat saat menggunakan load balancing Lapisan 7, lihat Gunakan access log CLB untuk cepat mengidentifikasi server backend yang tidak sehat.
FAQ
Bagaimana cara menggunakan access log untuk troubleshooting latensi permintaan, timeout, atau masalah koneksi?
Mengidentifikasi sumber latensi
Bandingkan field request_time dan upstream_response_time:
-
request_time: Waktu total yang berlalu sejak CLB menerima byte pertama permintaan hingga mengirim byte terakhir respons. Satuan: detik. -
upstream_response_time: Waktu sejak CLB membangun koneksi ke server backend hingga menerima respons lengkap dan menutup koneksi. Satuan: detik.
Selisih antara keduanya (request_time dikurangi upstream_response_time) mencakup pemrosesan CLB, round trip jaringan antara client dan CLB, serta waktu yang dibutuhkan client untuk membaca respons. Bandingkan proporsinya untuk menemukan bottleneck:
-
upstream_response_timemenyumbang proporsi besar darirequest_time: Latensi terutama disebabkan oleh respons server backend yang lambat. Periksa performa aplikasi backend, database, dan sebagainya. -
upstream_response_timemenyumbang proporsi kecil (artinya selisihnya besar): Backend merespons dengan cepat, sehingga bottleneck lebih mungkin terjadi pada jaringan antara client dan CLB, atau client membaca badan respons besar dengan lambat. Gunakan field seperticlient_ipdanbody_bytes_sentuntuk investigasi lebih lanjut, alih-alih mengaitkan latensi pada pemrosesan CLB.
Menangani timeout
Permintaan yang mengalami timeout gagal selama proses jabat tangan TCP atau fase pembentukan protokol dan tidak menghasilkan entri access log yang sesuai. Akibatnya, Anda tidak dapat menemukan permintaan ini secara langsung dalam access log. Untuk investigasi tidak langsung, kueri access log untuk rentang waktu terkait di Konsol SLS dan periksa adanya penurunan tajam volume permintaan atau celah dalam log untuk memperkirakan kapan timeout terjadi. Untuk diagnosis lebih lanjut, lakukan troubleshooting end-to-end menggunakan log upstream dan downstream, seperti log WAF di upstream CLB dan log aplikasi serta firewall pada instans ECS backend Anda.