Surveillance des applications mobiles

Instana permet de surveiller les applications mobiles en analysant les temps de réponse réels des requêtes d' URL, ce qui offre des informations détaillées sur l'expérience utilisateur et une visibilité approfondie sur les chemins d'appel des applications. La surveillance des applications via l' Instana utilise un agent pour l' iOS s ou pour Android. L'agent est installé en tant que dépendance sur les applications mobiles.

La surveillance de l'expérience utilisateur (EUM) ou la surveillance de l'expérience utilisateur réel (RUM) est un outil essentiel pour comprendre l'expérience utilisateur numérique avec les applications mobiles.

Installation de l'agent de surveillance des applications mobiles

iOS

Pour installer l'agent d' iOS, utilisez le gestionnaire de paquets d' Swift (via Xcode) ou rendez-vous sur CocoaPods.

Configuration de l'agent Instana iOS

Assurez-vous que les prérequis suivants sont remplis avant d'installer l'agent iOS :

  • iOS version 12 ou ultérieure
  • Swift 5.4 ou une version ultérieure

Pour ajouter le gestionnaire de paquets d' Swift, procédez comme suit :

  1. Ouvrez Xcode.
  2. Ouvrez votre projet Xcode.
  3. Sélectionnez le menu Fichier > Ajouter des dépendances de package ....
  4. Dans la fenêtre qui s'affiche, saisissez le dépôt https://github.com/instana/iOSAgent dans le champ « Rechercher ou saisir l' URL du paquet ». Ensuite, sélectionnez iosagent dans les résultats de recherche, puis cliquez Add Package sur.

Pour ajouter CocoaPods,, procédez comme suit :

  1. Dans votre spécification Podfile , ajoutez les commandes suivantes:

    pod 'InstanaAgent', '~> 1.8.9'
     
  2. Téléchargez les dépendances, exécutez pod install.

Dans la commande, remplacez 1.8.9 par la dernière version de l'agent iOS répertoriée dans https://cocoapods.org/pods/InstanaAgent.

Pour plus d'informations sur la procédure d'installation, consultez la page de l'agent « iOS » à l'adresse API.

Android

L'agent Android est composé d'un plug-in Gradle et d'une bibliothèque SDK. Appliquez le plug-in à votre module d'application et ajoutez le SDK en tant que dépendance.

Assurez-vous que les prérequis suivants sont remplis avant d'installer l'agent Android:

  • Android 4.1 ans et plus ( API à partir de 16 ans)
  • Java 8 ans et plus
  • Gradle 7.3.3+
  • AndroidX
  • targetSdk 33 +
Remarque : pour utiliser dans votre projet une version d' Gradle antérieure à 7.3.3, utilisez une version d'Android Agent antérieure à 6.0.0.

Installation du plug-in Android « Instana »

Pour ajouter le plug-in Android « Instana », procédez comme suit :

  1. Dans votre fichier build.gradle de niveau projet, ajoutez le code suivant:
    Remarque : la version 6.3.0 est utilisée à titre d'exemple dans l'extrait de code suivant. Pour connaître la dernière version de l'agent Instana, consultez la page https://mvnrepository.com/artifact/com.instana/android-agent-runtime.
    buildscript {
       ext {
            instanaAgentVersion = "6.3.0"
        }
       repositories {
            google()
            mavenCentral()
        }
       dependencies {
          classpath "com.instana:android-agent-plugin:$instanaAgentVersion"
        }
    }
     
  2. Dans le fichier Gradle de votre module (niveau application) (généralement app/build.gradle) après avoir appliqué le plug-in com.android.application , ajoutez le code suivant:
apply plugin: 'com.android.application'
apply plugin: 'com.instana.android-agent-plugin'
 

Ajouter Instana Android SDK

