Le SDK Real User Monitoring (RUM) pour le web et HTML5 propose des options de configuration pour la collecte de données, la gestion des sessions, le filtrage des événements et la détection des écrans blancs. Cette rubrique couvre les configurations courantes du SDK, les API d'exécution et des exemples d'utilisation.
Paramètres d'initialisation
Transmettez ces paramètres à ArmsRum.init() pour configurer le SDK au démarrage.
| Paramètre | Type | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|---|
| pid | String | Oui | - | ID de l'application |
| endpoint | String | Oui | - | Endpoint de reporting des données |
| env | String | Non | prod | Environnement de l'application. Valeurs valides : prod, gray, pre, daily, local |
| version | String | Non | - | Version de l'application |
| user | Object | Non | - | Paramètres utilisateur. Consultez Paramètres utilisateur |
| spaMode | String | Non | false | Mode de suivi des routes pour les applications à page unique (SPA). Valeurs valides : hash, history, auto, false |
| beforeReport | Function | Non | - | Callback invoqué avant chaque envoi de rapport pour modifier ou bloquer les données signalées |
| reportConfig | Object | Non | - | Paramètres de reporting des données. Consultez Paramètres reportConfig |
| sessionConfig | Object | Non | - | Paramètres d'échantillonnage et de stockage des sessions. Consultez Paramètres sessionConfig |
| collectors | Object | Non | - | Commutateurs des collecteurs de données. Consultez Paramètres collectors |
| parseViewName | Function | Non | - | Analyseur personnalisé pour le nom de la vue (view.name). Reçoit l'URL de la page en entrée |
| parseResourceName | Function | Non | - | Analyseur personnalisé pour le nom de la ressource (resource.name). Reçoit l'URL de la ressource en entrée |
| evaluateApi | Function | Non | - | Analyseur personnalisé pour les événements API. Consultez Paramètres evaluateApi |
| filters | Object | Non | - | Règles de filtrage des événements. Consultez Paramètres filters |
| whiteScreen | Object | Non | - | Paramètres de détection des écrans blancs. Consultez Paramètres whiteScreen |
| properties | Object | Non | - | Propriétés personnalisées globales attachées à tous les événements. Consultez Paramètres properties |
| remoteConfig | Object | Non | - | Livraison dynamique de la configuration. Consultez Configuration dynamique |
Initialisation via CDN
Lorsque vous chargez le SDK via Alibaba Cloud Content Delivery Network (CDN), accédez-y depuis l'espace de noms global RumSDK.default :
const ArmsRum = window.RumSDK.default;
// Initialize the SDK after it has loaded.
// Skip this step if you defined window.__rum before the SDK script tag.
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
});
// Update configuration at runtime
ArmsRum.setConfig('env', 'pre');
Initialisation via npm
import ArmsRum from '@arms/rum-browser';
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
});
Paramètres utilisateur
Associez les sessions RUM à vos comptes métier via l'objet user.
| Paramètre | Type | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|---|
| id | String | Non | - | ID utilisateur. Généré automatiquement par le SDK et ne peut pas être modifié |
| name | String | Non | - | Nom d'utilisateur |
| tags | String | Non | - | Tags utilisateur |
Ne remplacez pas user.id. Le SDK génère cette valeur automatiquement ; la remplacer affecte le calcul des visiteurs uniques (UV). Pour lier les sessions à votre système de compte, utilisez plutôt user.name ou user.tags.
Exemple
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
user: {
name: 'your user.name',
tags: 'your user.tags',
},
});
Paramètres reportConfig
Contrôlez l'intervalle de reporting et la taille des lots.
| Paramètre | Type | Obligatoire | Valeur par défaut | Plage valide | Description |
|---|---|---|---|---|---|
| flushTime | Number | Non | 3000 | 0 -- 10000 | Intervalle de reporting en millisecondes. Définissez sur 0 pour un reporting immédiat |
| maxEventCount | Number | Non | 20 | 1 -- 100 | Nombre maximal d'événements par lot |
Exemple
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
reportConfig: {
flushTime: 0, // Report immediately
maxEventCount: 50, // Up to 50 events per batch
},
});
Paramètres sessionConfig
Configurez l'échantillonnage des sessions, les limites de durée et le stockage.
| Paramètre | Type | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|---|
| sampleRate | Number | Non | 1 | Taux d'échantillonnage de 0 à 1. Par exemple, 0.5 échantillonne 50 % des sessions |
| maxDuration | Number | Non | 86400000 | Durée maximale de session en millisecondes (par défaut : 24 heures) |
| overtime | Number | Non | 3600000 | Délai d'inactivité de session en millisecondes (par défaut : 1 heure) |
| storage | String | Non | localStorage | Emplacement de stockage des données de session. Valeurs valides : cookie, localStorage |
Détails du stockage
Le paramètre storage détermine où le SDK conserve les données suivantes :
_arms_uid— l'ID utilisateur unique (user.id)-
_arms_session— métadonnées de session au format${sessionId}-${sampled}-${startTime}-${lastTime}:sessionId— identifiant de session uniquesampled— indique si cette session a été sélectionnée par échantillonnagestartTime— horodatage de début de sessionlastTime— horodatage de la dernière activité
Exemple
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
sessionConfig: {
sampleRate: 0.5, // Sample 50% of sessions
maxDuration: 86400000, // 24-hour maximum
overtime: 3600000, // 1-hour inactivity timeout
storage: 'cookie', // Use cookie instead of localStorage
},
});
Paramètres collectors
Activez ou désactivez les collecteurs de données individuels. Tous les collecteurs sont activés par défaut.
| Paramètre | Type | Obligatoire | Valeur par défaut | Description | |
|---|---|---|---|---|---|
| perf | Boolean \ | Object | Non | true | Données de performance des pages |
| webvitals | Boolean \ | Object | Non | true | Métriques Web Vitals |
| api | Boolean \ | Object | Non | true | Requêtes API (XMLHttpRequest, fetch) |
| staticResource | Boolean \ | Object | Non | true | Requêtes de ressources statiques |
| consoleError | Boolean \ | Object | Non | true | Erreurs de console |
| jsError | Boolean \ | Object | Non | true | Erreurs JavaScript |
| action | Boolean \ | Object | Non | true | Comportement utilisateur |
Exemple
Désactivez le suivi des interactions utilisateur :
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
collectors: {
action: false,
},
});
Paramètres evaluateApi
La fonction evaluateApi personnalise l'analyse des événements XMLHttpRequest et fetch. Elle reçoit trois arguments et renvoie une Promise<IApiBaseAttr>.
Arguments d'entrée
| Paramètre | Type | Description |
|---|---|---|
| options | Object | Paramètres de requête : url, headers et data. Les champs exacts dépendent de la méthode de requête |
| response | Object | Corps de la réponse |
| error | Error | Objet d'erreur. Présent uniquement en cas d'échec de la requête |
Type de retour (IApiBaseAttr)
Les champs renvoyés remplacent les valeurs par défaut du SDK. Les champs omis conservent leurs valeurs par défaut.
| Champ | Type | Obligatoire | Description | |
|---|---|---|---|---|
| name | String | Non | Nom de l'API, généralement une URL convergée (max. 1 000 caractères). Par exemple, /list/$id pour /list/123. Prend le dessus sur parseResourceName |
|
| message | String | Non | Brève description de l'appel API (max. 1 000 caractères) | |
| success | Number | Non | Résultat de la requête : 1 = succès, 0 = échec, -1 = inconnu |
|
| duration | Number | Non | Durée totale de l'API | |
| status_code | Number \ | String | Non | Code d'état |
| snapshots | String | Non | Instantané de diagnostic (max. 5 000 caractères). Stocke reqHeaders, params et resHeaders. Non indexé et ne peut pas être utilisé pour les requêtes ou l'agrégation |
Exemple
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,
},
};
},
});
Paramètres filters
Excluez des événements de ressource ou d'exception spécifiques du reporting.
| Paramètre | Type | Obligatoire | Description | |
|---|---|---|---|---|
| resource | MatchOption \ | MatchOption[] | Non | Exclut les événements de ressources statiques et d'API (XMLHttpRequest, fetch) correspondants |
| exception | MatchOption \ | MatchOption[] | Non | Exclut les événements d'exception correspondants |
Type MatchOption
type MatchOption = string | RegExp | ((value: string) => boolean);
String — correspond à toute URL ou message commençant par la valeur spécifiée. Par exemple,
'https://api.aliyun.com'correspond à'https://api.aliyun.com/v1/resource'.RegExp — fait correspondre les URL ou messages à une expression régulière.
Function — reçoit l'URL ou le message en entrée. Renvoyez
truepour exclure l'événement.
Lorsque vous transmettez un tableau de valeurs MatchOption, les conditions sont évaluées dans l'ordre. Un événement est exclu si l'une des conditions correspond.
Exemple
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
filters: {
exception: [
'Test error', // Messages starting with 'Test error'
/^Script error\.?$/, // Messages matching this regex
(msg) => msg.includes('example-error'), // Custom match function
],
resource: [
'https://example.com/', // URLs starting with 'https://example.com/'
/localhost/i, // URLs containing 'localhost'
(url) => url.includes('example-resource'),
],
},
});
Paramètres whiteScreen
Détectez les états d'écran vide ou blanc dans votre application. Pris en charge sur Chrome 40 et IE 9+.
| Paramètre | Type | Description |
|---|---|---|
| detectionRules | Array<DetectionRule> |
Une ou plusieurs règles de détection. Les règles s'exécutent dans l'ordre configuré |
DetectionRule
| Paramètre | Type | Obligatoire | Valeur par défaut | Description | |
|---|---|---|---|---|---|
| target | String | Oui | - | Sélecteur CSS de l'élément à surveiller | |
| test_when | Array | Oui | - | Événements qui déclenchent la détection. Valeurs valides : LOAD, ERROR, ROUTE_CHANGE, LEAVE |
|
| delay | Number | Non | 0 | Délai en millisecondes avant le début de la détection après un événement déclencheur (sauf ERROR et LEAVE) |
|
| tester | String \ | Function | Oui | - | Méthode de détection. Valeurs valides : HAS_CONTENT, SAMPLE, SCREENSHOT ou une fonction personnalisée |
| ignoreUrlList | Array<String> |
Non | [] | URLs de pages à ignorer | |
| configOptions | ConfigOptions | Non | - | Options spécifiques au testeur. Consultez ConfigOptions |
Événements déclencheurs
| Événement | Description |
|---|---|
LOAD |
Le chargement de la page est terminé |
ERROR |
Une erreur JavaScript globale se produit |
ROUTE_CHANGE |
La route (historique ou hash) change |
LEAVE |
La page est sur le point de se fermer |
Méthodes de détection
| Méthode | Fonctionnement |
|---|---|
HAS_CONTENT |
Vérifie si des nœuds existent et contiennent du textContent |
SAMPLE |
Définit des points d'échantillonnage dans la zone cible et vérifie si l'élément DOM supérieur à chaque point appartient à un ensemble d'éléments autorisés |
SCREENSHOT |
Prend une capture d'écran canvas et compare les blocs de pixels pour calculer le taux d'écran blanc |
| Fonction personnalisée | Reçoit l'élément cible en entrée. Renvoie un CustomTesterResult ou Promise<CustomTesterResult> |
Type CustomTesterResult :
type CustomTesterResult = {
hasContent: boolean; // true = content exists; false = white screen detected
message?: string; // Error message
snapshot?: Record<string, any>; // Diagnostic data
}
ConfigOptions
Options spécifiques aux méthodes de détection SCREENSHOT et SAMPLE.
Options SCREENSHOT :
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
| colorRange | Array<String> |
['rgb(255, 255, 255)'] |
Couleurs considérées comme « blanches ». Format : rgb(r, g, b) |
| fillColor | String | 'rgba(0, 100, 200, 255)' |
Couleur de remplissage appliquée aux images, vidéos, canevas, SVG et iframes lors de la capture d'écran. Ne doit pas chevaucher colorRange |
| horizontalOffset | Number | 0 | Décalage horizontal (px) par rapport au bord gauche de l'élément cible. Utilisez-le pour exclure une barre latérale gauche |
| verticalOffset | Number | 0 | Décalage vertical (px) par rapport au bord supérieur de l'élément cible. Utilisez-le pour exclure une barre de navigation supérieure |
| pixels | Number | 10 | Taille du bloc de pixels (pixels x pixels) pour la comparaison |
| threshold | Number | 0.8 | Seuil de taux d'écran blanc. Un taux supérieur à cette valeur déclenche un événement d'écran blanc |
| dpr | Number | 0.3 | Ratio de mise à l'échelle pour l'image de capture d'écran |
| ignoreElements | Array<String> |
[] | Sélecteurs CSS des éléments à exclure des captures d'écran |
Options SAMPLE :
| Paramètre | Type | Valeur par défaut | Description | ||
|---|---|---|---|---|---|
| sampleMethod | `1 \ | 2 \ | 3` | 2 | Motif d'échantillonnage : 1 = croix, 2 = croix entrecroisée, 3 = riz |
| checkPoints | Number | 10 | Nombre de points d'échantillonnage radiaux. Total des points : croix/croix entrecroisée = 4 * checkPoints + 1 ; riz = 8 * checkPoints + 1 |
||
| threshold | Number | 0.8 | Seuil de taux d'écran blanc | ||
| whiteBoxElements | Array<String> |
[] | Sélecteurs CSS des éléments considérés comme « blancs ». Lorsque l'élément supérieur à un point d'échantillonnage correspond à l'un des sélecteurs, le compteur d'écran blanc s'incrémente |
Option partagée :
SCREENSHOT et SAMPLE prennent tous deux en charge l'option debug (Boolean, par défaut : false). Lorsqu'elle est activée, les détails de détection sont affichés dans la console des outils de développement du navigateur.
Exemples
Détection basée sur la capture d'écran :
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,
},
}],
},
});
Détection basée sur l'échantillonnage :
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'],
},
}],
},
});
Fonction de détection personnalisée :
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: '......',
},
};
},
}],
},
});
Paramètres properties
Attachez des propriétés personnalisées globales à tous les événements signalés.
| Paramètre | Type | Obligatoire | Description | |
|---|---|---|---|---|
| [key: string] | String \ | Number | Non | Paire clé-valeur personnalisée. La clé doit être une chaîne conforme à la spécification JSON, avec un maximum de 50 caractères (tronquée si plus longue). Valeur de chaîne : max. 2 000 caractères. Les valeurs non chaînes et non numériques sont supprimées |
Comportement de fusion
Les propriétés globales (définies dans
init()) et les propriétés au niveau de l'événement (définies viaevaluateApi,sendCustom,sendExceptionousendResource) sont fusionnées au moment du stockage.Les propriétés au niveau de l'événement ont la priorité. Si la même clé existe dans les deux, la valeur au niveau de l'événement l'emporte.
Après la fusion, un maximum de 20 paires clé-valeur sont conservées. Les paires excédentaires sont triées par clé et supprimées.
Exemple
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
properties: {
prop_string: 'xx',
prop_number: 2,
// Keys longer than 50 characters are truncated
more_than_50_key_limit_012345678901234567890123456789: 'yy',
// String values longer than 2,000 characters are truncated
more_than_2000_value_limit: new Array(2003).join('1'),
// Invalid types -- these pairs are removed
prop_null: null,
prop_undefined: undefined,
prop_bool: true,
},
});
Configuration dynamique
Le SDK prend en charge la livraison distante des paramètres de configuration. Lors du chargement initial, le SDK récupère les paramètres distants qui remplacent les valeurs statiques de init() et met à jour les fonctionnalités telles que l'instrumentation et le reporting des données en conséquence.
Étape 1 : Configuration dans la console ARMS
Accédez à Application List et ouvrez votre application.
Accédez à Application Settings > SDK config.
Définissez les valeurs de configuration souhaitées.
Cliquez sur Confirm Update Dynamic Configuration pour envoyer les paramètres au serveur distant Object Storage Service (OSS).
Étape 2 : Activation dans le SDK
Ajoutez le champ remoteConfig à votre code d'initialisation avec la region où votre application est hébergée.
CDN :
window.__rum = {
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
remoteConfig: {
region: "cn-hangzhou" // Example: "ap-southeast-1" for Singapore
}
};
<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" // Example: "ap-southeast-1" for Singapore
}
});
Comportement de mise en cache
Après avoir récupéré la configuration distante, le SDK met les paramètres en cache localement. Lors des initialisations suivantes, le SDK privilégie la configuration mise en cache.
La configuration dynamique nécessite la version du SDK 0.0.37 ou ultérieure lors de l'importation via CDN avec une version épinglée.
Paramètres résolus automatiquement
Le SDK résout automatiquement ces propriétés à partir des adresses IP et des en-têtes User-Agent. Les valeurs définies explicitement ont la priorité sur les valeurs résolues automatiquement.
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
| device | Object | Non | Informations sur l'appareil |
| os | Object | Non | Informations sur le système d'exploitation et le conteneur |
| geo | Object | Non | Géolocalisation |
| isp | Object | Non | Informations sur le FAI/opérateur |
| net | Object | Non | Informations sur la connexion réseau |
Pour plus de détails sur les champs, consultez la section Propriétés communes de la rubrique Données de journal.
Exemple
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
geo: {
country: 'your custom country info',
city: 'your custom city info',
},
});
API du SDK
Après l'initialisation, utilisez ces méthodes pour modifier la configuration et signaler des données personnalisées.
getConfig
Récupérez la configuration actuelle du SDK :
const config = ArmsRum.getConfig();
setConfig
Mettez à jour la configuration du SDK au moment de l'exécution. Transmettez une seule paire clé-valeur ou un objet de configuration complet :
// Set a single value
ArmsRum.setConfig('env', 'pre');
// Set multiple values
const config = ArmsRum.getConfig();
ArmsRum.setConfig({
...config,
version: '1.0.0',
env: 'pre',
});
sendCustom
Signalez un événement personnalisé. Les champs type et name sont obligatoires.
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
| type | String | Oui | Type d'événement |
| name | String | Oui | Nom de l'événement |
| group | String | Non | Groupe d'événements |
| value | Number | Non | Valeur numérique |
| properties | Object | Non | Propriétés personnalisées |
ArmsRum.sendCustom({
type: 'CustomEventType1',
name: 'customEventName2',
group: 'customEventGroup3',
value: 111.11,
properties: {
prop_msg: 'custom msg',
prop_num: 1,
},
});
sendException
Signalez une exception personnalisée. Les champs name et message sont obligatoires.
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
| name | String | Oui | Nom de l'exception |
| message | String | Oui | Message d'exception |
| file | String | Non | Fichier source |
| stack | String | Non | Trace de pile |
| line | Number | Non | Numéro de ligne |
| column | Number | Non | Numéro de colonne |
| properties | Object | Non | Propriétés personnalisées |
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
Signalez un événement de ressource personnalisé. Les champs name, type et duration sont obligatoires.
| Paramètre | Type | Obligatoire | Description | |
|---|---|---|---|---|
| name | String | Oui | Nom de la ressource | |
| type | String | Oui | Type de ressource (par exemple, css, javascript, xmlhttprequest, fetch, api, image, font) |
|
| duration | String | Oui | Temps de réponse | |
| success | Number | Non | Résultat : 1 = succès, 0 = échec, -1 = inconnu |
|
| method | String | Non | Méthode HTTP | |
| status_code | Number \ | String | Non | Code d'état |
| message | String | Non | Message de réponse | |
| url | String | Non | URL de la requête | |
| trace_id | String | Non | ID de trace distribuée | |
| properties | Object | Non | Propriétés personnalisées |
ArmsRum.sendResource({
name: 'getListByPage',
message: 'success',
duration: 800,
url: 'https://www.aliyun.com/data/getListByPage',
properties: {
prop_msg: 'custom msg',
prop_num: 1,
},
});