Saat mendiagnosis masalah produksi, data jejak standar sering kali tidak mencakup konteks bisnis yang diperlukan untuk mengidentifikasi akar penyebab—Anda tidak dapat memfilter jejak berdasarkan ID pesanan, ID pengguna, atau kode transaksi. Application Real-Time Monitoring Service (ARMS) mengatasi keterbatasan ini dengan mengekstrak parameter tertentu dari permintaan HTTP, tanggapan, dan pengecualian pada tingkat rentang tanpa mengubah kode aplikasi. Parameter yang diekstrak menjadi atribut rentang yang dapat digunakan untuk memfilter jejak, mendeteksi kesalahan logika bisnis, dan memicu peringatan.
Kasus penggunaan
Setelah mengonfigurasi aturan ekstraksi, agen ARMS menangkap nilai parameter dan mencatatnya sebagai atribut rentang. Atribut ini memungkinkan kemampuan berikut:
Filter jejak berdasarkan konteks bisnis — Temukan semua permintaan untuk ID pesanan, ID pengguna, atau kode transaksi tertentu di halaman Trace Explorer.
Detect business-logic errors — Tandai rentang sebagai gagal ketika nilai parameter yang diekstrak sesuai dengan aturan kode kesalahan kustom.
Set up alerting — Picu peringatan ketika jumlah kesalahan berdasarkan parameter yang diekstrak melebihi ambang batas.
Prasyarat
Ekstraksi parameter bisnis hanya berlaku untuk aplikasi Java.
Sebelum memulai, pastikan bahwa:
Agen ARMS versi 4.1.0 atau lebih baru telah terpasang. Untuk informasi selengkapnya, lihat Ikhtisar Pemantauan Aplikasi. Fitur ini tidak berlaku pada agen sebelum versi 4.1.0, meskipun aturan telah dikonfigurasi.
Versi 4.2.0 atau lebih baru: Beberapa aturan pencocokan API dan aturan ekstraksi parameter dapat ditambahkan ke satu aturan ekstraksi parameter bisnis.
Versi 4.1.0 hingga 4.2.0: Hanya aturan pencocokan pertama yang berlaku per aturan.
Contoh berikut mengonfigurasi dua aturan:
Aturan pertama berlaku untuk antarmuka yang diawali dengan
/api/book, menggunakan Body sebagai sumber parameter, dan menggunakan ekspresi OGNL#this.data.code.Aturan kedua berlaku untuk antarmuka yang diawali dengan
/api/stationery, menggunakan Body sebagai sumber parameter, dan menggunakan ekspresi OGNL#this.responseCode.
Jenis dan sumber parameter yang didukung
Agen ARMS secara dinamis mendeteksi perubahan aturan dan mengekstrak parameter berdasarkan semua aturan yang diaktifkan. Tabel berikut mencantumkan jenis parameter, sumber, dan persyaratan framework yang didukung.
Jenis parameter | Sumber parameter | Framework yang didukung | Keterangan |
Permintaan server HTTP | Header, Cookie, Parameter | Tomcat 7.0.4+, Jetty 8.0.0+, Undertow 1.4.0.Final+ | Agen ARMS memanggil metode |
Permintaan server HTTP | Body | Spring MVC 4.2.0+ | Kelas harus dianotasi dengan @Controller dan metode harus dianotasi dengan @RequestBody. |
Tanggapan server HTTP | Header, Cookie | Tomcat 7.0.4+, Jetty 8.0.0+, Undertow 1.4.0.Final+ | - |
Tanggapan server HTTP | Body | Spring MVC 4.2.0+ | Kelas harus dianotasi dengan @Controller dan metode harus dianotasi dengan @ResponseBody. |
Permintaan klien HTTP | Header, Parameter | Apache HttpClient 2.0+, OkHTTP 2.2+ | - |
Tanggapan klien HTTP | Header | Apache HttpClient 2.0+, OkHTTP 2.2+ | - |
Informasi pengecualian | Message | - | Kelas harus mewarisi java.lang.Exception. |
Buka halaman aturan ekstraksi
Masuk ke Konsol ARMS. Di panel navigasi kiri, pilih Application Monitoring > Application List.
Pilih wilayah di bilah navigasi atas dan klik aplikasi tersebut.
CatatanIkon di kolom Language menunjukkan bahasa pemrograman aplikasi: -
: Java -
: Go -
: Python - - (Tanda hubung): aplikasi yang dipantau di Managed Service for OpenTelemetryDi bilah navigasi atas, pilih Configuration > Business Parameter Extraction Rules.
Di bagian Business Parameter Extraction Rules, buat, lihat, atau ubah aturan ekstraksi untuk aplikasi tersebut.
Daftar aturan berisi kolom-kolom berikut: Rule Name, Attribute name, Parameter extraction type, kolom aturan pencocokan, kolom parameter yang diekstrak, Enabling Status, dan kolom Aksi (Edit dan Delete). Di atas daftar tersedia tombol New Rule, kotak pencarian nama aturan, dan filter jenis ekstraksi parameter. Di bawah daftar tersedia tombol Batch Delete dan Bulk Copy to Other Applications.
Di bagian Customizing Error Settings, konfigurasikan aturan pencocokan kode kesalahan kustom untuk memfilter nilai parameter yang diekstrak.
Setelah Anda mengaktifkan sakelar Custom error code, tambahkan aturan pencocokan: sebuah rentang ditandai sebagai kesalahan ketika nilai atribut biz.resp.body lebih besar dari 200, dan ketika nilai atribut biz.exception lebih besar dari 0.
Buat aturan ekstraksi
Aturan dikirimkan ke agen secara real time setelah dibuat dan diaktifkan. Aturan pertama memerlukan restart aplikasi agar berlaku. Aturan berikutnya berlaku dalam 1 hingga 2 menit tanpa restart.
Parameter yang diekstrak dicatat sebagai atribut rentang. Kueri atribut tersebut di halaman Trace Explorer.
Nama atribut secara default diawali dengan
biz.dan harus unik.Pelaporan data rentang bergantung pada kebijakan sampling. Untuk memastikan data penting dilaporkan, sesuaikan kebijakan sampling. Untuk informasi selengkapnya, lihat Pilih mode sampling jejak untuk agen ARMS sebelum V3.2.8.
Jika parameter yang diekstrak tidak muncul dalam jejak, verifikasi bahwa konfigurasi aturan sudah benar.
Di bagian Business Parameter Extraction Rules, klik New Rule. Konfigurasikan parameter berikut dan klik OK.
Parameter | Deskripsi |
Rule Name | Nama aturan. |
Attribute name | Kunci atribut rentang untuk nilai yang diekstrak. Format: awalan |
Parameter extraction type | Jenis parameter yang akan diekstrak: permintaan server HTTP, tanggapan server HTTP, permintaan klien HTTP, tanggapan klien HTTP, atau informasi pengecualian. |
Effective Interface | Antarmuka HTTP tempat aturan berlaku. Agen ARMS hanya mengekstrak parameter dari antarmuka yang cocok. Tersedia hanya jika Parameter extraction type diatur ke permintaan server HTTP atau tanggapan server HTTP. |
Exception Class Name | Nama kelas pengecualian yang akan dicocokkan. Agen ARMS hanya mengekstrak parameter dari pengecualian yang cocok. Tersedia hanya jika Parameter extraction type diatur ke informasi pengecualian. |
Text encoding type | Format encoding dari parameter yang akan diekstrak. |
Enabling Status | Apakah aturan diaktifkan atau tidak. |
Aturan ekstraksi parameter
Tentukan sumber yang berisi parameter yang akan diekstrak dan metode ekstraksinya. Beberapa sumber parameter dan langkah pemrosesan didukung. Jika parameter dapat diekstrak dari beberapa sumber, ekstraksi dilakukan sesuai urutan langkah yang ditentukan. Untuk informasi selengkapnya, lihat Contoh aturan ekstraksi.
Parameter Source: Sumber tempat parameter diekstrak. Jika Anda memilih Header, Cookie, atau Parameter, masukkan kunci untuk ekstraksi awal. Jika Anda memilih Body atau Message, parameter diekstrak dari seluruh body atau message.
Add parameter processing steps: Tentukan langkah-langkah untuk mengurai nilai parameter dari satu atau beberapa sumber. Output setiap langkah menjadi input langkah berikutnya. Jika tidak ada langkah yang ditentukan, teks JSON mentah dari sumber digunakan. Untuk informasi selengkapnya, lihat Langkah ekstraksi parameter. Metode ekstraksi berikut didukung:
Metode
Deskripsi
Contoh
OGNL
Input harus berupa objek Java. Mendukung ekspresi OGNL dengan notasi titik.
#this.data.getCode()JsonPath
Input harus berupa string JSON. Mendukung ekspresi JsonPath dengan notasi titik.
$.data.codeRegex
Input harus berupa string. Menggunakan grup penangkapan bernama. Substring yang diekstrak harus sesuai dengan grup penangkapan bernama
res..*from:(?<res>[a-z]+).*
Verifikasi aturan ekstraksi
Setelah aturan berlaku, periksa halaman Trace Explorer untuk jejak terkait. Jika atribut kustom muncul pada rentang antarmuka yang sesuai, aturan tersebut berfungsi.
Temukan nama atribut yang sesuai dengan aturan tersebut.
Di daftar Business Parameter Extraction Rules, temukan Attribute name dari aturan yang Anda buat, misalnya aturan dengan atribut
biz.resp.body.Di halaman Trace Explorer, tambahkan
attributes.$attributesNamesebagai kondisi filter untuk mengkueri rentang.Di area kueri lanjutan, tambahkan kondisi filter
attributes.biz.resp.body=211.Klik jejak untuk melihat atribut kustom rentang tersebut.
Kelola aturan ekstraksi
Untuk mengaktifkan atau menonaktifkan aturan, alihkan sakelar Enabling Status.
Untuk mengubah atau menghapus aturan, klik Edit atau Delete di kolom Aksi.
Untuk menghapus beberapa aturan, pilih aturan tersebut dan klik Batch Delete di bawah daftar.
Untuk menyalin aturan ke aplikasi lain, pilih aturan tersebut dan klik Bulk Copy to Other Applications. Di kotak dialog, tentukan apakah aturan akan disalin ke semua aplikasi atau aplikasi tertentu.
Tunggu 1 hingga 2 menit agar perubahan berlaku.
Hanya aturan ekstraksi yang disalin. Pengaturan kesalahan kustom tidak disertakan.
Nama atribut harus unik. Jika atribut dengan nama yang sama sudah ada di aplikasi target, aturan tidak akan disalin.
Konfigurasi pencocokan kode kesalahan kustom
Jika nilai parameter yang diekstrak sesuai dengan aturan kode kesalahan kustom, rentang tersebut ditandai sebagai gagal. Rentang yang gagal menambah metrik arms_$callType_requests_error_count, yang dapat Anda gunakan untuk peringatan.
Kebijakan sampling tidak memengaruhi pengumpulan data untuk kode kesalahan kustom. Rentang yang gagal tetap dihitung meskipun tidak disampling.
Untuk jenis akses layanan dan dimensi yang tersedia, lihat Metrik pemantauan aplikasi.
Buat aturan kode kesalahan kustom
Di bagian Customizing Error Settings, aktifkan sakelar Custom error code.
Klik Add matching rules.
Pilih aturan ekstraksi dan konfigurasikan kondisi filter.
Setelah Anda mengaktifkan sakelar Custom error code, tambahkan aturan pencocokan: sebuah rentang ditandai sebagai kesalahan ketika nilai atribut
biz.resp.bodylebih besar dari 200, dan ketika nilai atributbiz.exceptionlebih besar dari 0.Klik Save. Aturan berlaku dalam 1 hingga 2 menit tanpa restart aplikasi.
Verifikasi aturan kode kesalahan kustom
Setelah Anda mengonfigurasi aturan, periksa halaman Trace Explorer untuk rentang yang gagal dan sesuai dengan kondisi aturan.
Konfirmasi nama atribut dan kondisi yang digunakan oleh aturan.
Di halaman Trace Explorer, filter rentang yang gagal.
Di halaman Trace Explorer, gunakan area filter cepat di sebelah kiri untuk memfilter rentang dengan status error. Kondisi kueri yang dihasilkan adalah
serviceName="arms-custom-extraction-demoextracted" AND statusCode IN (2, 3) AND spanName="/api/v1/http_server/body". Dalam contoh ini, kueri mengembalikan 3.642 panggilan error, masing-masing dengan durasi 0 ms dan status error.Klik jejak dan periksa apakah nilai atribut sesuai dengan kondisi aturan. Dalam contoh berikut, nilai atribut
biz.resp.bodyadalah 670, yang lebih besar dari 499 (ambang batas yang ditentukan oleh aturan pencocokan error).Di halaman Overview, verifikasi bahwa jumlah error tercermin dengan benar di dasbor error.