Pour ajouter l' Instana Android SDK, procédez comme suit :

  1. Dans votre fichier build.gradle de niveau projet, ajoutez le code suivant:
    allprojects {
        repositories {
            google()
            mavenCentral()
        }
    }
     
  2. Dans le fichier Gradle de votre module (niveau application) (généralement app/build.gradle), ajoutez le code suivant:
    dependencies {
        implementation 'com.instana:android-agent-runtime:$instanaAgentVersion'
    }
     
  3. Si minSdkVersion est antérieur à 24, dans le fichier Gradle de votre module (niveau d'application) (généralement app/build.gradle), ajoutez le code suivant:
    android {
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
     
  4. Facultatif : demander READ_PHONE_STATE l'autorisation. Lorsqu'un utilisateur se connecte à Internet via un réseau mobile, l'agent « Instana » peut indiquer le type précis de réseau mobile utilisé.

Pour activer la génération de rapports sur le type de réseau cellulaire, votre application doit demander l'autorisation READ_PHONE_STATE . Pour plus d'informations sur la demande d'autorisations, consultez la Request App Permissions section correspondante dans la documentation officielle d'Android.

Si votre application ne demande pas cette autorisation ou si l'utilisateur la refuse, l'agent « Instana » ne communique pas le type de réseau cellulaire. Dans votre classe, qui étend Application, remplacez YOUR_REPORTING_URL et YOUR_APP_KEY par les valeurs de configuration que vous trouverez dans votre tableau de bord d' Instana :

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = "YOUR_APP_KEY",
                reportingURL = "YOUR_REPORTING_URL"
            )
        )
    }
}
 

L'initialisation de base est terminée dans cette étape. Pour obtenir la liste complète des options d'initialisation, du suivi des vues et d'autres options, consultez la documentation de l'agent Android API.

Ajout de l'agent Instana React Native

L'agent React Native apporte la prise en charge des plateformes Android et iOS.

Consultez les conditions préalables répertoriées à l'adresse Instana React Native Agent.

Ajouter la dépendance

Pour configurer l'agent Instana React Native, procédez comme suit :

  1. Ajoutez une dépendance, exécutez la commande suivante dans la racine de votre projet:
    npm install @instana/react-native-agent --save
     
  2. Dans votre fichier de App.js classe, remplacez YOUR_INSTANA_APP_KEY et YOUR_INSTANA_REPORTING_URL par les valeurs de configuration que vous trouverez dans votre tableau de bord Instana :
export default class App extends Component {
  componentDidMount() {
    Instana.setup(YOUR_INSTANA_APP_KEY, YOUR_INSTANA_REPORTING_URL, null);
  }
}
 

L'initialisation de base est terminée dans cette étape. Pour obtenir la liste complète des options d'initialisation, du suivi des vues et d'autres options, consultez la page de l'agent « React Native » à l'adresse API.

Éléments à prendre en compte lors de l'utilisation de l'agent Read Native

  • Pour empêcher l'agent d' Instana s de communiquer avec le bundler Metro, ajoutez http://localhost:8081 à la liste des URL ignorées :
Instana.setIgnoreURLsByRegex(['http://localhost:8081.*']);
 
  • Pour prendre en charge les applications « iOS », votre projet doit contenir au moins un fichier « Swift » (qui peut être vide). Si vous n'avez pas de fichiers « Swift », ouvrez votre projet Xcode, <YourReactNativeProject>/ios puis ajoutez un fichier « Swift » vide. Xcode crée l'en-tête de pont pour vous.

  • Pour prendre en charge les applications Android, utilisez la version du plug-in Android « Instana » adaptée à votre version d' React Native :

    • Pour l' React Native, 0.63.3 ou une version antérieure, utilisez Instana; pour le plug-in Android, 1.5.3
    • Pour l' React Native, 0.63.4 ou une version ultérieure, utilisez Instana; pour le plug-in Android, 5.2.2 ou une version ultérieure

Android

Remarque : chaque version de l'agent Instana React Native est compatible avec une version spécifique du plug-in Android Instana. La version 6.2.5 est utilisée à titre d'exemple dans l'extrait de code suivant. Utilisez la dernière version du plug-in Android « Instana » compatible avec votre version d' React Native. Pour trouver la dernière version, rendez-vous sur https://www.npmjs.com/package/@instana/react-native-agent.

Suivez ces étapes pour activer la surveillance automatique d' HTTP :

  1. Dans votre fichier /android/build.gradle , ajoutez le code suivant:

    buildscript {
        ext {
            INSTANA_ANDROID_PLUGIN_VERSION = "6.2.5"
        }
        dependencies {
            classpath "com.instana:android-agent-plugin:$INSTANA_ANDROID_PLUGIN_VERSION"
        }
    }
     
  2. Dans votre fichier /android/app/build.gradle , ajoutez le code suivant:

    apply plugin: 'com.android.application'
    apply plugin: 'com.instana.android-agent-plugin'
     
