Application Real-Time Monitoring Service (ARMS) memungkinkan Anda mengekstrak parameter tertentu dari permintaan dan tanggapan tanpa mengubah kode. Hal ini membantu Anda menemukan akar penyebab masalah serta melacak informasi permintaan. Anda dapat mengonfigurasi aturan ekstraksi parameter bisnis dan menetapkan aturan pencocokan kode kesalahan kustom berdasarkan parameter yang diekstraksi.
Refleksi Java serta serialisasi atau deserialisasi terlibat dalam aturan ekstraksi parameter bisnis. Ini mungkin menyebabkan overhead tambahan untuk aplikasi Anda. Untuk detail lebih lanjut tentang overhead, lihat bagian Overhead Kinerja dari topik ini.
Prasyarat
Fitur ini saat ini hanya berlaku untuk aplikasi Java.
ARMS agent versi 4.1.0 atau yang lebih baru telah diinstal. Untuk informasi lebih lanjut, lihat Ikhtisar Pemantauan Aplikasi. Jika menggunakan ARMS agent sebelum versi 4.1.0, fitur ini tidak akan berfungsi meskipun telah dikonfigurasi.
Pada ARMS agent versi 4.2.0 atau yang lebih baru, beberapa aturan pencocokan API dan aturan ekstraksi parameter dapat ditambahkan ke satu aturan ekstraksi parameter bisnis.
Pada ARMS agent versi sebelum 4.2.0 tetapi setelah 4.1.0, hanya aturan pencocokan pertama yang berlaku.

Pergi ke halaman Aturan Ekstraksi Parameter Bisnis
Masuk ke Konsol ARMS. Di bilah navigasi kiri, pilih .
Pilih wilayah di bilah navigasi atas dan klik aplikasi.
CatatanIkon di kolom Language menunjukkan bahasa pemrograman aplikasi:
: Java
: Go
: Python- (Tanda hubung): aplikasi yang dipantau dalam Managed Service for OpenTelemetry
Di bilah navigasi atas, pilih .
Di bagian Aturan Ekstraksi Parameter Bisnis, Anda dapat membuat, melihat, atau memodifikasi aturan ekstraksi parameter bisnis untuk aplikasi.
ARMS agent secara dinamis mengidentifikasi perubahan dalam aturan ekstraksi parameter bisnis dan mengekstrak parameter berdasarkan semua aturan yang diaktifkan.

Di bagian Pengaturan Kesalahan Kustom, Anda dapat mengonfigurasi aturan pencocokan kode kesalahan kustom untuk memfilter nilai parameter bisnis yang diekstraksi.

Parameter bisnis aturan ekstraksi
Tipe parameter dan sumber yang didukung
Aturan ekstraksi parameter bisnis memberikan persyaratan pada kerangka kerja dan metode penggunaan. Tabel berikut menjelaskan tipe parameter dan sumber yang didukung oleh aturan ekstraksi parameter bisnis.
Tipe parameter | Sumber parameter | Kerangka kerja yang didukung | Catatan |
Permintaan server HTTP |
|
| ARMS agent memanggil metode |
Body | Spring MVC 4.2.0+ | Nama kelas harus diberi anotasi @Controller dan metode harus diberi anotasi @RequestBody. | |
Tanggapan server HTTP |
|
| - |
Body | Spring MVC 4.2.0+ | Nama kelas harus diberi anotasi @Controller dan metode harus diberi anotasi @ResponseBody. | |
Permintaan klien HTTP |
|
| - |
Tanggapan klien HTTP | Header |
| - |
Informasi pengecualian | Pesan | - | Kelas harus mewarisi java.lang.Exception. |
Buat aturan
Aturan dikirimkan ke agen klien secara real time saat dibuat dan diaktifkan. Aturan pertama memerlukan restart aplikasi untuk berlaku, sedangkan aturan berikutnya berlaku dalam 1 hingga 2 menit tanpa restart aplikasi.
Parameter bisnis yang diekstrak dicatat ke atribut spans. Anda dapat menanyakan parameter tersebut di halaman Trace Explorer.
Secara default, nama atribut memiliki awalan
biz.dan harus unik.Apakah data span dilaporkan dipengaruhi oleh kebijakan sampling. Anda dapat memodifikasi kebijakan sampling untuk memastikan bahwa data penting dilaporkan dengan benar. Untuk informasi lebih lanjut, lihat Pilih Mode Sampling Jejak untuk ARMS Agent Sebelum V3.2.8.
Jika parameter bisnis yang ingin Anda ekstrak tidak ditemukan dalam jejak, periksa apakah konfigurasi aturan ekstraksi parameter bisnis valid.
Di bagian Aturan Ekstraksi Parameter Bisnis, klik Aturan Baru. Di halaman yang muncul, konfigurasikan parameter dan klik OK.

