Real User Monitoring (RUM) SDK untuk web dan HTML5 menyediakan opsi konfigurasi untuk pengumpulan data, manajemen sesi, penyaringan event, dan deteksi layar putih. Referensi ini mencakup konfigurasi SDK umum, API waktu proses, dan contoh penggunaan.
Parameter inisialisasi
Teruskan parameter berikut ke ArmsRum.init() untuk mengonfigurasi SDK saat startup.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| pid | String | Yes | - | Application ID |
| endpoint | String | Yes | - | Titik akhir pelaporan data |
| env | String | No | prod | Lingkungan aplikasi. Nilai yang valid: prod, gray, pre, daily, local |
| version | String | No | - | Versi aplikasi |
| user | Object | No | - | Pengaturan pengguna. Lihat Parameter pengguna |
| spaMode | String | No | false | Mode pelacakan rute aplikasi single-page (SPA). Nilai yang valid: hash, history, auto, false |
| beforeReport | Function | No | - | Callback yang dipanggil sebelum setiap laporan dikirim untuk memodifikasi atau memblokir data yang dilaporkan |
| reportConfig | Object | No | - | Pengaturan pelaporan data. Lihat Parameter reportConfig |
| sessionConfig | Object | No | - | Pengaturan sampling dan penyimpanan sesi. Lihat Parameter sessionConfig |
| collectors | Object | No | - | Sakelar pengumpul data. Lihat Parameter collectors |
| parseViewName | Function | No | - | Parser kustom untuk nama tampilan (view.name). Menerima URL halaman sebagai input |
| parseResourceName | Function | No | - | Parser kustom untuk nama resource (resource.name). Menerima URL resource sebagai input |
| evaluateApi | Function | No | - | Parser kustom untuk event API. Lihat Parameter evaluateApi |
| filters | Object | No | - | Aturan filter event. Lihat Parameter filters |
| whiteScreen | Object | No | - | Pengaturan deteksi layar putih. Lihat Parameter whiteScreen |
| properties | Object | No | - | Properti kustom global yang dilampirkan ke semua event. Lihat Parameter properties |
| remoteConfig | Object | No | - | Pengiriman konfigurasi dinamis. Lihat Konfigurasi dinamis |
Inisialisasi CDN
Saat memuat SDK melalui Alibaba Cloud Content Delivery Network (CDN), akses SDK dari namespace global RumSDK.default:
const ArmsRum = window.RumSDK.default;
// Inisialisasi SDK setelah SDK dimuat.
// Lewati langkah ini jika Anda telah menetapkan window.__rum sebelum tag skrip SDK.
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
});
// Perbarui konfigurasi saat runtime
ArmsRum.setConfig('env', 'pre');Inisialisasi npm
import ArmsRum from '@arms/rum-browser';
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
});Parameter pengguna
Kaitkan sesi RUM dengan akun bisnis Anda melalui objek user.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | String | No | - | ID pengguna. Di-generate otomatis oleh SDK dan tidak dapat diubah |
| name | String | No | - | Username |
| tags | String | No | - | Tag pengguna |
Jangan menimpa user.id. Nilai ini di-generate otomatis oleh SDK, dan menimpanya akan memengaruhi perhitungan pengunjung unik (UV). Untuk menghubungkan sesi ke sistem akun Anda, gunakan user.name atau user.tags sebagai gantinya.
Contoh
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
user: {
name: 'your user.name',
tags: 'your user.tags',
},
});Parameter reportConfig
Kendalikan interval pelaporan dan ukuran batch.
| Parameter | Type | Required | Default | Valid range | Description |
|---|---|---|---|---|---|
| flushTime | Number | No | 3000 | 0 -- 10000 | Interval pelaporan dalam milidetik. Atur ke 0 untuk pelaporan langsung |
| maxEventCount | Number | No | 20 | 1 -- 100 | Jumlah maksimum event per batch |
Contoh
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
reportConfig: {
flushTime: 0, // Laporkan langsung
maxEventCount: 50, // Maksimal 50 event per batch
},
});Parameter sessionConfig
Konfigurasikan sampling sesi, batas durasi, dan penyimpanan.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| sampleRate | Number | No | 1 | Tingkat sampling dari 0 hingga 1. Misalnya, 0.5 melakukan sampling terhadap 50% sesi |
| maxDuration | Number | No | 86400000 | Durasi sesi maksimum dalam milidetik (default: 24 jam) |
| overtime | Number | No | 3600000 | Timeout ketidakaktifan sesi dalam milidetik (default: 1 jam) |
| storage | String | No | localStorage | Tempat menyimpan data sesi. Nilai yang valid: cookie, localStorage |
Detail penyimpanan
Parameter storage menentukan tempat SDK menyimpan data berikut:
_arms_uid— ID pengguna unik (user.id)_arms_session— metadata sesi dalam format${sessionId}-${sampled}-${startTime}-${lastTime}:sessionId— identifier sesi uniksampled— apakah sesi ini dipilih melalui samplingstartTime— timestamp mulai sesilastTime— timestamp aktivitas terakhir
Contoh
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
sessionConfig: {
sampleRate: 0.5, // Sampling 50% sesi
maxDuration: 86400000, // Maksimal 24 jam
overtime: 3600000, // Timeout ketidakaktifan 1 jam
storage: 'cookie', // Gunakan cookie alih-alih localStorage
},
});Parameter collectors
Aktifkan/nonaktifkan pengumpul data individual. Semua pengumpul diaktifkan secara default.
| Parameter | Type | Required | Default | Description | |
|---|---|---|---|---|---|
| perf | Boolean \ | Object | No | true | Data performa halaman |
| webvitals | Boolean \ | Object | No | true | Metrik Web Vitals |
| api | Boolean \ | Object | No | true | Permintaan API (XMLHttpRequest, fetch) |
| staticResource | Boolean \ | Object | No | true | Permintaan resource statis |
| consoleError | Boolean \ | Object | No | true | Error konsol |
| jsError | Boolean \ | Object | No | true | Error JavaScript |
| action | Boolean \ | Object | No | true | Perilaku pengguna |
Contoh
Nonaktifkan pelacakan interaksi pengguna:
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
collectors: {
action: false,
},
});Parameter evaluateApi
Fungsi evaluateApi menyesuaikan cara event XMLHttpRequest dan fetch diurai. Fungsi ini menerima tiga argumen dan mengembalikan Promise<IApiBaseAttr>.
Argumen input
| Parameter | Type | Description |
|---|---|---|
| options | Object | Parameter permintaan: url, headers, dan data. Bidang eksak bergantung pada metode permintaan |
| response | Object | Body respons |
| error | Error | Objek error. Hanya ada saat permintaan gagal |
Tipe kembalian (IApiBaseAttr)
Bidang yang dikembalikan menggantikan nilai default SDK. Bidang yang dihilangkan tetap menggunakan nilai default-nya.
| Field | Type | Required | Description | |
|---|---|---|---|---|
| name | String | No | Nama API, biasanya URL yang dikonvergen (maksimal 1.000 karakter). Contohnya, /list/$id untuk /list/123. Mengambil prioritas dibandingkan parseResourceName | |
| message | String | No | Deskripsi singkat panggilan API (maksimal 1.000 karakter) | |
| success | Number | No | Hasil permintaan: 1 = sukses, 0 = gagal, -1 = tidak diketahui | |
| duration | Number | No | Total durasi API | |
| status_code | Number \ | String | No | Kode status |
| snapshots | String | No | Snapshot diagnostik (maksimal 5.000 karakter). Menyimpan reqHeaders, params, dan resHeaders. Tidak diindeks dan tidak dapat digunakan untuk kueri atau agregasi |
Contoh
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
evaluateApi: async (options, response, error) => {
let respText = '';
if (response && response.text) {
respText = await response.text();
}
return {
name: 'my-custom-api',
success: error ? 0 : 1,
snapshots: JSON.stringify({
params: 'page=1&size=10',
response: respText.substring(0, 2000),
reqHeaders: '',
resHeaders: '',
}),
properties: {
prop_msg: 'custom msg',
prop_num: 1,
},
};
},
});Parameter filters
Kecualikan event resource atau exception tertentu dari pelaporan.
| Parameter | Type | Required | Description | |
|---|---|---|---|---|
| resource | MatchOption \ | MatchOption[] | No | Kecualikan event resource statis dan API (XMLHttpRequest, fetch) yang sesuai |
| exception | MatchOption \ | MatchOption[] | No | Kecualikan event exception yang sesuai |
Tipe MatchOption
type MatchOption = string | RegExp | ((value: string) => boolean);String — mencocokkan URL atau pesan apa pun yang diawali dengan nilai yang ditentukan. Misalnya,
'https://api.aliyun.com'cocok dengan'https://api.aliyun.com/v1/resource'.RegExp — mencocokkan URL atau pesan terhadap ekspresi reguler.
Function — menerima URL atau pesan sebagai input. Kembalikan
trueuntuk mengecualikan event tersebut.
Saat Anda memberikan array nilai MatchOption, kondisi dievaluasi berurutan. Suatu event dikecualikan jika salah satu kondisi cocok.
Contoh
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
filters: {
exception: [
'Test error', // Pesan yang diawali dengan 'Test error'
/^Script error\.?$/, // Pesan yang cocok dengan regex ini
(msg) => msg.includes('example-error'), // Fungsi pencocokan kustom
],
resource: [
'https://example.com/', // URL yang diawali dengan 'https://example.com/'
/localhost/i, // URL yang mengandung 'localhost'
(url) => url.includes('example-resource'),
],
},
});Parameter whiteScreen
Deteksi kondisi layar kosong atau putih di aplikasi Anda. Didukung di Chrome 40 dan IE 9+.
| Parameter | Type | Description |
|---|---|---|
| detectionRules | Array<DetectionRule> | Satu atau beberapa aturan deteksi. Aturan dijalankan sesuai urutan yang dikonfigurasi |
DetectionRule
| Parameter | Type | Required | Default | Description | |
|---|---|---|---|---|---|
| target | String | Yes | - | CSS selector untuk elemen yang akan dipantau | |
| test_when | Array | Yes | - | Event yang memicu deteksi. Nilai yang valid: LOAD, ERROR, ROUTE_CHANGE, LEAVE | |
| delay | Number | No | 0 | Jeda dalam milidetik sebelum deteksi dimulai setelah event pemicu (kecuali ERROR dan LEAVE) | |
| tester | String \ | Function | Yes | - | Metode deteksi. Nilai yang valid: HAS_CONTENT, SAMPLE, SCREENSHOT, atau fungsi kustom |
| ignoreUrlList | Array<String> | No | [] | URL halaman yang dilewati | |
| configOptions | ConfigOptions | No | - | Opsi spesifik tester. Lihat ConfigOptions |
Event pemicu
| Event | Description |
|---|---|
LOAD | Pemuatan halaman selesai |
ERROR | Terjadi error JavaScript global |
ROUTE_CHANGE | Rute (history atau hash) berubah |
LEAVE | Halaman akan ditutup |
Metode deteksi
| Method | How it works |
|---|---|
HAS_CONTENT | Memeriksa apakah node ada dan berisi textContent |
SAMPLE | Menetapkan titik sampling di seluruh area target dan memeriksa apakah elemen DOM paling atas di setiap titik termasuk dalam himpunan elemen yang diizinkan |
SCREENSHOT | Mengambil tangkapan layar canvas dan membandingkan blok piksel untuk menghitung laju layar putih |
| Fungsi kustom | Menerima elemen target sebagai input. Kembalikan CustomTesterResult atau Promise<CustomTesterResult> |
Tipe CustomTesterResult:
type CustomTesterResult = {
hasContent: boolean; // true = konten ada; false = terdeteksi layar putih
message?: string; // Pesan error
snapshot?: Record<string, any>; // Data diagnostik
}ConfigOptions
Opsi khusus untuk metode deteksi SCREENSHOT dan SAMPLE.
Opsi SCREENSHOT:
| Parameter | Type | Default | Description |
|---|---|---|---|
| colorRange | Array<String> | ['rgb(255, 255, 255)'] | Warna yang dianggap "putih." Format: rgb(r, g, b) |
| fillColor | String | 'rgba(0, 100, 200, 255)' | Warna isian yang diterapkan pada gambar, video, canvas, SVG, dan iframe selama pengambilan tangkapan layar. Tidak boleh tumpang tindih dengan colorRange |
| horizontalOffset | Number | 0 | Offset horizontal (px) dari tepi kiri elemen target. Gunakan ini untuk mengecualikan sidebar kiri |
| verticalOffset | Number | 0 | Offset vertikal (px) dari tepi atas elemen target. Gunakan ini untuk mengecualikan navbar atas |
| pixels | Number | 10 | Ukuran blok piksel (pixels x pixels) untuk perbandingan |
| threshold | Number | 0.8 | Ambang batas laju layar putih. Laju di atas nilai ini memicu event layar putih |
| dpr | Number | 0.3 | Rasio penskalaan untuk gambar tangkapan layar |
| ignoreElements | Array<String> | [] | Selektor CSS untuk elemen yang dikecualikan dari tangkapan layar |
Opsi SAMPLE:
| Parameter | Type | Default | Description | ||
|---|---|---|---|---|---|
| sampleMethod | `1 \ | 2 \ | 3` | 2 | Pola sampling: 1 = silang, 2 = silang berpotongan, 3 = rice |
| checkPoints | Number | 10 | Jumlah titik sampling radial. Total titik: cross/intersecting cross = 4 * checkPoints + 1; rice = 8 * checkPoints + 1 | ||
| threshold | Number | 0.8 | Ambang batas laju layar putih | ||
| whiteBoxElements | Array<String> | [] | Selektor CSS untuk elemen yang dianggap "putih." Saat elemen paling atas di titik sampling cocok dengan salah satu selektor, hitungan layar putih bertambah |
Opsi bersama:
Kedua metode SCREENSHOT dan SAMPLE mendukung opsi debug (Boolean, default: false). Saat diaktifkan, detail deteksi dicetak ke konsol developer tools browser.
Contoh
Deteksi berbasis tangkapan layar:
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
whiteScreen: {
detectionRules: [{
target: '#root',
test_when: ['LOAD', 'ERROR', 'ROUTE_CHANGE', 'LEAVE'],
delay: 5000,
tester: 'SCREENSHOT',
configOptions: {
colorRange: ['rgb(255, 255, 255)', 'rgb(0, 0, 0)'],
threshold: 0.9,
pixels: 10,
horizontalOffset: 210,
verticalOffset: 50,
},
}],
},
});Deteksi berbasis sampling:
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
whiteScreen: {
detectionRules: [{
target: '#root',
test_when: ['LOAD', 'ERROR', 'ROUTE_CHANGE', 'LEAVE'],
delay: 5000,
tester: 'SAMPLE',
configOptions: {
sampleMethod: 2,
checkPoints: 10,
threshold: 0.9,
whiteBoxElements: ['.el-skeleton'],
},
}],
},
});Fungsi deteksi kustom:
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
whiteScreen: {
detectionRules: [{
target: '#root',
test_when: ['LOAD', 'ERROR', 'ROUTE_CHANGE', 'LEAVE'],
delay: 5000,
tester: async (element) => {
return {
hasContent: false,
message: 'Custom error message',
snapshot: {
checkPoints: 100,
rate: 0.99,
checkdata: '......',
},
};
},
}],
},
});Parameter properties
Lampirkan properti kustom global ke semua event yang dilaporkan.
| Parameter | Type | Required | Description | |
|---|---|---|---|---|
| [key: string] | String \ | Number | No | Pasangan kunci-nilai kustom. Kunci harus berupa string yang sesuai dengan spesifikasi JSON, dengan maksimal 50 karakter (dipotong jika lebih panjang). Nilai string: maksimal 2.000 karakter. Nilai non-string dan non-number diabaikan |
Perilaku penggabungan
Properti global (diatur di
init()) dan properti tingkat event (diatur melaluievaluateApi,sendCustom,sendException, atausendResource) digabung saat penyimpanan.Properti tingkat event memiliki prioritas lebih tinggi. Jika kunci yang sama ada di kedua tempat, nilai tingkat event yang digunakan.
Setelah penggabungan, maksimal 20 pasangan kunci-nilai disimpan. Pasangan berlebih diurutkan berdasarkan kunci dan dihapus.
Contoh
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
properties: {
prop_string: 'xx',
prop_number: 2,
// Kunci lebih dari 50 karakter dipotong
more_than_50_key_limit_012345678901234567890123456789: 'yy',
// Nilai string lebih dari 2.000 karakter dipotong
more_than_2000_value_limit: new Array(2003).join('1'),
// Tipe tidak valid -- pasangan ini dihapus
prop_null: null,
prop_undefined: undefined,
prop_bool: true,
},
});Konfigurasi dinamis
SDK mendukung pengiriman jarak jauh pengaturan konfigurasi. Selama pemuatan awal, SDK mengambil pengaturan jarak jauh yang menggantikan nilai statis dari init() dan memperbarui fitur seperti instrumentasi dan pelaporan data sesuai.
Langkah 1: Konfigurasikan di konsol ARMS
Buka Application List dan buka aplikasi Anda.
Buka Application Settings > SDK config.
Tetapkan nilai konfigurasi yang diinginkan.
Klik Confirm Update Dynamic Configuration untuk mendorong pengaturan ke server Object Storage Service (OSS) jarak jauh.
Langkah 2: Aktifkan di SDK
Tambahkan bidang remoteConfig ke kode inisialisasi Anda dengan region tempat aplikasi Anda di-hosting.
CDN:
window.__rum = {
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
remoteConfig: {
region: "cn-hangzhou" // Contoh: "ap-southeast-1" untuk Singapura
}
};<script async src="https://xxid-sdk.rum.aliyuncs.com/v2/browser-sdk.js"></script>npm:
import ArmsRum from '@arms/rum-browser';
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
remoteConfig: {
region: "cn-hangzhou" // Contoh: "ap-southeast-1" untuk Singapura
}
});Perilaku caching
Setelah mengambil konfigurasi jarak jauh, SDK menyimpan pengaturan tersebut secara lokal. Pada inisialisasi berikutnya, SDK memprioritaskan konfigurasi yang di-cache.
Konfigurasi dinamis memerlukan versi SDK 0.0.37 atau lebih baru saat mengimpor melalui CDN dengan versi yang ditentukan.Parameter yang diselesaikan otomatis
SDK secara otomatis menyelesaikan properti ini dari alamat IP dan header User-Agent. Nilai yang ditetapkan secara eksplisit memiliki prioritas lebih tinggi daripada nilai yang diselesaikan otomatis.
| Parameter | Type | Required | Description |
|---|---|---|---|
| device | Object | No | Informasi perangkat |
| os | Object | No | Informasi sistem operasi dan kontainer |
| geo | Object | No | Geolokasi |
| isp | Object | No | Informasi ISP/penyedia layanan |
| net | Object | No | Informasi koneksi jaringan |
Untuk detail bidang, lihat bagian Properti umum dalam topik data Log.
Contoh
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
geo: {
country: 'your custom country info',
city: 'your custom city info',
},
});API SDK
Setelah inisialisasi, gunakan metode berikut untuk memodifikasi konfigurasi dan melaporkan data kustom.
getConfig
Ambil konfigurasi SDK saat ini:
const config = ArmsRum.getConfig();setConfig
Perbarui konfigurasi SDK saat runtime. Teruskan pasangan kunci-nilai tunggal atau objek konfigurasi lengkap:
// Tetapkan nilai tunggal
ArmsRum.setConfig('env', 'pre');
// Tetapkan beberapa nilai
const config = ArmsRum.getConfig();
ArmsRum.setConfig({
...config,
version: '1.0.0',
env: 'pre',
});sendCustom
Laporkan event kustom. Bidang type dan name wajib diisi.
| Parameter | Type | Required | Description |
|---|---|---|---|
| type | String | Yes | Tipe event |
| name | String | Yes | Nama event |
| group | String | No | Kelompok event |
| value | Number | No | Nilai numerik |
| properties | Object | No | Properti kustom |
ArmsRum.sendCustom({
type: 'CustomEventType1',
name: 'customEventName2',
group: 'customEventGroup3',
value: 111.11,
properties: {
prop_msg: 'custom msg',
prop_num: 1,
},
});sendException
Laporkan exception kustom. Bidang name dan message wajib diisi.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | String | Yes | Nama exception |
| message | String | Yes | Pesan exception |
| file | String | No | File sumber |
| stack | String | No | Jejak stack |
| line | Number | No | Nomor baris |
| column | Number | No | Nomor kolom |
| properties | Object | No | Properti kustom |
ArmsRum.sendException({
name: 'customErrorName',
message: 'custom error message',
file: 'custom exception filename',
stack: 'custom exception error.stack',
line: 1,
column: 2,
properties: {
prop_msg: 'custom msg',
prop_num: 1,
},
});sendResource
Laporkan event resource kustom. Bidang name, type, dan duration wajib diisi.
| Parameter | Type | Required | Description | |
|---|---|---|---|---|
| name | String | Yes | Nama resource | |
| type | String | Yes | Jenis resource (misalnya, css, javascript, xmlhttprequest, fetch, api, image, font) | |
| duration | String | Yes | Waktu respons | |
| success | Number | No | Hasil: 1 = success, 0 = failed, -1 = unknown | |
| method | String | No | Metode HTTP | |
| status_code | Number \ | String | No | Kode status |
| message | String | No | Pesan respons | |
| url | String | No | URL permintaan | |
| trace_id | String | No | ID jejak terdistribusi | |
| properties | Object | No | Properti kustom |
ArmsRum.sendResource({
name: 'getListByPage',
message: 'success',
duration: 800,
url: 'https://www.aliyun.com/data/getListByPage',
properties: {
prop_msg: 'custom msg',
prop_num: 1,
},
});