fetch(url)

Si votre application utilise fetch pour exécuter des demandes de réseau, il se peut que votre application tombe en panne lors de l'exécution à chaque fois que fetch est utilisé: No virtual method toString(Z)Ljava/lang/String;

Ce problème a été résolu dans le cadre des tickets 27250 et 28425 de l' React Native. Si vous rencontrez ce problème, vous pouvez appliquer la solution palliative suivante.

Dans votre fichier Gradle de niveau module Android (généralement app/gradle.build), ajoutez le code suivant:

dependencies {
    implementation "com.squareup.okhttp3:okhttp:4.3.1"
    implementation "com.squareup.okhttp3:okhttp-urlconnection:4.3.1"
}
 
Execution failed for task ':app:transformClassesWithDexBuilderForDevDebug'

Si vous avez effectué une mise à niveau vers React Native 0.63.4 à partir d'une version antérieure, vérifiez que vous utilisez bien,

  • La version compatible du plug-in Android « Instana » répertoriée sur https://www.npmjs.com/package/@instana/react-native-agent.
  • Pour Gradle 7.3.3 et versions ultérieures, voir distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip dans android/gradle/wrapper/gradle-wrapper.properties
  • Pour le plug-in Android Gradle 7.2.2 et versions ultérieures, voir classpath("com.android.tools.build:gradle:7.2.2") dans android/build.gradle

Flutter

L'agent Flutter prend en charge les plateformes Android et iOS.

Remarque : l'agent « Flutter » ne prend pas en charge le suivi automatique de l' HTTP. HTTP La configuration du traçage doit être effectuée manuellement par le développeur (un exemple est fourni dans cette documentation).

Assurez-vous que les conditions préalables suivantes sont remplies avant de configurer l'agent « Flutter » :

  • Flutter version 1.20.0 ou ultérieure
  • Version de Dart entre 2.12.0 et 3.0.0

Ajout du package à votre application

Le paquet « Flutter » de l'agent d' Instana s est disponible à l'adresse pub.dev.

Pour ajouter le package à votre application, procédez comme suit:

  1. Ouvrez le fichier pubspec.yaml situé dans le dossier de l'application, puis ajoutez instana_agent: dans dependencies.

  2. Installez le paquet en utilisant l'une des méthodes suivantes :

    • A partir de la console: Exécutez flutter pub get
    • Depuis Android Studio ou IntelliJ:, cliquez sur « Packages » dans le ruban « Get in the action » de pubspec.yaml
    • Depuis VS Code: cliquez sur Obtenir des packages dans le ruban d'action depubspec.yaml

Initialisation de l'agent « Instana »

Importez le package dans vos fichiers dart:

import 'package:instana_agent/instana_agent.dart';
 

Arrêtez et redémarrez l'application, si nécessaire.

Configurez Instana dès que possible. Par exemple, dans initState(), ajoutez le code suivant:

@override
  void initState() {
    super.initState();
    InstanaAgent.setup(key: 'YOUR-INSTANA-KEY', reportingUrl: 'YOUR-REPORTING_URL');
  }
 

Si vous souhaitez développer des applications pour l' iOS,, configurez une version de la plateforme ${appFolder}/ios/Podspec avec une valeur minimale de 11.0.

Traçage des modifications de vue

Une fois l'agent « Instana » initialisé, ajoutez InstanaAgent.setView('Home');:

import 'package:instana_agent/instana_agent.dart';

[...]

InstanaAgent.setView('Home');
 

Traçage des demandes http

Une fois l'agent « Instana » initialisé, commencez à enregistrer les requêtes « HTTP » :

import 'package:instana_agent/instana_agent.dart';

[...]

InstanaAgent.startCapture(url: 'https://example.com/success', method: 'GET').then((marker) => marker
    ..responseStatusCode = 200
    ..responseSizeBody = 1000
    ..responseSizeBodyDecoded = 2400
    ..finish());
 

Créez votre propre InstrumentedHttpClient extension http.BaseClient , comme illustré dans l'exemple suivant:

