All Products
Search
Document Center

Application Real-Time Monitoring Service:Referensi konfigurasi SDK RUM untuk web dan HTML5

Last Updated:May 28, 2026

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.

ParameterTypeRequiredDefaultDescription
pidStringYes-Application ID
endpointStringYes-Titik akhir pelaporan data
envStringNoprodLingkungan aplikasi. Nilai yang valid: prod, gray, pre, daily, local
versionStringNo-Versi aplikasi
userObjectNo-Pengaturan pengguna. Lihat Parameter pengguna
spaModeStringNofalseMode pelacakan rute aplikasi single-page (SPA). Nilai yang valid: hash, history, auto, false
beforeReportFunctionNo-Callback yang dipanggil sebelum setiap laporan dikirim untuk memodifikasi atau memblokir data yang dilaporkan
reportConfigObjectNo-Pengaturan pelaporan data. Lihat Parameter reportConfig
sessionConfigObjectNo-Pengaturan sampling dan penyimpanan sesi. Lihat Parameter sessionConfig
collectorsObjectNo-Sakelar pengumpul data. Lihat Parameter collectors
parseViewNameFunctionNo-Parser kustom untuk nama tampilan (view.name). Menerima URL halaman sebagai input
parseResourceNameFunctionNo-Parser kustom untuk nama resource (resource.name). Menerima URL resource sebagai input
evaluateApiFunctionNo-Parser kustom untuk event API. Lihat Parameter evaluateApi
filtersObjectNo-Aturan filter event. Lihat Parameter filters
whiteScreenObjectNo-Pengaturan deteksi layar putih. Lihat Parameter whiteScreen
propertiesObjectNo-Properti kustom global yang dilampirkan ke semua event. Lihat Parameter properties
remoteConfigObjectNo-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.

ParameterTypeRequiredDefaultDescription
idStringNo-ID pengguna. Di-generate otomatis oleh SDK dan tidak dapat diubah
nameStringNo-Username
tagsStringNo-Tag pengguna
Penting

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.

ParameterTypeRequiredDefaultValid rangeDescription
flushTimeNumberNo30000 -- 10000Interval pelaporan dalam milidetik. Atur ke 0 untuk pelaporan langsung
maxEventCountNumberNo201 -- 100Jumlah 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.

ParameterTypeRequiredDefaultDescription
sampleRateNumberNo1Tingkat sampling dari 0 hingga 1. Misalnya, 0.5 melakukan sampling terhadap 50% sesi
maxDurationNumberNo86400000Durasi sesi maksimum dalam milidetik (default: 24 jam)
overtimeNumberNo3600000Timeout ketidakaktifan sesi dalam milidetik (default: 1 jam)
storageStringNolocalStorageTempat 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 unik

    • sampled — apakah sesi ini dipilih melalui sampling

    • startTime — timestamp mulai sesi

    • lastTime — 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.

ParameterTypeRequiredDefaultDescription
perfBoolean \ObjectNotrueData performa halaman
webvitalsBoolean \ObjectNotrueMetrik Web Vitals
apiBoolean \ObjectNotruePermintaan API (XMLHttpRequest, fetch)
staticResourceBoolean \ObjectNotruePermintaan resource statis
consoleErrorBoolean \ObjectNotrueError konsol
jsErrorBoolean \ObjectNotrueError JavaScript
actionBoolean \ObjectNotruePerilaku 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

ParameterTypeDescription
optionsObjectParameter permintaan: url, headers, dan data. Bidang eksak bergantung pada metode permintaan
responseObjectBody respons
errorErrorObjek error. Hanya ada saat permintaan gagal

Tipe kembalian (IApiBaseAttr)

Bidang yang dikembalikan menggantikan nilai default SDK. Bidang yang dihilangkan tetap menggunakan nilai default-nya.

FieldTypeRequiredDescription
nameStringNoNama API, biasanya URL yang dikonvergen (maksimal 1.000 karakter). Contohnya, /list/$id untuk /list/123. Mengambil prioritas dibandingkan parseResourceName
messageStringNoDeskripsi singkat panggilan API (maksimal 1.000 karakter)
successNumberNoHasil permintaan: 1 = sukses, 0 = gagal, -1 = tidak diketahui
durationNumberNoTotal durasi API
status_codeNumber \StringNoKode status
snapshotsStringNoSnapshot 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.

ParameterTypeRequiredDescription
resourceMatchOption \MatchOption[]NoKecualikan event resource statis dan API (XMLHttpRequest, fetch) yang sesuai
exceptionMatchOption \MatchOption[]NoKecualikan 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 true untuk 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+.