Contoh aturan ekstraksi
Contoh berikut merangkai metode OGNL, JsonPath, dan Regex. Output setiap langkah menjadi input langkah berikutnya.
OGNL
Object-Graph Navigation Language (OGNL) membaca dan mengatur properti objek Java. Gunakan untuk mengekstrak bidang dari objek yang dianotasi dengan @ResponseBody atau @RequestBody. Hasilnya dikonversi ke string. Jika nilai yang diekstrak adalah objek Java, objek tersebut diserialisasi ke string JSON untuk ekstraksi lebih lanjut.
@RestController
@RequestMapping("/components/api/v1/mall")
public class MallController {
@RequestMapping("/product")
@ResponseBody
public ResponseBody product(@RequestBody RequestBody req) {
// Business code
}
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.
Ekstrak bidang code dari ResponseBody.
Panggil metode getter untuk mengekstrak hasil dari getQueryJsonStr().
Pastikan metode getQueryJsonStr() ada di kelas tersebut.
JsonPath
Ekspresi JsonPath mengekstrak properti dari string JSON.
{
"code": 200,
"message": "Query success.",
"success": true,
"data": {
"name": "John",
"age": 21
}
}Ekstrak data.age dari data JSON.
Regex
Ekspresi reguler mencocokkan kombinasi karakter dalam string. Gunakan grup penangkapan bernama res untuk menentukan hasil ekstraksi.
Secara default, regex mulai mencocokkan dari awal string. Untuk mencocokkan di posisi mana pun, tambahkan .* sebelum dan sesudah ekspresi.
https://test.aliyun.com/v2/workitem#requestId=0c978f115b6f7&cityCode=34&env=onlineEkstrak nilai cityCode dari URL.
Ekstraksi multi-langkah
Contoh ini merangkai OGNL, JsonPath, dan Regex untuk mengekstrak nilai bersarang dari badan tanggapan.
Kelas berikut berisi objek badan tanggapan:
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;
}
}Tujuan: Ekstrak nama kota yang ditunjukkan oleh "from" di sub-bidang cityInfo dari extraInfo.
Agen ARMS memproses ekstraksi dalam langkah-langkah berikut:
Ambil objek
DemoResponsedari badan tanggapan.Jalankan
#this.getExtraInfo()(OGNL) untuk mendapatkan bidangextraInfo.Jalankan
$.cityInfo(JsonPath) untuk menguraiextraInfosebagai JSON dan mendapatkan sub-bidangcityInfo.Jalankan
^from:(?<res>[a-z]+).*(Regex) untuk mencocokkan grup penangkapan bernamares, yang mengembalikanhangzhou.Tulis
hangzhousebagai nilai atribut pada rentang.
Langkah ekstraksi parameter
Cara kerja langkah
Langkah ekstraksi mengambil dan mengurai nilai dari data sumber. Langkah-langkah membentuk pipeline: output setiap langkah menjadi input langkah berikutnya.
Setiap metode memerlukan jenis input tertentu. Jika input tidak sesuai, pipeline berhenti dan mencatat hasil saat ini sebagai nilai akhir.
Metode ekstraksi | Jenis data input | Jenis data output |
OGNL | Objek Java | String atau string JSON setelah serialisasi |
JsonPath | String JSON | String |
Regex | String | String |
Batasan sintaksis
ARMS memberlakukan batasan sintaksis yang lebih ketat daripada OGNL, JsonPath, dan regex open-source untuk menjaga keamanan.
Metode | Referensi sintaksis | Batasan | Contoh valid |
OGNL | Hanya notasi titik. Metode yang dipanggil harus diawali dengan |
| |
JsonPath | Hanya notasi titik. Kedalaman akses maksimum: 10. |
| |
Regex | Harus menyertakan tepat satu grup penangkapan bernama |
|
Pertimbangan performa
Langkah ekstraksi melibatkan serialisasi/deserialisasi, refleksi Java, dan pemrosesan regex—operasi paling intensif sumber daya dalam pipeline ekstraksi. Untuk antarmuka yang sensitif terhadap latensi, pertimbangkan alternatif berikut:
Tulis parameter ke header HTTP dalam kode bisnis Anda (jika kepatuhan keamanan memungkinkan).
Gunakan OpenTelemetry SDK untuk Java untuk menulis atribut langsung ke rentang. Untuk informasi selengkapnya, lihat Gunakan OpenTelemetry SDK untuk Java untuk menambahkan kode instrumentasi kustom pada aplikasi.
Overhead performa
Ekstraksi parameter bisnis menambah overhead CPU dan memori akibat serialisasi/deserialisasi dan refleksi Java. Benchmark berikut mengkuantifikasi dampaknya.
Lingkungan pengujian:
Spesifikasi Pod: 1 core, memori 2 GB
5 antarmuka HTTP dengan QPS masing-masing 2.000
240 parameter kustom diekstrak per 100 panggilan: 20 ekspresi regex, 40 JsonPath, dan 40 OGNL
Item | Fitur dinonaktifkan (garis dasar) | Fitur diaktifkan | Kenaikan |
CPU | 0,230 c | 0,257 c | +0,027 c |
Memori (20 menit setelah startup) | 575 MB | 693 MB | +118 MB |
Waktu respons | 101 ms | 101 ms | +0 ms |
Ekstraksi melibatkan refleksi Java dan serialisasi/deserialisasi, yang meningkatkan penggunaan CPU dan memori. Untuk antarmuka dengan persyaratan latensi ketat, tulis parameter ke header atau gunakan OpenTelemetry SDK sebagai gantinya.
FAQ
Apa yang harus saya lakukan jika ekstraksi parameter gagal?
Penyebabnya bergantung pada sumber parameter:
Body: Pastikan Spring MVC digunakan, kelas memiliki anotasi @Controller, dan metode memiliki anotasi @RequestBody atau @ResponseBody.
Response Cookie: Pastikan Anda menjalankan Tomcat v7.0.4-9.x atau Undertow v1.4.0.Final+. Jika tidak, gunakan request Cookie sebagai gantinya.
Apa cakupan ekstraksi pengecualian?
Agen ARMS untuk Java hanya menangkap pengecualian kustom yang dilempar di luar rentang. Untuk mengekstrak pengecualian dari metode panggilan utama di dalam rentang dan menandainya sebagai error, instrumentasikan metode panggilan tersebut. Untuk informasi selengkapnya, lihat Tambahkan metode kustom untuk pemantauan.
Bagaimana cara memetakan anotasi Spring MVC ke aturan ekstraksi?
Anotasi | Jenis 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 jenis parameter yang tidak didukung?
Gunakan SDK OpenTelemetry untuk menginstrumentasi aplikasi Anda dan menulis parameter tersebut sebagai atribut rentang secara langsung. Untuk informasi selengkapnya, lihat Gunakan OpenTelemetry SDK untuk Java untuk menambahkan kode instrumentasi kustom ke jejak.
Apakah ekstraksi mendukung objek Body dengan RequestBodyAdvice dan ResponseBodyAdvice?
Ya. Agen ARMS mengekstrak parameter setelah BodyAdvice yang ditentukan pengguna dijalankan, tetapi sebelum BodyAdvice bawaan Spring.