class _InstrumentedHttpClient extends BaseClient {
   _InstrumentedHttpClient(this._inner);

   final Client _inner;

   @override
   Future<StreamedResponse> send(BaseRequest request) async {
      final Marker marker = await InstanaAgent.startCapture(url: request.url.toString(), method: request.method);

      StreamedResponse response;
      try {
         response = await _inner.send(request);
         marker
            ..responseStatusCode = response.statusCode
            ..responseSizeBody = response.contentLength
            ..backendTracingID = BackendTracingIDParser.fromHeadersMap(response.headers);
      } finally {
         await marker.finish();
      }

      return response;
   }
}

class _MyAppState extends State<MyApp> {

   [...]

   Future<void> httpRequest() async {
      final _InstrumentedHttpClient httpClient = _InstrumentedHttpClient(Client());
      final Request request = Request("GET", Uri.parse("https://www.ibm.com/products/instana"));
      httpClient.send(request);
   }

   [...]
}
 

Tableaux de bord

Récapitulatif

L'onglet « Résumé » du tableau de bord présente toutes les données importantes en un coup d'œil. Dans l'onglet « Résumé », vous pouvez consulter les informations suivantes :

Démarrages de session

Un événement de démarrage de session se produit lorsqu'un utilisateur lance l'application. La vignette « Début de session » affiche le nombre total de balises de début de session envoyées par l'agent Instana au cours de la période que vous avez sélectionnée.

Utilisateurs uniques

La vignette « Utilisateurs uniques » indique le nombre total d'utilisateurs disposant d'un identifiant unique. Si aucun identifiant utilisateur unique n'est défini, c'est l'identifiant userSessionIdentifier (usi) qui est pris en compte à la place. Dans ce cas, toutes les sessions suivantes utilisent le même identifiant jusqu'à ce que l'application soit désinstallée ou que la mémoire cache soit vidée.

Le champ « usi » a été introduit dans la version 6.0.6 de l'agent Android et dans la version 1.6.5 de l'agent iOS. Si vous utilisez une ancienne version de l'agent, le champ « usi » serait vide et chaque session correspondrait à un nouvel utilisateur.

Remarque : il peut parfois arriver que les vignettes « Session » et « Utilisateurs uniques » affichent des valeurs contradictoires. Cette divergence s'explique par le fait que les valeurs dépendent de la période sélectionnée. Par exemple, si la plage horaire s'étend de 10 h 10 à 10 h 20 et que vous avez une session en cours (les sessions en cours sont identifiées par des balises utilisateur autres que « Début de session ») qui a débuté avant 10 h 10, vous pourriez voir le nombre d'utilisateurs uniques pour cette plage horaire, mais aucune valeur de début de session. Vous remarquerez peut-être également que le nombre de sessions ouvertes est parfois supérieur au nombre d'utilisateurs uniques; cela s'explique par le fait qu'un même utilisateur a ouvert plusieurs sessions au cours de la période sélectionnée.

Transitions de vue

Les balises de transition entre vues sont envoyées lorsqu'un utilisateur passe d'une vue à une autre dans l'application. Par exemple, lorsque vous passez de l'écran d'accueil à l'écran Produits, la vignette « Transitions de vue » affiche le nombre total de balises de transition de vue pour la période sélectionnée.

Taux de sessions affectées par les pannes

La tuile « Taux de sessions affectées par des plantages » indique le pourcentage de sessions au cours desquelles les utilisateurs ont rencontré des plantages au cours de la période sélectionnée. Vous pouvez calculer le nombre de sessions affectées par des plantages en divisant le nombre de sessions au cours desquelles des plantages se sont produits par le nombre total de sessions uniques, comme l'indique la formule suivante :

Crash affected session rate = (Number of sessions with crashes / Total number of unique sessions) * 100
 

Taux d'utilisateurs affectés par les pannes

La tuile « Taux d'utilisateurs ayant subi un plantage » indique le pourcentage d'utilisateurs uniques ayant subi un plantage au cours de leur session pendant la période sélectionnée. Vous pouvez calculer le taux d'utilisateurs touchés par des plantages en divisant le nombre d'utilisateurs ayant subi des plantages de session par le nombre total d'utilisateurs uniques, comme l'indique la formule suivante :