Nama Aturan: Nama aturan.
Nama Atribut: Nama atribut yang sesuai dengan nilai yang diekstrak oleh aturan dalam span. Secara default, nilai terdiri dari awalan biz. dan beberapa kata. Setiap kata hanya dapat berisi huruf, angka, tanda hubung (-), dan garis bawah (_) dan harus dipisahkan oleh titik (.). Maksimal 10 kata diizinkan dalam nama atribut.
Tipe Ekstraksi Parameter: Tipe parameter yang ingin Anda ekstrak.
Antarmuka Efektif: Antarmuka HTTP tempat aturan berlaku. ARMS agent mengekstrak parameter hanya dari antarmuka yang cocok. Parameter ini valid hanya jika parameter Tipe Ekstraksi Parameter diatur ke Permintaan Server HTTP atau Tanggapan Server HTTP.
Nama Kelas Pengecualian: Nama kelas terkait pengecualian. ARMS agent mengekstrak parameter hanya dari pengecualian yang cocok. Parameter ini valid hanya jika parameter Tipe Ekstraksi Parameter diatur ke Informasi Pengecualian.
Tipe Pengkodean Teks: Format encoding parameter yang ingin Anda ekstrak.
Aturan Ekstraksi Parameter: Sumber yang berisi parameter yang ingin Anda ekstrak dan metode yang ingin Anda gunakan untuk mengekstrak parameter. Anda dapat menentukan beberapa sumber parameter dan langkah-langkah ekstraksi parameter. Jika parameter dapat diekstrak dari beberapa sumber, parameter diekstrak berdasarkan urutan langkah-langkah ekstraksi parameter. Untuk informasi lebih lanjut, lihat bagian Contoh Aturan Ekstraksi Parameter Bisnis dari topik ini.
Sumber Parameter: Sumber dari mana Anda ingin mengekstrak parameter. Jika Anda memilih Header, Cookie, atau Parameter dari daftar drop-down, Anda harus memasukkan kunci untuk ekstraksi awal. Jika Anda memilih Body atau Message dari daftar drop-down, parameter diekstrak dari seluruh body atau pesan.
Tambahkan Langkah-Langkah Pemrosesan Parameter: Langkah-langkah untuk mengekstrak parameter. Konfigurasi ini digunakan untuk mengurai nilai parameter yang ingin Anda peroleh dari satu atau lebih sumber. Anda dapat menentukan beberapa langkah ekstraksi parameter. Hasil penguraian suatu langkah adalah input dari langkah berikutnya. Jika Anda tidak menentukan langkah ekstraksi parameter, nilai parameter yang diperoleh adalah teks JSON dari sumber. Untuk informasi lebih lanjut, lihat bagian Praktik Terbaik untuk Langkah-Langkah Ekstraksi Parameter dari topik ini.
Metode ekstraksi parameter berikut didukung:
Ognl: Parameter input harus berupa objek. Ekspresi Object-Graph Navigation Language (OGNL) yang menggunakan notasi titik didukung. Contoh:
#this.data.getCode().JsonPath: Parameter input harus berupa string JSON. Ekspresi JsonPath yang menggunakan notasi titik didukung. Contoh:
$.data.code.Regex: Parameter input harus berupa string. Ekspresi reguler yang berbasis grup penangkapan bernama didukung. Substring yang akan diekstrak sesuai dengan grup penangkapan bernama res. Contoh:
.*from:(?<res>[a-z]+).*.
Status Pengaktifan: Menentukan apakah akan mengaktifkan aturan.
Verifikasi aturan
Setelah Anda mengonfigurasi aturan ekstraksi parameter bisnis untuk aplikasi, aturan berlaku tanpa perlu me-restart aplikasi. Anda dapat pergi ke halaman Trace Explorer untuk melihat jejak terkait. Jika atribut kustom ditambahkan ke span antarmuka yang sesuai, aturan ekstraksi parameter bisnis berlaku.
Temukan nama atribut yang sesuai dengan aturan yang Anda buat.

Di halaman Trace Explorer, tambahkan
attributes.$attributesNamesebagai kondisi filter untuk menanyakan spans.
Klik jejak untuk melihat atribut kustom dari span.

