Agen Application Real-Time Monitoring Service (ARMS) mengumpulkan metrik seperti jumlah permintaan, jumlah error, dan waktu respons. Untuk meningkatkan keragaman dan akurasi data, metrik tersebut mencakup dimensi seperti alamat IP, pernyataan SQL, dan URL.
Beberapa dimensi dapat menghasilkan sejumlah besar nilai unik, yang dikenal sebagai kardinalitas tinggi. Misalnya, API RESTful dengan templat URL /api/v1/users/{ID}/info menghasilkan URL berbeda untuk setiap ID pengguna. Kardinalitas tinggi memberatkan penyimpanan, menyebabkan kehilangan data saat penulisan dan kueri yang lambat, serta meningkatkan biaya.
Untuk mengatasi hal ini, ARMS menerapkan kebijakan konvergensi yang mengganti nilai dimensi ber-kardinalitas tinggi dengan placeholder yang dinormalisasi.
Referensi cepat: format konvergensi
Tabel berikut merangkum format placeholder dan kondisi kemunculannya.
| Format | Skenario |
|---|---|
{ARMS_IP}:port | Jumlah alamat IP yang mengakses port yang sama melebihi ambang batas (default: 50). |
{ARMS_STATIC_REQ} atau {ARMS_S_XXX} | URL mengarah ke resource statis. |
{ARMS_ATTACK_REQ} | URL berisi string yang dapat dieksploitasi untuk serangan siber. |
{ARMS_PARAMED_REQ} | URL berisi parameter kueri. |
{ARMS_OTHERS} | Jumlah nilai dimensi yang direkam dalam satu periode waktu melebihi ambang batas ruang kardinalitas. Untuk ambang batas default, lihat Konvergensi ruang kardinalitas. |
{ARMS_NUMBER} | Segmen path URL (dipisahkan oleh /) semuanya berupa angka dan terlalu panjang atau sangat bervariasi. |
{ARMS_WORD} | Segmen path URL (dipisahkan oleh /) semuanya berupa kata dan terlalu panjang atau sangat bervariasi. |
{ARMS_ANY} | Segmen path URL (dipisahkan oleh /) berupa string campuran huruf dan angka dan terlalu panjang atau sangat bervariasi. |
{XXX} | URL menggunakan anotasi Spring Controller. |
String yang berisi * | Konvergensi berbasis statistik memori (hanya untuk agen ARMS versi sebelum V4.x). |
Kebijakan konvergensi
Seluruh kebijakan konvergensi diaktifkan secara default. Setiap kebijakan, kecuali konvergensi ruang kardinalitas, dapat dinonaktifkan secara manual.
Konvergensi berbasis anotasi Spring
Untuk API RESTful dengan variabel path, penggunaan URL permintaan mentah sebagai nilai dimensi menyebabkan divergensi. ARMS membaca informasi path dari anotasi routing Spring (seperti @RequestMapping) dan menggunakan path yang didefinisikan dalam anotasi tersebut sebagai nilai dimensi.
| Properti | Detail |
|---|---|
| Logika | Membaca informasi path dari anotasi routing URL Spring. |
| Format | Nilai yang dikonfigurasi dalam anotasi routing. |
| Tipe data yang didukung | URL (hanya URL layanan inbound; URL outbound tidak didukung). |
| Lokasi | Agen ARMS |
| Versi agen yang didukung | 2.9.1.2 dan versi lebih baru |
Contoh
APIController berikut mendefinisikan endpoint RESTful yang mengambil informasi pengguna menggunakan variabel path. Anotasi @RequestMapping("/api/v1/user/{userId}/info") menentukan pola URL.
@RestController
@RequestMapping("/api/v1")
public class APIController {
@RequestMapping("/user/{userId}/info")
public String getUserInfo(@PathVariable("userId") String userId) {
return "hello " + userId;
}
}Hasil: /api/v1/user/1234/info dikonvergensikan menjadi /api/v1/user/{userId}/info.
Konvergensi berbasis statistik memori
Untuk aplikasi yang tidak menggunakan framework Spring Web atau ketika konvergensi berbasis anotasi gagal, ARMS menggunakan konvergensi berbasis statistik memori sebagai cadangan.
| Properti | Detail |
|---|---|
| Logika | 1. Memisahkan setiap input berdasarkan pembatas yang telah ditentukan (seperti / atau =) untuk mengidentifikasi sekumpulan kata kunci. 2. Menghitung jumlah nilai unik pada setiap posisi (kardinalitas). Jika kardinalitas melebihi ambang batas yang telah ditentukan, kata kunci pada posisi tersebut diganti dengan *. |
| Format | String yang berisi *. |
| Tipe data yang didukung | Semua |
| Lokasi | Agen ARMS |
| Versi agen yang didukung | 2.x, dan versi setelah 2.x tetapi sebelum 4.x |
Contoh
Aplikasi menyediakan templat URL /api/v1/user/${userId}/info. Modul statistik memori mendeteksi divergensi pada ID pengguna dan mengonvergensikan URL tersebut menjadi /api/v1/user/*/info.
Konvergensi kustom
Tentukan aturan konvergensi kustom untuk mencocokkan URL dengan ekspresi reguler dan menggantinya dengan target yang ditentukan.
| Properti | Detail |
|---|---|
| Logika | Mencocokkan aturan konvergensi kustom secara berurutan. Aturan pertama yang cocok akan diterapkan. |
| Format | Ditentukan oleh konfigurasi Anda. |
| Tipe data yang didukung | URL |
| Lokasi | Agen ARMS V4.x dan versi lebih baru: agen. Agen ARMS sebelum V4.x: server. |
| Versi agen yang didukung | Semua |
Contoh
Aturan kustom: konvergensikan semua URL yang cocok dengan /api/v1/user/[\d]+/info menjadi /api/v1/getUserInfo.
Hasil: semua URL yang cocok dengan ekspresi reguler /api/v1/user/[\d]+/info dikonvergensikan menjadi /api/v1/getUserInfo.
Konvergensi resource statis
Beberapa versi lama agen ARMS memantau metrik untuk resource statis. Karena URL resource statis sering berubah, konvergensi untuk metrik ini diaktifkan secara default.
| Properti | Detail |
|---|---|
| Logika | Memeriksa apakah ekstensi URL cocok dengan daftar default ekstensi resource statis. Jika ya, URL tersebut dikonvergensikan. |
| Format | Default: {ARMS_STATIC_REQ}. Jika Anda mengajukan tiket untuk mengaktifkan Konfigurasi Lanjutan, formatnya mencakup ekstensi resource (misalnya, {ARMS_S_JPG}). |
| Tipe data yang didukung | URL |
| Lokasi | Agen ARMS V4.x dan versi lebih baru: agen. Agen ARMS sebelum V4.x: server. |
| Versi agen yang didukung | Semua |
Ekstensi resource statis default:
.log .7z .tgz .jpg .jpeg .png .gif .css .js .ico .woff2 .xml .svg .pdf .txt .text .ppt .word .xlsx .tar.gz .tar.bz2 .sh .yml .yaml .zip .gz .ttf .woff .eot .rar .properties
Contoh
Secara default, /api/v1/hello.jpg dikonvergensikan menjadi {ARMS_STATIC_REQ}. Dengan Konfigurasi Lanjutan diaktifkan, URL tersebut dikonvergensikan menjadi {ARMS_S_JPG}.
Konvergensi permintaan serangan siber
Layanan dapat menerima permintaan serangan siber (seperti upaya membaca file /etc/passwd). Permintaan ini dibuat oleh penyerang dan sering berubah. Merekam semuanya memberatkan sumber daya penyimpanan.
| Properti | Detail |
|---|---|
| Logika | Memeriksa apakah URL berisi karakter yang umum dieksploitasi untuk serangan siber. Jika ya, URL tersebut dikonvergensikan. |
| Format | {ARMS_ATTACK_REQ} |
| Tipe data yang didukung | URL |
| Lokasi | Agen ARMS V4.x dan versi lebih baru: agen. Agen ARMS sebelum V4.x: server. |
| Versi agen yang didukung | Semua |
Karakter default: ' $ \ ' !
Contoh
/app/v1/user/info?cmd='more /etc/passwd' dikonvergensikan menjadi {ARMS_ATTACK_REQ}.
Konvergensi parameter kueri
Secara default, agen ARMS tidak menangkap parameter kueri saat mengumpulkan URL. Namun, beberapa URL berisi parameter kueri yang dapat menyebabkan divergensi.
| Properti | Detail |
|---|---|
| Logika | Memeriksa apakah URL berisi parameter kueri. Jika ya, URL tersebut dikonvergensikan. |
| Format | Default: {ARMS_PARAMED_REQ}. Jika Anda mengajukan tiket untuk mengaktifkan Konfigurasi Lanjutan, hasil konvergensi mempertahankan path URL dan mengganti parameter dengan {ARMS_REQ_PARAMS}. |
| Tipe data yang didukung | URL |
| Lokasi | Agen ARMS V4.x dan versi lebih baru: agen. Agen ARMS sebelum V4.x: server. |
| Versi agen yang didukung | Semua |
Pembatas parameter kueri default: ; ? &
Contoh
Secara default, /api/v1/user/info?userId=12345 dikonvergensikan menjadi {ARMS_PARAMED_REQ}. Dengan Konfigurasi Lanjutan diaktifkan, URL tersebut dikonvergensikan menjadi /api/v1/user/info?{ARMS_REQ_PARAMS}.
Konvergensi kata tidak bermakna
URL dengan kata atau rangkaian digit yang terlalu panjang cenderung mengalami divergensi. ARMS mengganti segmen path yang melebihi ambang batas panjang tertentu.
| Properti | Detail |
|---|---|
| Logika | Memisahkan URL menjadi larik kata kunci berdasarkan garis miring (/) dan memeriksa setiap kata kunci terhadap ambang batas panjang berikut: panjang maksimum kata (64 karakter), panjang maksimum digit (10 karakter), dan panjang maksimum digit dalam sebuah kata (10 karakter). |
| Format | Digit terlalu panjang: {ARMS_NUMBER}. Kata terlalu panjang: {ARMS_WORD}. String alfanumerik campuran terlalu panjang: {ARMS_ANY}. |
| Tipe data yang didukung | URL |
| Lokasi | Agen ARMS V4.x dan versi lebih baru: agen. Agen ARMS sebelum V4.x: server. |
| Versi agen yang didukung | Semua |
Contoh
/api/2024040710/hello2024040710 dikonvergensikan menjadi /api/{ARMS_NUMBER}/{ARMS_ANY}.
Konvergensi cerdas
Setelah kebijakan sebelumnya diterapkan, beberapa URL divergen mungkin masih tersisa. ARMS secara berkala menghasilkan aturan konvergensi menggunakan algoritma untuk menangani URL tersebut.
| Properti | Detail |
|---|---|
| Logika | 1. Mengelompokkan contoh URL menggunakan algoritma. 2. Mengidentifikasi pola URL setiap kelompok dan menghasilkan aturan konvergensi. 3. Menggabungkan aturan konvergensi antar kelompok. |
| Format | Segmen digit divergen: {ARMS_NUMBER}. Segmen huruf divergen: {ARMS_WORD}. Segmen alfanumerik campuran divergen: {ARMS_ANY}. |
| Tipe data yang didukung | URL |
| Lokasi | Agen ARMS V4.x dan versi lebih baru: agen. Agen ARMS sebelum V4.x: server. |
| Versi agen yang didukung | Semua |
Contoh
/api/product/1/info
/api/product/2/info
....
/api/product/N/infoServer mencocokkan URL tersebut menggunakan ekspresi reguler /api/product/[\d]+/info dan mengonvergensikannya menjadi /api/product/{ARMS_NUMBER}/info.
Normalisasi SQL
Agen ARMS dapat mengumpulkan banyak pernyataan SQL akibat sharding, anotasi, atau literal inline. ARMS menormalisasi setiap pernyataan SQL dengan mengganti nilai-nilai yang divergen.
| Properti | Detail |
|---|---|
| Logika | 1. Menghapus anotasi. 2. Mengganti teks biasa. 3. Mengganti nama database dan tabel yang di-sharding. |
| Format | Digit atau huruf divergen diganti. |
| Tipe data yang didukung | SQL |
| Lokasi | Agen ARMS |
| Versi agen yang didukung | 4.x dan versi lebih baru |
Contoh
select * from cache_0 where ckey='23'Hasil:
select * from cache_{NUM} where ckey=?Konvergensi alamat IP
Jika aplikasi Anda bergantung pada banyak layanan eksternal yang diakses melalui alamat IP, agen ARMS dapat mengumpulkan banyak alamat IP unik, sehingga menyebabkan divergensi.
| Properti | Detail |
|---|---|
| Logika | 1. Mengelompokkan alamat IP berdasarkan port. 2. Menerapkan konvergensi jika jumlah alamat IP dalam satu kelompok melebihi ambang batas (default: 50). |
| Format | {ARMS_IP}:port |
| Tipe data yang didukung | IP |
| Lokasi | Agen ARMS V4.x dan versi lebih baru: agen. Agen ARMS sebelum V4.x: server. |
| Versi agen yang didukung | Semua |
Contoh
1.1.1.1:8080
...
1.1.1.255:8080Alamat-alamat IP tersebut dikonvergensikan menjadi {ARMS_IP}:8080.
Konvergensi ruang kardinalitas
Kebijakan sebelumnya menyelesaikan sebagian besar masalah kardinalitas tinggi pada URL. Namun, untuk pernyataan SQL dan tipe data lainnya, sejumlah besar nilai dimensi mungkin tetap direkam. Untuk mencegah hal ini, ARMS membatasi jumlah nilai dimensi yang direkam dalam setiap periode waktu.
| Properti | Detail |
|---|---|
| Logika | 1. Secara berkala menghasilkan ruang kardinalitas dengan ukuran tetap. 2. Untuk setiap nilai dimensi, memeriksa apakah nilai tersebut ada dalam ruang kardinalitas. Jika ya, nilai tersebut dikembalikan apa adanya. Jika tidak, nilai tersebut ditambahkan ke ruang kardinalitas. Jika ruang penuh, {ARMS_OTHERS} dikembalikan. |
| Format | {ARMS_OTHERS} |
| Tipe data yang didukung | Semua |
| Lokasi | Agen ARMS V4.x dan versi lebih baru: agen. Agen ARMS sebelum V4.x: server. |
| Versi agen yang didukung | Semua |
Ambang batas per jam default
| Item | Ambang batas per jam |
|---|---|
| Antarmuka URL | 500 |
| Tugas penjadwalan | 1.000 |
| Antarmuka RPC | 1.000 |
| Antarmuka hulu | 200 |
| Panggilan SQL normal | 100 |
| Panggilan SQL lambat | 100 |
| URL permintaan eksternal | 200 |
| Alamat permintaan eksternal | 100 |
Contoh
Asumsikan ukuran ruang kardinalitas diatur menjadi 100 catatan per jam. Alamat layanan eksternal:
www.a1.com
www.a2.com
....
www.a1000.comHanya 100 alamat pertama yang direkam per jam. Alamat berikutnya dikonvergensikan menjadi {ARMS_OTHERS}.
Urutan eksekusi
Kebijakan konvergensi dijalankan secara berurutan sesuai daftar di bawah ini. Begitu nilai dimensi cocok dengan suatu kebijakan, kebijakan berikutnya dilewati.
Agen ARMS sebelum V4.x
Sisi agen:
URL: Konvergensi berbasis anotasi Spring > Konvergensi berbasis statistik memori
SQL: Konvergensi berbasis statistik memori
IP dan lainnya: Konvergensi berbasis statistik memori
Sisi server:
URL: Konvergensi kustom > Konvergensi permintaan serangan siber > Konvergensi parameter kueri > Konvergensi resource statis > Konvergensi kata tidak bermakna > Konvergensi cerdas > Konvergensi ruang kardinalitas
SQL: Konvergensi kustom > Konvergensi ruang kardinalitas
IP dan lainnya: Konvergensi kustom > Konvergensi alamat IP > Konvergensi ruang kardinalitas
Agen ARMS V4.x dan versi lebih baru
Sisi agen:
URL: Konvergensi berbasis anotasi Spring > Konvergensi kustom > Konvergensi permintaan serangan siber > Konvergensi parameter kueri > Konvergensi resource statis > Konvergensi kata tidak bermakna > Konvergensi cerdas > Konvergensi ruang kardinalitas
SQL: Konvergensi kustom > Normalisasi SQL > Konvergensi ruang kardinalitas
IP dan lainnya: Konvergensi kustom > Konvergensi alamat IP > Konvergensi ruang kardinalitas
Sisi server: Tidak berlaku (seluruh konvergensi dijalankan di sisi agen).
FAQ
Bagaimana cara melihat nilai asli sebelum konvergensi?
Agen ARMS V4.x dan versi lebih baru: Nilai asli maupun hasil konvergensi dicatat dalam data jejak. Gunakan Trace Explorer untuk melihat nilai asli.
Agen ARMS sebelum V4.x: Nilai asli tidak tersedia karena konvergensi terjadi di sisi server.
Bagaimana cara menyesuaikan aturan konvergensi?
Tentukan aturan konvergensi kustom di Konsol ARMS. Di halaman detail aplikasi, pilih Configuration > Convergence pada bilah navigasi atas.

Sebagai contoh, tentukan ekspresi reguler /api/v1/user/\d+/info untuk mengonvergensikan semua URL yang cocok menjadi /api/v1/user/userId/info. URL /api/v1/user/124343543/info kemudian dikonvergensikan menjadi /api/v1/user/userId/info.
Bagaimana cara mengecualikan URL tertentu dari konvergensi?
Tentukan URL yang ingin dikecualikan dari konvergensi di Konsol ARMS. Buka halaman Configuration > Convergence yang sama seperti pada pertanyaan sebelumnya.
Sebagai contoh, jika Anda mengecualikan /api/v1/user/9999/info dari konvergensi, URL ini tidak dikonvergensikan menjadi /api/v1/user/userId/info.
Apa perbedaan antara konvergensi sisi agen dan sisi server?
Konvergensi sisi agen memproses data di agen ARMS sebelum melaporkannya ke server. Hal ini mengurangi beban pemrosesan server dan memberikan akurasi data 100%.
Konvergensi sisi server diterapkan ketika versi agen tidak mendukung kebijakan tertentu. Tanpa konvergensi sisi agen, agen mengirim paket data yang belum dikonvergensikan ke server. Paket besar menimbulkan dua risiko:
Kehilangan data: Paket yang terlalu besar mungkin ditolak.
Akurasi berkurang: Keterbatasan pemrosesan di sisi server dapat memengaruhi akurasi data hasil konvergensi.
Upgrade ke versi agen ARMS terbaru agar seluruh kebijakan konvergensi dijalankan di sisi agen.