Crash affected user rate = (Number of users with crashes / Total number of unique users) * 100
 
Figure 1. Présentation du tableau de bord
Présentation des tableaux de bord

Aperçu des incidents

Le graphique « Plantages » affiche le nombre de plantages de l'application mobile sur une période donnée. L'axe des x représente l'intervalle de temps, tandis que l'axe des y indique le nombre total d'accidents survenus pendant cet intervalle. Cela permet d'identifier les tendances, les heures de pointe ou les périodes spécifiques où la fréquence des accidents est plus élevée. Pour obtenir plus de détails sur l'incident, cliquez sur l'événement correspondant dans le graphique.

Le nombre d'accidents affiché varie en fonction de la période sélectionnée. Par exemple, si l'option « Last Minute » est sélectionnée, chaque barre représente le nombre de plantages par seconde, l'axe des x indiquant les secondes. Lorsque l'option « Dernière heure » est sélectionnée, chaque barre représente le nombre de pannes par minute, et l'axe des x indique le temps en minutes.

Par défaut, la carte « Principaux groupes d'accidents » affiche les groupes d'accidents les plus fréquents. Un ensemble d'erreurs comprend le type d'erreur et le message d'erreur correspondant. Pour afficher les groupes de plantages les plus fréquents en fonction du nombre d'utilisateurs concernés, passez de l'onglet « Occurrences » à l'onglet « Affected Users » dans la fiche.

Principales vues

La fiche « Vues les plus consultées » affiche les occurrences des transitions vers les vues les plus consultées par le client.

Principales origines des demandes HTTP

La carte « Principales origines des requêtes » ( HTTP ) affiche les principaux points de terminaison vers lesquels les appels sont effectués. Si vous passez à l'onglet « Erreurs », vous pouvez voir le pourcentage d'appels ayant généré des erreurs.

Performance

Découvrez-en davantage sur les performances de votre application et familiarisez-vous avec les événements liés au temps de démarrage de l'application, aux pannes de l'application et au manque de mémoire.

Pour plus d'informations sur les indicateurs recueillis dans l'onglet « Performances », consultez la section « Performances ».

Figure 2. Tableau de bord de performances
Tableau de bord de performances

Requêtes HTTP

Identifiez les demandes HTTP lentes ou problématiques. La sélection d'une origine spécifique fournit un aperçu du débit et du temps d'attente, ainsi que des taux d'erreur et de la répartition du temps d'attente.

Figure 3 HTTP détails de la demande
HTTP détails de la demande

Pannes

Vous pouvez afficher les messages d'erreur générés pour les pannes d'application. Les pannes sont regroupées en fonction du message d'erreur. Pour afficher les détails de la panne, cliquez sur un message d'erreur. Les détails incluent le nombre de pannes, le nombre d'utilisateurs impactés, les vues, les messages d'erreur, la trace de pile, les versions d'application, le système d'exploitation et le nom de l'appareil sur lequel la panne s'est produite. L'analyse des pannes fournit des informations sur la stabilité et les performances de votre application mobile. Pour afficher la trace brute de toutes les unités d'exécution actives, cliquez sur Toutes les unités d'exécution. Pour afficher les détails suivants des unités d'exécution en panne, cliquez sur Unités d'exécution en panne:

  • Adresse mémoire
  • Classe d'image
  • Nom de fichier
  • Nom de la fonction
  • Numéro de ligne du code dans le fichier

Le bouton Unités d'exécution en panne est activé uniquement après le téléchargement des fichiers dSYM pour l'application iOS app ou mapping pour l'application Android. Pour télécharger les fichiers, consultez les sections « Téléchargement dSYM de fichiers » et « Téléchargement mapping de fichiers ».

Figure 4 Détails de la panne
Détails de la panne

Vues

Il est généralement important d'isoler des vues spécifiques et d'analyser leurs performances, ce qui est également un excellent moyen de trouver la vue générant le plus de trafic. Sélectionnez une vue spécifique pour afficher tous les indicateurs de la vue.

Figure 5. Afficher plus d'informations
Afficher les détails

Événements personnalisés

Vous pouvez afficher la liste des événements personnalisés dans l'onglet Evénements personnalisés . Sélectionnez un événement pour afficher toutes les métriques associées.