Kelola aturan
Untuk mengaktifkan atau menonaktifkan aturan, nyalakan atau matikan sakelar Status Pengaktifan untuk aturan.
Untuk memodifikasi atau menghapus aturan, klik Edit atau Hapus di kolom Tindakan Aturan.
Untuk menghapus beberapa aturan sekaligus, pilih aturan dan klik Hapus Massal di bawah daftar aturan.
Untuk menyinkronkan beberapa aturan ke aplikasi lain sekaligus, pilih aturan dan klik Salin Massal ke Aplikasi Lain di bawah daftar aturan. Di kotak dialog yang muncul, tentukan apakah akan menyinkronkan aturan ke semua aplikasi lain atau aplikasi tertentu.
CatatanTunggu 1 hingga 2 menit agar operasi berlaku.
Hanya aturan ekstraksi parameter bisnis yang disinkronkan. Kesalahan terkait tidak disinkronkan.
Nama atribut yang sesuai dengan aturan ekstraksi parameter bisnis harus unik. Jika atribut dengan nama yang sama sudah ada di aplikasi tujuan, aturan tidak disinkronkan ke aplikasi.

Contoh aturan ekstraksi parameter bisnis
OGNL
OGNL adalah bahasa ekspresi untuk mendapatkan dan menyetel properti objek Java. Anda dapat mengekstrak objek Java yang diberi anotasi @ResponseBody atau @RequestBody. Hasil ekstraksi dikonversi menjadi string. Jika objek Java diekstrak, string JSON dikembalikan untuk ekstraksi lebih lanjut. Contoh:
@RestController
@RequestMapping("/components/api/v1/mall")
public class MallController {
@RequestMapping("/product")
@ResponseBody
public ResponseBody product(@RequestBody RequestBody req) {
// Kode bisnis
}
static class RequestBody {
String requestId;
Map<String, String> queryParam;
public String getQueryJsonStr() {
return JSON.toJsonString(queryParam);
}
}
static class ResponseBody {
int code;
boolean success;
String message;
}
}Ekstrak bidang requestId dari RequestBody, seperti yang ditunjukkan pada gambar berikut.

Ekstrak bidang code dari RequestBody, seperti yang ditunjukkan pada gambar berikut.

OGNL memungkinkan Anda menggunakan metode get dalam objek untuk mendapatkan bidang. Ekstrak hasil eksekusi metode getQueryJsonStr() di RequestBody, seperti yang ditunjukkan pada gambar berikut.
Pastikan metode getQueryJsonStr() sudah ada di kelas sebelumnya.

JsonPath
Ekspresi JsonPath memungkinkan Anda mengekstrak string JSON dan mendapatkan properti dari string JSON. Contoh:
{
"code": 200,
"message": "Query success.",
"success": true,
"data": {
"name": "John",
"age": 21
}
}Ekstrak bidang data.age dari data JSON sebelumnya, seperti yang ditunjukkan pada gambar berikut.

Regex
Ekspresi reguler (regex) adalah string teks yang digunakan untuk mencocokkan kombinasi karakter dalam string. Anda dapat mengambil grup penangkapan bernama "res" sebagai hasil ekstraksi. Contoh:
Secara default, ekspresi reguler mulai mencocokkan dari awal string. Untuk menentukan pencocokan acak, tambahkan .* sebelum dan sesudah ekspresi.
https://test.aliyun.com/v2/workitem#requestId=0c978f115b6f7&cityCode=34&env=onlineEkstrak bidang cityCode dari URL sebelumnya, seperti yang ditunjukkan pada gambar berikut.

Kelas sampel
Kelas berikut berisi objek Body dari aplikasi:
class DemoResponse {
int code = 200;
boolean success = true;
String message = "text content";
String extraInfo = "{\"id\": 15, \"cityInfo\": \"from:hangzhou,to:beijing\"}";
public String getExtraInfo() {
return this.extraInfo;
}
}Ekstrak nama kota yang ditunjukkan oleh "from" di sub-bidang cityInfo dari bidang extraInfo, seperti yang ditunjukkan pada gambar berikut.

