API de surveillance Android
Vous pouvez utiliser l'agent Android d' Instana, disponible à l'adresse API, pour surveiller vos applications Android.
Versions de l'agent Android
Vous pouvez consulter toutes les mises à jour, les nouvelles fonctionnalités et les corrections de bogues concernant l'agent Android dans le fichier « Changelog » disponible sur GitHub.
Instana Agent Android
Vous pouvez utiliser l'agent Android « Instana » via les méthodes Instana de classe.
Configuration de la surveillance d' Instana
Pour configurer la surveillance d' Instana s pour les applications Android, initialisez ` Instana ` dans votre Application classe onCreate(), immédiatement après super.onCreate():
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
Instana.setup(
this,
InstanaConfig(
key = "YOUR_APP_KEY",
reportingURL = "YOUR_REPORTING_URL"
)
)
}
}
Options de configuration
Le tableau suivant présente les paramètres de configuration :
| Paramètre | Description |
|---|---|
key ( String ) |
Clé de configuration de la surveillance Instana. |
reportingURL ( String ) |
L' URL, qui pointe vers l'instance Instana à laquelle les données de surveillance sont envoyées. |
httpCaptureConfig ( HTTPCaptureConfig , facultatif) |
Par défaut, les requêtes et les réponses d' HTTP s sont automatiquement enregistrées. Pour désactiver la surveillance automatique, définissez ce paramètre sur HTTPCaptureConfig.MANUAL . Pour désactiver la surveillance de la session d' HTTP, définissez ce paramètre sur HTTPCaptureConfig.NONE . |
suspendReporting ( SuspendReportingType , facultatif) |
La transmission des balises « Instana » s'effectue en arrière-plan avec une faible priorité. Vous pouvez choisir les conditions dans lesquelles la transmission des balises doit être suspendue, par exemple lorsque la batterie est faible, lorsque vous n'avez qu'une connexion cellulaire, ou jamais. |
initialBeaconDelayMs ( Long , facultatif) |
L'agent retarde l'envoi des premières balises pendant la durée définie afin de s'assurer que le client a bien configuré tous les paramètres supplémentaires, tels que Session Identifiers , avant que l'agent n'envoie une balise au serveur Instana. Seules les transmissions des balises sont retardées. La surveillance et la capture des balises commencent dès l'initialisation de l'agent, quel que soit le initialBeaconDelayMs paramètre. |
collectionEnabled ( Boolean , facultatif) |
Ce paramètre active ou désactive la collecte et la soumission des données de l'agent Android au démarrage. Par défaut, la collecte de données est activée avec la configuration. Pour configurer l' Instana, mais ignorer toute collecte de données, définissez ce paramètre sur false dans la configuration. Ce paramètre est utile dans les cas où le consentement de l'utilisateur est requis avant que l'agent Android puisse collecter des données. La valeur par défaut est true. |
enableCrashReporting ( Boolean , facultatif) |
Ce paramètre active ou désactive la collecte et l'envoi des données relatives aux plantages au démarrage. Si nécessaire, la collecte et la soumission peuvent être activées après le démarrage. Ce paramètre est utile pour les scénarios dans lesquels l'accord de l'utilisateur est requis avant que l'agent Android puisse collecter des données de panne. La valeur par défaut est false. |
slowSendIntervalMillis ( Long , facultatif) |
Cette fonction est obsolète. Ce paramètre active la fonction de mode d'envoi lent lors de l'échec de l'envoi de balise en fournissant un entier positif valide en millisecondes (compris entre 2000 et 3600000 millisecondes). La valeur par défaut est |
usiRefreshTimeIntervalInHrs ( Long , facultatif) |
Ce paramètre définit l'intervalle de temps pour l'actualisation de la page usi ( userSessionIdentifier ). usi sert d'identificateur unique, qui est affecté à l'application lorsque les données d'identification de l'utilisateur ne sont pas explicitement fournies ou lorsque l'application ne possède pas de contexte utilisateur. Si ce paramètre est défini sur une valeur négative, usi conserve son comportement par défaut et ne s'actualise jamais. Si ce paramètre est défini sur la valeur zéro, usi n'est pas envoyé au système dorsal et l'identificateur est donc désactivé. Si ce paramètre est défini sur une valeur positive, usi est actualisé aux intervalles de temps spécifiés. La valeur du paramètre doit être indiquée en heures. La valeur par défaut est ` -1. |
autoCaptureScreenNames ( Boolean , facultatif) |
Ce paramètre permet la saisie automatique des noms d'écran. Actuellement, il prend en charge la capture de nom d'écran pour les applications Android qui sont générées à l'aide de Fragments et Activities avec des présentations xml (non applicable aux interfaces utilisateur composables ou autres). L'activation de cette fonction supprime la nécessité de l'implémentation Instana.view existante dans le codebase, car elle sert de remplacement. Les noms d'écran sont capturés à plusieurs niveaux, comme suit : * Activité * Fragments de l'activité : le nom est automatiquement extrait des étiquettes d'accessibilité attribuées à la mise en page racine. Si ce nom n'est pas trouvé, le nom Activity de la classe est utilisé comme nom d'écran. Fragments : L'agent recherche d'abord les étiquettes dans le navController, puis dans le fragment tags, et enfin dans accessibility labels sur la vue racine. Si aucun n'est disponible, il utilise le nom Fragment de la classe comme nom d'écran. Les métadonnées associées à chaque vue capturée comprennent le chemin d'accès local, l'heure de l' OnResume ation (il peut y avoir un léger écart entre l'heure réelle et l'heure d'ation capturée, car celle-ci est obtenue à partir des rappels) et les noms de classe des fragments et des activités. Il est important de noter que la capture automatique ne fonctionne pour l'instant que pour les applications dont la minification Fragments est désactivée ou pour lesquelles ProGuard a été exclu pour toutes les applications. La valeur par défaut est false. |
rateLimits ( RateLimits , facultatif) |
Ce paramètre vous permet de personnaliser les limites relatives au nombre de balises pouvant être envoyées au cours d'un intervalle de temps donné. Trois options sont disponibles : DEFAULT_LIMITS, MID_LIMITS et MAX_LIMITS. Par défaut, l'option DEFAULT_LIMITS est sélectionnée. DEFAULT_LIMITS : - 500 balises toutes les 5 minutes - 20 balises toutes les 10 secondes MID_LIMITS : - 1 000 balises toutes les 5 minutes - 40 balises toutes les 10 secondes MAX_LIMITS : - 2 500 balises toutes les 5 minutes - 100 balises toutes les 10 secondes |
dropBeaconReporting ( Boolean , facultatif) |
Ce paramètre active la signalisation des balises perdues. Lorsque le nombre de balises atteint les limites de débit, les nouvelles balises sont ignorées au lieu d'être envoyées au serveur Instana. Si ce paramètre est défini sur true, les balises perdues sont suivies en interne, et le rapport sur les balises est envoyé au backend Instana dès que le nombre de balises ne dépasse plus la limite de débit. La valeur par défaut est false. |
trustDeviceTiming ( Boolean , facultatif) |
Lorsque cette option est activée, chaque balise contient un indicateur qui demande au serveur Instana de considérer comme fiable l'horodatage de création de la balise. Par défaut, si une balise est reçue plus de 30 minutes après sa création, le serveur remplace l'heure de création par l'heure de réception. La valeur par défaut de ce paramètre est « false ». |
enableW3CHeaders ( Boolean , facultatif) |
Lorsque cette option est activée, l'agent Android inclut les traceparent en-têtes tracestate et dans les appels vers API qui sont surveillés. Ces en-têtes permettent la corrélation au niveau du backend, même si celui-ci n'est pas équipé de l'agent d' Instana. Dans ce cas, vous devez utiliser un outil de surveillance compatible (tel que OpenTelemetry ) pour exporter les détails des traces du backend vers le backend Instana. Si cette option est désactivée, la corrélation avec le backend est possible lorsque l'agent d' Instana s surveille également le backend. Par défaut, le paramètre a la valeur false. |
performanceMonitorConfig ( PerformanceMonitorConfig , facultatif) |
Ce paramètre permet de configurer la surveillance des performances de l'application. Il s'agit d'un objet de la classe « `PerformanceMonitorConfig` ». Pour configurer les paramètres de surveillance des indicateurs de performance, consultez le tableau 2. |
Configuration des indicateurs de performance
Le tableau suivant présente les paramètres de configuration liés aux performances
| Paramètre | Description |
|---|---|
enableAppStartTimeReport ( Boolean , facultatif) |
Ce paramètre permet de générer des rapports sur les temps de démarrage à froid de l'application. Le temps de démarrage à froid désigne le temps nécessaire à une application Android pour se lancer lorsqu'elle est lancée à partir de zéro, et non depuis l'arrière-plan. La mesure commence après l'initialisation de Zygote et la liaison des processus, et se termine lorsque l'interface utilisateur de l'application devient interactive. C'est pendant cette période que les développeurs ont la possibilité d'optimiser les performances de démarrage à froid de l'application. Les temps de démarrage se mesurent en millisecondes. La valeur par défaut est true. |
enableAnrReport ( Boolean , facultatif) |
Ce paramètre permet de signaler les cas où l'application ne répond pas (application not respond). La valeur par défaut est false. |
anrThresholdMs ( Long , facultatif) |
Ce paramètre définit le délai, en millisecondes, au terme duquel l'application est considérée comme ne répondant plus (application not respond). Ce paramètre ne s'applique que si enableAnrReport est défini sur true. La valeur par défaut est 3000L. |
enableLowMemoryReport ( Boolean , facultatif) |
Ce paramètre permet d'activer l'affichage de notifications en cas de mémoire insuffisante. La valeur par défaut est false. |
enableBackgroundEnuReport ( Boolean , facultatif) |
Ce paramètre permet d'envoyer une notification toutes les 24 heures en cas d'utilisation excessive du réseau en arrière-plan. Pour la création de rapports, l'indicateur trustDeviceTiming doit également être défini sur « true ». La valeur par défaut est false. |
Vérification de la configuration actuelle
Pour vérifier la configuration actuelle d' Instana, accédez à InstanaConfig l'instance :
val currentConfig = Instana.config
Récupération de l'identifiant de session
Chaque instance de l'agent « Instana » dispose d'un identifiant de session unique que vous pouvez utiliser à d'autres fins dans votre application.
| Propriété | Description |
|---|---|
sessionId ( String , facultatif) |
Identificateur de la session en cours. Cet ID session est créé dans le cadre du processus de configuration. |
Exemple
val sessionId = Instana.sessionId
Surveillance HTTP automatique
Par défaut, les sessions d' HTTP s sont enregistrées automatiquement. Une fois Instana initialisé (après avoir installé le plug-in Android Instana et Instana Android SDK ), l'agent se charge du reste.
L'agent Android d' Instana intègre automatiquement du code permettant de surveiller les requêtes HTTP pour les clients pris en charge :
- OkHttp3
- HttpURLConnection
- Retrofit
La surveillance automatique de l' HTTP e peut être désactivée au profit d'une surveillance manuelle de l' HTTP e.
Surveillance HTTP manuelle
Vous pouvez également surveiller manuellement les sessions d' HTTP.
Début de l'enregistrement
Cette fonction renvoie le HTTPMarker, dont vous aurez besoin ultérieurement lorsque la demande sera terminée.
Instana {
fun startCapture(url: String, viewName: String? = view, requestHeaders: Map<String,String>?): HTTPMarker?
}
Paramètres de configuration
Le tableau suivant présente les paramètres de configuration :
| Paramètre | Description |
|---|---|
url ( String ) |
URL à capturer. |
viewName ( String , facultatif) |
Nom de la vue visible associée à cette demande. |
requestHeaders ( Map<String,String> , facultatif) |
Nom et valeurs de l'en-tête de demande. |
Cette fonction renvoie le marqueur d' HTTP, que vous pouvez utiliser pour définir la taille de la réponse et déclencher l'état « finish » ou « error » une fois la requête terminée.
Fin de la capture
Une fois la demande terminée, vous devez appeler finish avec la réponse sur le HTTPMarker et un Errorfacultatif:
HTTPMarker {
fun finish(response: okhttp3.Response)
fun finish(request: okhttp3.Request, error: Throwable)
fun finish(connection: java.net.HttpURLConnection)
fun finish(connection: java.net.HttpURLConnection, error: Throwable)
fun finish(data: com.instana.android.instrumentation.HTTPMarkerData)
}
Annuler la capture
Si la demande est annulée avant la fin, démarrez la méthode suivante sous HTTPMarker:
fun cancel()
Exemples
val request = yourMethodToCreateRequest()
val marker = Instana.startCapture(request.url().toString(), viewName: "User Details")
val response = OkHttpClient().newCall(request).execute()
marker?.finish(response)
val marker = Instana.startCapture("https://example.com/user", viewName: "User Details")
// Complete request and manually obtain any relevant information
val httpMarkerData = HTTPMarkerData(
requestMethod = "GET",
responseStatusCode = 200,
responseSizeEncodedBytes = 200,
responseSizeDecodedBytes = 1000
)
marker?.finish(httpMarkerData)
HTTPMarker marker = Instana.startCapture("https://example.com/user", "User Details");
// Complete request and manually obtain any relevant information
HTTPMarkerData data = new HTTPMarkerData.Builder()
.requestMethod("GET")
.responseStatusCode(200)
.responseSizeEncodedBytes(200)
.responseSizeDecodedBytes(1000)
.build();
marker.finish(data);
Configuration des vues
Instana peut segmenter les informations d'application mobile par vues logiques. Pour ce faire, définissez le nom de la vue via la méthode Instana.setView(String) . La vue est ensuite associée à toutes les balises surveillées jusqu'à ce que la vue change lorsque setView est à nouveau appelé.
N'utilisez pas de noms techniques ou génériques tels que la classe (par exemple, WebViewActivity) pour définir des vues. Utilisez des noms lisibles pour les vues, par exemple product detail page ou payment selection. En se concentrant sur l'expérience utilisateur, les membres de l'équipe qui n'ont pas une connaissance intime du codebase peuvent comprendre les connaissances fournies.
Instana.setView(String) cette méthode doit être appelée lorsqu'un écran est affiché à l'utilisateur, et non lors de sa création (comme c'est le cas pour un fragment, qui peut être créé une seule fois mais affiché plusieurs fois). La définition du nom de la vue permet également à Instana de suivre les transitions entre les pages, en plus des chargements de pages.Exemple
class WebViewActivity : AppCompatActivity() {
override fun onResume() {
super.onResume()
Instana.view = "Webview: FitBit authorization"
}
}
Identification des utilisateurs
Des informations spécifiques à l'utilisateur peuvent, le cas échéant, être envoyées avec les données transmises à Instana. Ces informations peuvent ensuite être utilisées pour débloquer les fonctionnalités supplémentaires suivantes :
- Calcul du nombre d'utilisateurs affectés par des erreurs
- Filtrage des données pour des utilisateurs spécifiques
- Identification de l'utilisateur à l'origine d'une modification de vue ou d'une demande d' HTTP
Par défaut, Instana associe toute information permettant d'identifier un utilisateur aux balises. Veuillez tenir compte des lois applicables en matière de protection des données lorsque vous décidez d'envoyer des informations personnelles à Instana. Identifiez les utilisateurs à l'aide d'un ID utilisateur. Pour l' Instana e, cette action est une entité transparente String qui sert uniquement à calculer certains indicateurs. userName et userEmail peuvent également être utilisés pour avoir accès à plus de filtres et à une présentation plus agréable des informations utilisateur.
Si vous gérez des utilisateurs anonymes et que vous n'avez donc pas accès à des ID utilisateur, vous pouvez également utiliser des ID de session. Les ID de session ne sont pas aussi utiles que les ID utilisateur lorsque vous filtrez des données, mais ils sont un bon indicateur pour calculer les métriques d'utilisateur affectées ou uniques. Vous devez définir un nom d'utilisateur, tel que Anonymous , pour établir une distinction claire entre les utilisateurs authentifiés et les utilisateurs non authentifiés. Les ID session peuvent être des données sensibles (en fonction de l'infrastructure ou de la plateforme utilisée). Pour éviter de transmettre à Instana des données susceptibles de permettre l'accès, effectuez un hachage des identifiants de session.
Les données déjà transmises au serveur d' Instana s ne peuvent pas être mises à jour a posteriori. Vous devez donc appeler cette méthode ` API ` dès que possible lors du lancement de l'application.
usi ( userSessionIdentifier ) est récupéré à partir de la balise. Il usi sert d'identifiant unique, attribué à l'application afin d'identifier de manière unique les utilisateurs dans les cas où les données utilisateur ne sont pas disponibles. En utilisant le usiRefreshTimeIntervalInHrs paramètre de la section « Paramètres de configuration », vous pouvez définir l'intervalle de temps pour l'actualisation de usi.Instana {
void setUserId(@Nullable String)
@Nullable String getUserId()
void setUserName(@Nullable String)
@Nullable String getUserName()
void setUserEmail(@Nullable String)
@Nullable String getUserEmail()
}
Exemple
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
Instana.setup(
this,
InstanaConfig(
key = BuildConfig.INSTANA_KEY,
reportingURL = BuildConfig.INSTANA_REPORTING_URL
)
)
Instana.userId = "1234567890"
Instana.userEmail = "instana@example.com"
Instana.userName = "instana android agent demo"
}
}
Ajout de métadonnées
Des métadonnées facultatives peuvent être associées à toutes les données transmises à Instana. Vous pouvez utiliser ces métadonnées pour suivre les valeurs de configuration de l'interface utilisateur, les paramètres, les indicateurs de fonction et tout contexte supplémentaire pouvant être utile pour l'analyse.
Instana {
val meta = MaxCapacityMap<String, String>(50)
}
Propriétés
| Paramètre | Description |
|---|---|
meta ( MaxCapacityMap ) |
Objet qui contient toutes les paires méta-clé ou valeur. Son interface ressemble à celle d'une carte commune. Vous pouvez ajouter et supprimer des éléments comme d'habitude, si vous ne surpassez pas la capacité maximale de l'objet. |
Exemple
class UserProfileActivity : AppCompatActivity() {
override fun onResume() {
super.onResume()
Instana.meta.put("user authenticated", "true")
Instana.meta.put("user type", "editor")
}
}
Exclusion d'URL de la surveillance
Des URL peuvent être ignorées en fournissant des expressions régulières, en les ajoutant à la liste ignoreURLs. Ignorer toutes les demandes HTTP qui contiennent des données sensibles comme un mot de passe est un bon scénario d'utilisation de cette fonction.
Seules les URL surveillées automatiquement sont ignorées. Les URL surveillées manuellement ne sont pas ignorées.
Instana {
val ignoreURLs = mutableListOf<Regex>()
}
Instana {
List<Pattern> getIgnoreURLs()
}
Exemple
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
Instana.setup(
this,
InstanaConfig(
key = BuildConfig.INSTANA_KEY,
reportingURL = BuildConfig.INSTANA_REPORTING_URL
)
)
Instana.ignoreURLs.add("/.*([&?])password=.*/i".toRegex())
}
}
L'exemple ignore toutes les URL qui contiennent un mot de passe dans la requête.
Génération de rapports sur les événements personnalisés
Les événements personnalisés permettent de signaler à Instana les activités atypiques, les interactions importantes et les délais personnalisés. Ces rapports peuvent s'avérer particulièrement utiles pour analyser les erreurs non détectées (fil d'Ariane) et pour suivre davantage d'indicateurs de performance.
Instana {
fun reportEvent(event: CustomEvent)
}
Grâce à la CustomEvent classe fournie par Instana, vous pouvez définir plusieurs paramètres, eventName (dans son constructeur) étant le seul obligatoire.
Paramètres de configuration
Le tableau suivant présente les paramètres de configuration :
| Paramètre | Description |
|---|---|
eventName ( String ) |
Nom de l'évènement personnalisé. Elle est mise en évidence dans le tableau de bord d' Instana |
startTime ( Long , facultatif) |
Horodatage du démarrage de l'événement, défini en millisecondes depuis l'époque. Prend par défaut la valeur Now()-duration. |
duration ( Long , facultatif) |
Durée de l'événement, définie en millisecondes. La valeur par défaut est 0. |
viewName ( String , facultatif) |
Vue logique dans laquelle l'évènement s'est produit. Par défaut, la vue en cours est définie dans Instana.view. |
meta ( Map<String, String> , facultatif) |
Mappe de métavaleurs. Ces valeurs sont fusionnées avec les balises Instana.meta globales pour cet événement. Ils ne seront appliqués à aucun autre événement futur. N'incluez pas d'informations sensibles dans meta . |
backendTracingID ( String , facultatif) |
Identifiant de suivi envoyé par le backend compatible avec la fonctionnalité « Instana » dans l'en-tête Server-Timing sous la forme intid;desc=backendTracingID. |
error ( Throwable , facultatif) |
Erreur renvoyée pour fournir un contexte supplémentaire, le cas échéant. |
customMetric ( Double , facultatif) |
Option permettant de fournir des données de métrique personnalisées avec une précision maximale de quatre décimales. N'incluez pas d'informations sensibles dans cette mesure. |
Exemples
val myEvent = CustomEvent("MyCustomEvent").apply {
duration = 300
meta = mapOf("keyOne" to "valueOne", "keyTwo" to "valueTwo")
backendTracingID = "1234567890"
customMetric = 98.7654
}
Instana.reportEvent(myEvent)
Map<String,String> myMetas = new HashMap<>();
myMetas.put("keyOne", "valueOne");
myMetas.put("keyTwo", "valueTwo");
CustomEvent myEvent = new CustomEvent("MyCustomEvent");
myEvent.setDuration(300L, TimeUnit.MILLISECONDS);
myEvent.setMeta(myMetas);
myEvent.setBackendTracingID("1234567890");
Instana.reportEvent(myEvent);
Disponibilité des services de jeu d' Google
Vous pouvez indiquer explicitement à Instana si les services Play Google sont disponibles pour un utilisateur et une session spécifiques.
Instana {
val googlePlayServicesMissing: Boolean?
}
Exemple
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
Instana.setup(
this,
InstanaConfig(
key = BuildConfig.INSTANA_KEY,
reportingURL = BuildConfig.INSTANA_REPORTING_URL
)
)
Instana.googlePlayServicesMissing = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this) != ConnectionResult.SUCCESS
}
}
//app/build.gradle
dependencies {
implementation 'com.google.android.gms:play-services-basement:17.1.1'
implementation 'com.google.android.gms:play-services-base:17.1.0'
}
Façade de journalisation
Par défaut, Instana redirige directement vers LogCat. Vous pouvez diriger ces journaux en fournissant un objet qui implémente l'interface du consignateur:
interface Logger {
fun log(level: Int, tag: String, message: String, error: Throwable?)
}
Instana {
var logger: com.instana.android.Logger?
}
Paramètres de configuration
Le tableau suivant présente les paramètres de configuration :
| Paramètre | Description |
|---|---|
level ( Int ) |
Niveau de journalisation défini par l'un des niveaux android.util.Log (android.util.Log.INFO, android.util.Log.ERROR, ...) |
tag ( String ) |
Balise d'agent Instana interne |
message ( String ) |
Message de journal généré par Instana |
error ( Throwable , facultatif) |
Erreur générée pour fournir plus de contexte, le cas échéant. |
Exemple
Instana.logger = object : Logger {
override fun log(level: Int, tag: String, message: String, error: Throwable?) {
Log.d("my_tag", "intercepted Instana Android Agent log message: '$message'")
}
}
Définition des niveaux de journalisation
Par défaut, Instana génère des journaux de niveau INFO. Vous pouvez modifier cette valeur par défaut en définissant un niveau de journalisation parmi les niveaux android.util.Log communs (android.util.Log.INFO, android.util.Log.ERROR, ou d'autres niveaux):
Instana {
var logLevel: Int
}
Exemple
Instana.logLevel = android.util.Log.ERROR
Activer ou désactiver la collecte de données
Vous pouvez activer la collecte et la transmission des données à tout moment, par exemple au démarrage de l'agent Instana ou pendant son exécution.
Cette fonction est particulièrement utile dans les scénarios où l'accord explicite de l'utilisateur est requis pour que la collecte des données puisse se poursuivre.
Instana {
fun setCollectionEnabled(enabled: Boolean)
fun isCollectionEnabled()
}
Exemple
Instana.setCollectionEnabled(true)
Masquage des paramètres de requête d' URL
Les paramètres de requête dans les URL collectées peuvent contenir des données sensibles. Par conséquent, l'agent « Instana » prend en charge la définition de modèles d'expressions régulières pour les clés de paramètres de requête dont les valeurs doivent être masquées; toute valeur masquée est remplacée par <redacted>«. ».
La suppression des données sensibles s'effectue au sein de l'agent Instana avant que celui-ci ne transmette les informations au serveur Instana. Par conséquent, les secrets ne sont pas transmis aux serveurs d'arrière-plan d' Instana pour y être traités et ne peuvent donc pas être analysés dans l'interface utilisateur ni récupérés via Instana API.
Par défaut, l'agent « Instana » est configuré avec une liste de trois expressions régulières permettant de masquer automatiquement les valeurs des paramètres de requête :
-
key -
secret -
password
L'occultation est appliquée uniquement aux demandes surveillées automatiquement et à leurs journaux associés. Les demandes surveillées manuellement ne sont pas occultées.
Instana {
val redactHTTPQuery = mutableListOf<Regex>()
}
Exemple
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
Instana.setup(
this,
InstanaConfig(
key = BuildConfig.INSTANA_KEY,
reportingURL = BuildConfig.INSTANA_REPORTING_URL
)
)
// in order to for example redact "https://example.com?secret=abcdef" into "https://example.com?secret=<redacted>"
Instana.redactHTTPQuery.add("secret".toRegex())
// in order to for example redact "https://example.com?hidden1=abcdef&hidden2=123456" into "https://example.com?hidden1=<redacted>&hidden2=<redacted>"
Instana.redactHTTPQuery.add("^hidden[0-9]".toRegex())
}
}
Exclure les paramètres de requête et les fragments « URL » du suivi
Par défaut, l'agent Android collecte l' URL complète, qui comprend tous ses paramètres. Vous pouvez configurer l'agent de manière à ce qu'il ne collecte les paramètres que pour les URL correspondant à une liste spécifiée d'expressions régulières. Les paramètres des URL exclues ne sont pas suivis.
À partir de la liste d'expressions régulières fournie, l'agent Android suit les URL comme suit :
- Si l' URL e correspond à une entrée de la liste, l' URL e complète, y compris tous les paramètres, est récupérée.
- Si l'adresse URL ne correspond à aucune entrée de la liste, les paramètres de requête et les fragments de l'adresse URL ne sont pas transmis au backend Instana.
- Si la liste fournie est vide, le comportement par défaut est appliqué et l' URL e complète, avec ses paramètres, est enregistrée.
Instana {
val queryTrackedDomainList = mutableListOf<Regex>()
}
Les scénarios suivants décrivent la situation dans laquelle l' URL e contient un secret ou un fragment masqué :
- Si l' URL e correspond à une entrée dans
queryTrackedDomainList, l' URL e complet, avec le secret ou le fragment masqué, est envoyé au backend Instana. - Si l' URL e ne correspond à aucune entrée du
queryTrackedDomainList, tous les paramètres sont exclus avant l'envoi de l' URL e au backend Instana.
Exemple
Dans l'exemple suivant, seules les URL qui correspondent à l'expression régulière .*10\\.0\\.2\\.2:8081.* sont récupérées dans leur intégralité, avec leurs paramètres :
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
Instana.setup(
this,
InstanaConfig(
key = BuildConfig.INSTANA_KEY,
reportingURL = BuildConfig.INSTANA_REPORTING_URL
)
)
Instana.queryTrackedDomainList.add(".*10\\.0\\.2\\.2:8081.*".toRegex().toPattern())
}
}
Capture des en-têtes HTTP
Si vous le souhaitez, l'agent « Instana » peut enregistrer les en-têtes « HTTP » de chaque requête ou réponse suivie.
Une liste de modèles d'expression régulière peut être définie pour déterminer les en-têtes qui sont capturés.
Si le même nom d'en-tête est présent à la fois dans une demande et dans sa réponse, seule la valeur d'en-tête de la réponse est conservée.
Instana {
val captureHeaders = mutableListOf<Regex>()
}
Exemple
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
Instana.setup(
this,
InstanaConfig(
key = BuildConfig.INSTANA_KEY,
reportingURL = BuildConfig.INSTANA_REPORTING_URL
)
)
// in order to capture all request/response headers like: "X-MyCompany-name1", "X-MyCompany-name2"...
Instana.captureHeaders.add("X-MyCompany-.*".toRegex())
}
}
Activer le mode d'envoi lent
La fonction de mode d'envoi lent est désactivée par défaut. Si nécessaire, vous pouvez activer cette fonction.
Par défaut, si l'envoi d'une balise échoue, l'agent Instana tente de la renvoyer jusqu'à ce que l'envoi aboutisse. Ce renvoi ne fonctionne pas bien avec certains réseaux cellulaires. En activant la fonctionnalité « mode d'envoi lent », l'intervalle d'envoi des balises est défini sur la valeur temporelle attribuée au slowSendIntervalMillis paramètre. Chaque envoi de balise consiste en une seule balise au lieu d'un lot (un maximum de 100 balises dans un lot). L'agent « Instana » reste en mode d'envoi lent jusqu'à ce qu'une balise ait été envoyée avec succès.
La plage de temps valide pour slowSendIntervalMillis est comprise entre 2 000 et 3 600 000 millisecondes.
Exemple
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
Instana.setup(
this,
InstanaConfig(
key = BuildConfig.INSTANA_KEY,
reportingURL = BuildConfig.INSTANA_REPORTING_URL,
slowSendIntervalMillis = 60000
)
)
}
}
Suivi de l'identifiant de session de l'utilisateur
Par défaut, la session utilisateur est suivie et l'ID est un identificateur unique universel (UUID) généré de manière aléatoire. Cet ID reste inchangé lors de l'installation de l'application. Vous pouvez configurer la durée de validité de l'identifiant de session utilisateur à l'aide du usiRefreshTimeIntervalInHrs paramètre. Les valeurs de paramètre suivantes indiquent le statut de l'ID de session utilisateur:
Nombre négatif: cette valeur indique que l'ID de session utilisateur n'expire jamais. La valeur par défaut est -1.
Nombre positif: cette valeur signifie que l'ID de session utilisateur est actualisé après l'heure définie, c'est-à-dire qu'un nouvel identificateur unique universel est généré et utilisé.
Zéro: Cette valeur indiquée par 0.0 signifie que l'ID de session utilisateur est désactivé.
Exemple
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
Instana.setup(
this,
InstanaConfig(
key = BuildConfig.INSTANA_KEY,
reportingURL = BuildConfig.INSTANA_REPORTING_URL,
usiRefreshTimeIntervalInHrs = 24
)
)
}
}
Récupération du nom de l'interface utilisateur modulable
Pour capturer automatiquement les noms d'écran des interfaces utilisateur composables, vous pouvez ajouter la fonction d'extension addInstanaObserver() à l'objet NavHostController dans votre application composable. Cette fonction collecte les noms du chemin d'accès spécifié pour la navigation composable.
Exemple
@Composable
fun RootNavigationGraph(navHostController: NavHostController, context: Context) {
NavHost(
navController = navHostController,
route = Graph.ROOT,
startDestination = Graph.INITIAL_FLOW,
) {
initNavGraph(navHostController, context)
composable(route = Graph.HOME) {
navHostController.addInstanaObserver() //Adding Instana observer as a extension function.
HomeScreen()
}
}
}