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 :
- Ouvrez Xcode.
- Ouvrez votre projet Xcode.
- Sélectionnez le menu Fichier > Ajouter des dépendances de package ....
- Dans la fenêtre qui s'affiche, saisissez le dépôt
https://github.com/instana/iOSAgentdans le champ « Rechercher ou saisir l' URL du paquet ». Ensuite, sélectionneziosagentdans les résultats de recherche, puis cliquezAdd Packagesur.
Pour ajouter CocoaPods,, procédez comme suit :
Dans votre spécification
Podfile, ajoutez les commandes suivantes:pod 'InstanaAgent', '~> 1.8.9'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 +
Installation du plug-in Android « Instana »
Pour ajouter le plug-in Android « Instana », procédez comme suit :
- Dans votre fichier
build.gradlede 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" } } - Dans le fichier Gradle de votre module (niveau application) (généralement
app/build.gradle) après avoir appliqué le plug-incom.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 :
- Dans votre fichier
build.gradlede niveau projet, ajoutez le code suivant:allprojects { repositories { google() mavenCentral() } } - 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' } - Si
minSdkVersionest antérieur à 24, dans le fichier Gradle de votre module (niveau d'application) (généralementapp/build.gradle), ajoutez le code suivant:android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } - Facultatif : demander
READ_PHONE_STATEl'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 :
- Ajoutez une dépendance, exécutez la commande suivante dans la racine de votre projet:
npm install @instana/react-native-agent --save - Dans votre fichier de
App.jsclasse, remplacezYOUR_INSTANA_APP_KEYetYOUR_INSTANA_REPORTING_URLpar 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>/iospuis 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
Suivez ces étapes pour activer la surveillance automatique d' HTTP :
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" } }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.zipdansandroid/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")dansandroid/build.gradle
Flutter
L'agent Flutter prend en charge les plateformes Android et iOS.
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:
Ouvrez le fichier
pubspec.yamlsitué dans le dossier de l'application, puis ajoutezinstana_agent:dansdependencies.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 de
pubspec.yaml
- A partir de la console: Exécutez
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.
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

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

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.

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

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.

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

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.

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.

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

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.