ARMS agent melakukan langkah-langkah berikut untuk mengekstrak parameter:
Dapatkan objek DemoResponse dari respons.
Eksekusi pernyataan
#this.getExtraInfo()untuk mendapatkan bidang extraInfo.Eksekusi pernyataan
$.cityInfountuk mengurai nilai bidang extraInfo sebagai string JSON dan mendapatkan sub-bidang cityInfo.Eksekusi pernyataan
^from:(?<res>[a-z]+).*untuk mengurai nilai sub-bidang cityInfo sebagai string dan mencocokkannya dengan grup penangkapan bernama "res", yaitu substringhangzhou.Tulis
hangzhousebagai hasil ekstraksi ke atribut span.
Langkah-langkah ekstraksi parameter
Cara kerjanya
Anda dapat menentukan langkah-langkah ekstraksi parameter untuk lebih mengambil dan mencari informasi yang diperlukan dari sumber. Langkah-langkah ini dapat dianggap sebagai aturan pemetaan aliran di mana output langkah sebelumnya digunakan sebagai input langkah berikutnya.
Setiap metode ekstraksi parameter memberlakukan persyaratan unik pada tipe data input. Jika tipe data input tidak memenuhi persyaratan, proses berikutnya dihentikan dan hasil saat ini dicatat sebagai nilai akhir.
Metode ekstraksi parameter | Tipe data input | Tipe data output |
OGNL | Objek Java | String atau string JSON setelah serialisasi |
JsonPath | String JSON | String |
Regex | String | String |
Overhead kinerja
Eksekusi langkah-langkah ekstraksi parameter menimbulkan overhead kinerja tertinggi dalam proses ekstraksi parameter bisnis karena melibatkan serialisasi atau deserialisasi, refleksi Java, dan ekspresi reguler dalam langkah-langkah ini. Kami merekomendasikan agar Anda tidak menentukan banyak langkah untuk antarmuka yang memiliki persyaratan tinggi pada waktu respons (RT) dan kinerja. Jika Anda ingin mengekstrak parameter untuk antarmuka yang memiliki persyaratan tinggi pada RT dan kinerja, Anda dapat memodifikasi kode bisnis Anda.
Sebagai contoh, jika persyaratan kepatuhan keamanan terpenuhi, Anda dapat menulis parameter ke header dalam kode bisnis Anda.
Untuk informasi tentang cara menulis parameter secara manual ke atribut span menggunakan OpenTelemetry SDK untuk Java, lihat Gunakan OpenTelemetry SDK untuk Java untuk menambahkan kode instrumen kustom untuk aplikasi.
Pernyataan valid untuk ekstraksi parameter
Untuk memastikan keamanan logika ekstraksi, ARMS memberlakukan batasan yang lebih ketat pada pernyataan untuk mengekstrak parameter daripada OGNL open source, JsonPath, dan ekspresi reguler.
Metode ekstraksi parameter | Referensi sintaksis | Batasan sintaksis tambahan | Contoh valid |
OGNL | Anda hanya dapat mengekstrak parameter dari bidang dan memanggil metode yang menggunakan notasi titik. Jika Anda mengekstrak parameter dari metode panggilan, metode panggilan harus dimulai dengan get. Kedalaman akses untuk penguraian adalah 10. | #this.extraInfo.getPid() | |
JsonPath | Anda hanya dapat mengekstrak bidang yang menggunakan notasi titik. Kedalaman akses untuk penguraian adalah 10. | $.cityInfo | |
Regex | Anda harus menyertakan satu dan hanya satu grup penangkapan bernama res untuk menentukan hasil ekstraksi. | ^from:(?<res>[a-z]+).* |
Aturan pencocokan kode kesalahan kustom
Jika parameter yang diekstrak memicu aturan pencocokan kode kesalahan kustom, span yang berisi parameter tersebut dianggap gagal. Jika terjadi kesalahan selama akses layanan, kesalahan dikumpulkan dengan metrik arms_$callType_requests_error_count. Dalam hal ini, Anda dapat mengonfigurasi peringatan untuk aturan pencocokan.
Kebijakan sampling tidak memengaruhi pengumpulan data kode kesalahan kustom dan span gagal yang tidak disampling.
Untuk informasi tentang tipe akses layanan dan dimensi yang tersedia, lihat Deskripsi Metrik Pemantauan Aplikasi.
Konfigurasikan aturan pencocokan kode kesalahan kustom
Di bagian Pengaturan Kesalahan Kustom, nyalakan sakelar Kode Kesalahan Kustom untuk mengaktifkan pengumpulan data kode kesalahan kustom.
Klik Tambah Aturan Pencocokan untuk menambahkan aturan.
Pilih aturan ekstraksi parameter bisnis dan konfigurasikan kondisi filter.

Klik Simpan. Aturan berlaku dalam waktu 1 hingga 2 menit tanpa perlu me-restart aplikasi.
Verifikasi aturan
Setelah Anda mengonfigurasi aturan, aturan berlaku tanpa perlu me-restart aplikasi. Anda dapat pergi ke halaman Trace Explorer untuk memeriksa apakah ada span gagal yang memenuhi kondisi yang ditentukan oleh aturan pencocokan.
Konfirmasikan nama dan kondisi atribut yang digunakan untuk mencocokkan aturan.