Figure 6 Evénements personnalisés
Événements personnalisés

Association des équipes

Vous pouvez attribuer une équipe à une application mobile spécifique, mais seules les équipes dont vous faites partie seront disponibles à la sélection.

Une fois que les équipes ont été associées à des applications mobiles, seuls leurs membres pourront voir l'application mobile dans l'interface utilisateur. De plus, votre niveau d'accès à l'application mobile dépend des rôles qui vous sont attribués au sein de cette équipe.

Figure 7. Association d'équipes
Association d'équipes

Pour plus d'informations sur Team, consultez la section Team.

Alertes intelligentes

Affichez la liste de toutes les alertes intelligentes configurées. Cliquez sur une alerte pour afficher sa configuration, la modifier ou afficher son historique de révision. Si nécessaire, vous pouvez également désactiver ou retirer l'alerte.

La liste des alertes intelligentes, ainsi que chacune des configurations individuelles, affiche les équipes associées aux SLO sous-jacents pour lesquels l'alerte intelligente a été configurée.

Pour plus d'informations sur la manière d'ajouter une alerte, consultez la section « Alertes intelligentes ».

Analyse

A l'instar des fonctions d'analyse pour les traces et les appels, vous pouvez utiliser Analytics pour les données de surveillance des applications mobiles afin de répondre à des questions spécifiques qui ne sont pas couvertes par des tableaux de bord préconfigurés. Pour plus d'informations sur Analytics, consultez la section « Utilisation d'Analytics sans limites ».

Un élément de données de la surveillance d'application s'appelle une balise. Il existe plusieurs types de balises, à savoir les requêtes de début de session et les requêtes d' HTTP. Vous pouvez accéder à chaque balise dans Analytics. Vous pouvez utiliser les données de balise pour filtrer et regrouper les traces et les appels. Le regroupement par défaut dépend du type de balise sélectionné. Vous pouvez supprimer des regroupements pour inspecter la balise individuelle qui correspond aux filtres.

Figure 8. Analyser
Analyser

Affichage des dépendances des services pour les applications mobiles

L'onglet « Dépendances » affiche les services directs auxquels l'application mobile sélectionnée fait appel. Le nœud racine représente l'application mobile, et les nœuds de premier niveau indiquent les services dont elle dépend. Vous pouvez consulter ces informations sous forme de graphique ou de tableau détaillé.

Lorsque vous cliquez sur le nœud « Application mobile » dans le graphique, le panneau latéral affiche les détails des appels, tels que le nombre total d'appels, le taux d'erreur et la latence moyenne des appels effectués par l'application mobile. Lorsque vous cliquez sur un nœud de service, le panneau latéral affiche le nombre total d'appels reçus par le service, les appels provenant de l'application mobile sélectionnée, ainsi que les mêmes indicateurs d'appel (nombre d'appels, taux d'erreur et latence moyenne).

Vous pouvez consulter les problèmes détectés au niveau de l'application mobile ou du service, classés par niveau de gravité.

Figure 9. vue des dépendances
Tableau de bord des dépendances

Analyser l'état de l'application à des fins de débogage et d'analyse

Chaque fois qu'une application envoie une balise, Instana surveille l'état de l'application, qu'elle s'exécute au premier plan, en arrière-plan ou que son état soit inconnu. L'état de l'application vous aide à comprendre quand un problème survient. L'état « inconnu » indique que l'agent ne parvient pas à détecter l'état de l'application.

L'état de l'application vous permet de filtrer ou de regrouper les données des balises dans les outils d'analyse, ce qui facilite le débogage et l'analyse du comportement. Vous pouvez vous servir de l'état de l'application pour comprendre son comportement dans différents états.

Données géographiques

Instana associe les adresses IP des utilisateurs à des coordonnées géographiques à partir de la base de données GeoLite2, fournie par MaxMind. Les adresses IP sont collectées à l'aide du serveur proxy inverse. Pour une installation auto-hébergée, configurez l'adresse URL du point de terminaison de surveillance des utilisateurs comme adresse de rapport URL pour l'agent. Si l' URL s de rapport de l'agent n'est pas configurée, les adresses IP ne sont pas collectées et les informations géographiques associées ne sont pas disponibles.