All Products
Search
Document Center

Application Real-Time Monitoring Service:Ekstrak parameter bisnis untuk aplikasi Java Anda

Last Updated:Aug 21, 2026

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

Catatan

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 javax.servlet.ServletRequest.getParameters(). Untuk ContentType: application/x-www-form-urlencoded, ini memicu pembacaan InputStream lebih awal pada badan permintaan. Karena InputStream dalam ServletRequest hanya bisa dibaca sekali, akses berikutnya oleh kode bisnis akan gagal. Jika kode Anda memerlukan akses ke InputStream, kecualikan antarmuka tersebut untuk mencegah kegagalan.

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

  1. Masuk ke Konsol ARMS. Di panel navigasi kiri, pilih Application Monitoring > Application List.

  2. Pilih wilayah di bilah navigasi atas dan klik aplikasi tersebut.

    Catatan

    Ikon di kolom Language menunjukkan bahasa pemrograman aplikasi: - Java图标: Java - image: Go - image: Python - - (Tanda hubung): aplikasi yang dipantau di Managed Service for OpenTelemetry

  3. Di bilah navigasi atas, pilih Configuration > Business Parameter Extraction Rules.

  4. 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.

  1. 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

Penting
  • 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 biz. diikuti kata-kata yang dipisahkan titik. Setiap kata dapat berisi huruf, angka, tanda hubung (-), dan garis bawah (_). Maksimal: 10 kata.

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.code

    Regex

    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.

  1. 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.

  2. Di halaman Trace Explorer, tambahkan attributes.$attributesName sebagai kondisi filter untuk mengkueri rentang.

    Di area kueri lanjutan, tambahkan kondisi filter attributes.biz.resp.body = 211.

  3. 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.

Catatan
  • 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.

Catatan
  • 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

  1. Di bagian Customizing Error Settings, aktifkan sakelar Custom error code.

  2. Klik Add matching rules.

  3. 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.body lebih besar dari 200, dan ketika nilai atribut biz.exception lebih besar dari 0.

  4. 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.

  1. Konfirmasi nama atribut dan kondisi yang digunakan oleh aturan.

  2. 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.

  3. Klik jejak dan periksa apakah nilai atribut sesuai dengan kondisi aturan. Dalam contoh berikut, nilai atribut biz.resp.body adalah 670, yang lebih besar dari 499 (ambang batas yang ditentukan oleh aturan pencocokan error).

  4. Di halaman Overview, verifikasi bahwa jumlah error tercermin dengan benar di dasbor error.

    image

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().

Penting

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.

Catatan

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=online

Ekstrak 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:

  1. Ambil objek DemoResponse dari badan tanggapan.

  2. Jalankan #this.getExtraInfo() (OGNL) untuk mendapatkan bidang extraInfo.

  3. Jalankan $.cityInfo (JsonPath) untuk mengurai extraInfo sebagai JSON dan mendapatkan sub-bidang cityInfo.

  4. Jalankan ^from:(?<res>[a-z]+).* (Regex) untuk mencocokkan grup penangkapan bernama res, yang mengembalikan hangzhou.

  5. Tulis hangzhou sebagai 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.

image

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

Apache Commons OGNL

Hanya notasi titik. Metode yang dipanggil harus diawali dengan get. Kedalaman akses maksimum: 10.

#this.extraInfo.getPid()

JsonPath

JsonPath

Hanya notasi titik. Kedalaman akses maksimum: 10.

$.cityInfo

Regex

Java Regex

Harus menyertakan tepat satu grup penangkapan bernama res.

^from:(?<res>[a-z]+).*

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:

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

image

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

Penting

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.