Di halaman Trace Explorer, pilih semua span gagal sebagai kondisi query untuk melihat semua span gagal.

Klik jejak dan periksa apakah atribut jejak sesuai dengan aturan yang dikonfigurasi.
Dalam contoh berikut, nilai atribut biz.resp.body adalah 670, yang lebih besar dari 499, kondisi yang ditentukan oleh aturan pencocokan kesalahan.

Pergi ke halaman Ikhtisar untuk melihat apakah jumlah kesalahan telah ditambahkan dengan benar ke dasbor kesalahan.

Overhead kinerja
Fitur ekstraksi parameter bisnis membawa overhead tambahan ke aplikasi Anda. Sebagian besar overhead tambahan berasal dari serialisasi atau deserialisasi dan refleksi Java selama ekstraksi parameter. Dalam bagian ini, demo dibuat untuk memverifikasi overhead fitur ekstraksi parameter bisnis. Persiapan:
Spesifikasi Pod: 1 core dan 2 GB memori.
Lima antarmuka HTTP ada di server. Penguji stres memanggil setiap antarmuka pada 2.000 permintaan per detik (QPS) untuk menghasilkan spans. Setiap antarmuka sesuai dengan sumber dari mana parameter diekstraksi.
Konfigurasi tes: 240 parameter kustom diekstrak dan 20 ekspresi reguler, 40 ekspresi JsonPath, dan 40 ekspresi OGNL diproses dalam setiap 100 panggilan.
Tabel berikut menjelaskan overhead yang terjadi sebelum dan sesudah aturan ekstraksi parameter bisnis diaktifkan.
Item | Fitur dinonaktifkan (garis dasar) | Fitur diaktifkan | Peningkatan overhead |
CPU | 0,230 c | 0,257 c | +0,027 c |
Memori (20 menit setelah startup) | 575 MB | 693 MB | +118 MB |
RT | 101 ms | 101 ms | +0 ms |
FAQ
Apa yang harus saya lakukan jika ekstraksi parameter gagal?
Jika Anda mengekstrak parameter dari objek Body, periksa apakah Spring MVC digunakan dalam aplikasi Anda, apakah @Controller telah ditambahkan ke kelas metode, dan apakah anotasi @RequestBody dan @ResponseBody telah ditambahkan ke metode dan parameter.
Jika Anda mengekstrak parameter dari Cookie tanggapan, periksa apakah Anda menggunakan Tomcat v7.0.4-9.x atau Undertow v1.4.0.Final+. Jika tidak, kami sarankan Anda menggunakan Cookie permintaan sebagai gantinya.
Ruang lingkup efektif ekstraksi pengecualian apa?
ARMS agent untuk Java hanya memblokir pengecualian kustom yang dilemparkan di luar spans. Jika Anda ingin mengekstrak pengecualian dari metode panggilan utama di dalam spans dan menandai pengecualian sebagai kesalahan, Anda dapat menginstrumen metode panggilan. Untuk informasi lebih lanjut, lihat Tambahkan Metode Kustom untuk Pemantauan.
Bagaimana cara mengonfigurasi aturan ekstraksi parameter bisnis untuk anotasi umum dalam aplikasi Spring MVC?
Tabel berikut menunjukkan pemetaan antara anotasi Spring MVC yang didukung oleh aturan ekstraksi parameter bisnis dan konfigurasi aturan.
Anotasi | Tipe parameter | Sumber parameter |
@RequestParam | Permintaan server HTTP | Parameter |
@RequestHeader | Permintaan server HTTP | Header |
@CookieValue | Permintaan server HTTP | Cookie |
@RequestBody | Permintaan server HTTP | Body |
@ResponseBody | Tanggapan server HTTP | Body |
Bagaimana cara mengekstrak parameter bisnis yang tidak didukung?
Anda dapat menggunakan OpenTelemetry SDK untuk menginstrumen aplikasi dan menulis parameter bisnis yang ingin Anda ekstrak sebagai atribut ke spans. Untuk informasi lebih lanjut, lihat Gunakan OpenTelemetry SDK untuk Java untuk menambahkan kode instrumen kustom ke jejak.
Apakah ekstraksi dari objek Body yang didekorasi oleh RequestBodyAdvice dan ResponseBodyAdvice didukung?
Ya, itu didukung. ARMS agent mengekstrak parameter dari objek Body setelah BodyAdvice yang ditentukan pengguna dan sebelum BodyAdvice bawaan Spring.