ParameterTypeDescription
detectionRulesArray<DetectionRule>Satu atau beberapa aturan deteksi. Aturan dijalankan sesuai urutan yang dikonfigurasi

DetectionRule

ParameterTypeRequiredDefaultDescription
targetStringYes-CSS selector untuk elemen yang akan dipantau
test_whenArrayYes-Event yang memicu deteksi. Nilai yang valid: LOAD, ERROR, ROUTE_CHANGE, LEAVE
delayNumberNo0Jeda dalam milidetik sebelum deteksi dimulai setelah event pemicu (kecuali ERROR dan LEAVE)
testerString \FunctionYes-Metode deteksi. Nilai yang valid: HAS_CONTENT, SAMPLE, SCREENSHOT, atau fungsi kustom
ignoreUrlListArray<String>No[]URL halaman yang dilewati
configOptionsConfigOptionsNo-Opsi spesifik tester. Lihat ConfigOptions

Event pemicu

EventDescription
LOADPemuatan halaman selesai
ERRORTerjadi error JavaScript global
ROUTE_CHANGERute (history atau hash) berubah
LEAVEHalaman akan ditutup

Metode deteksi

MethodHow it works
HAS_CONTENTMemeriksa apakah node ada dan berisi textContent
SAMPLEMenetapkan titik sampling di seluruh area target dan memeriksa apakah elemen DOM paling atas di setiap titik termasuk dalam himpunan elemen yang diizinkan
SCREENSHOTMengambil tangkapan layar canvas dan membandingkan blok piksel untuk menghitung laju layar putih
Fungsi kustomMenerima 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:

ParameterTypeDefaultDescription
colorRangeArray<String>['rgb(255, 255, 255)']Warna yang dianggap "putih." Format: rgb(r, g, b)
fillColorString'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
horizontalOffsetNumber0Offset horizontal (px) dari tepi kiri elemen target. Gunakan ini untuk mengecualikan sidebar kiri
verticalOffsetNumber0Offset vertikal (px) dari tepi atas elemen target. Gunakan ini untuk mengecualikan navbar atas
pixelsNumber10Ukuran blok piksel (pixels x pixels) untuk perbandingan
thresholdNumber0.8Ambang batas laju layar putih. Laju di atas nilai ini memicu event layar putih
dprNumber0.3Rasio penskalaan untuk gambar tangkapan layar
ignoreElementsArray<String>[]Selektor CSS untuk elemen yang dikecualikan dari tangkapan layar

Opsi SAMPLE:

ParameterTypeDefaultDescription
sampleMethod`1 \2 \3`2Pola sampling: 1 = silang, 2 = silang berpotongan, 3 = rice
checkPointsNumber10Jumlah titik sampling radial. Total titik: cross/intersecting cross = 4 * checkPoints + 1; rice = 8 * checkPoints + 1
thresholdNumber0.8Ambang batas laju layar putih
whiteBoxElementsArray<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.

ParameterTypeRequiredDescription
[key: string]String \NumberNoPasangan 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 melalui evaluateApi, sendCustom, sendException, atau sendResource) 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

  1. Buka Application List dan buka aplikasi Anda.

  2. Buka Application Settings > SDK config.

  3. Tetapkan nilai konfigurasi yang diinginkan.

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

ParameterTypeRequiredDescription
deviceObjectNoInformasi perangkat
osObjectNoInformasi sistem operasi dan kontainer
geoObjectNoGeolokasi
ispObjectNoInformasi ISP/penyedia layanan
netObjectNoInformasi 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.

ParameterTypeRequiredDescription
typeStringYesTipe event
nameStringYesNama event
groupStringNoKelompok event
valueNumberNoNilai numerik
propertiesObjectNoProperti 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.

ParameterTypeRequiredDescription
nameStringYesNama exception
messageStringYesPesan exception
fileStringNoFile sumber
stackStringNoJejak stack
lineNumberNoNomor baris
columnNumberNoNomor kolom
propertiesObjectNoProperti 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.

ParameterTypeRequiredDescription
nameStringYesNama resource
typeStringYesJenis resource (misalnya, css, javascript, xmlhttprequest, fetch, api, image, font)
durationStringYesWaktu respons
successNumberNoHasil: 1 = success, 0 = failed, -1 = unknown
methodStringNoMetode HTTP
status_codeNumber \StringNoKode status
messageStringNoPesan respons
urlStringNoURL permintaan
trace_idStringNoID jejak terdistribusi
propertiesObjectNoProperti kustom
ArmsRum.sendResource({
  name: 'getListByPage',
  message: 'success',
  duration: 800,
  url: 'https://www.aliyun.com/data/getListByPage',
  properties: {
    prop_msg: 'custom msg',
    prop_num: 1,
  },
});